Anti-Debugging NtQueryInformationProcess

안상준·2025년 2월 21일

Anti-Debugging

목록 보기
2/7
post-thumbnail

NtQueryInformationProcess를 이용한 안티디버깅 기법

ntdll.dll파일에 존재하는 API로, 안티디버깅에 사용되는 API다.


공식 문서에 있는 NtQueryInformationProcesssyntax이며

해당 코드는 두 번째 멤버변수의 열거형 입니다. 공식 문서에는 일부만 보여주고 있다.

ProcessDebugPort

첫 번째로, 디버그 포트를 체크하는 방법으로, 디버깅 중에는 해당 포트가 활성화가 된다.

공식 문서이며, 인자 7을 사용하여 포트번호 DWORD_PTR값을 검색한다.

NtQueryInformationProcess(hProcess, 7, &hPort, sizeof hPort &result);

API사용법의 예시로 hPort에 디버그 포트 정보가 저장 된다.

ProcessDebugObjectHandle

두 번째로, 디버그 세션이 시작될 때 생성되는 디버그 객체와 관련된 핸들을 요청하는 방법이다.
디버그 객체 핸들이 존재하면, 프로세스가 디버거에 의해 디버깅 되고 있음을 나타낸다.
공식 문서에서 찾을 수 없는 값이지만, 안티 디버깅에 자주 사용되는 방법이다.

NtQueryInformationProcess(GetCurrentProcess(), 0x1e, &hDebugObject, 4, NULL);

예시 코드이며, hDebugObject에 디버깅 여부가 저장된다.

ProcessDebugFlags

디버깅 중인지를 DWORD 플래그로 판별할 수 있다.
ProcessDebugFlags또한 공식문서에는 존재하지 않는다.

NtQueryInformationProcess(GetCurrentProcess(), 0x1f, &NoDebugInherit, 4, NULL);

NoDebugInherit변수에 결과값이 저장되며 결과가 FALSE일 경우 디버깅 중으로 판별한다.

NtQuenryInformationProcessAPI는 VMProtectDebugger Detection옵션을 적용하면 사용되는 API이다.

감사합니다.

0개의 댓글