Anti-Debugging Debug Object Handle

안상준·2025년 4월 3일

Anti-Debugging

목록 보기
5/7
post-thumbnail

Debug Object Handle




디버그 객체 핸들을 이용한 안티디버깅 기법에 대해서 알아보자

디버그 세션이 시작될 때 생성되는 디버그 객체와 관련된 핸들을 요청하게 된다.
즉 Debug Object Handle 이 존재한다면 이는 디버깅 중임을 의미한다. ProcessDebugObjectHandle 정보 클래스를 사용하여 핸들의 존재 여부를 판단하게 된다.

NtqueryInformationProcess


예시 c++ 코드이다.
NtQueryInformationProcess 함수를 호출하여 ProcessDebugObjectHandle 정보를 요청한다.

함수의 원형이다.
ProcessHandle : 프로세스 핸들로 참조할 프로세스이다.
ProcessInformation : 조회할 정보의 유형으로 디버깅 여부를 확인하려면 ProcessDebugObjectHandle (0x1E) 를 사용해야 한다.
ProcessInformation : 조회된 정보를 저장할 버퍼의 포인터 이다.
ProcessInformationLength : 버퍼의 크기 이다.
ReturnLength : 성공 시 반횐된 데이터의 크기를 저장할 변수의 포인터 이다.

다시 예시코드를 해석하자면 현재 프로세스에서 ProcessDebugObjectHandle 의 정보를 요청하고 존재 여부를 8bytes(64bit) hDebugObject 변수에 저장한다.
반환된 hDebugObject 가 NULL 이 아닌 경우 디버깅 중으로 간주한다.

Bypass

이는 아주 간단하게 우회가 가능하다.
NtqueryInformationProcess 함수를 호출하여 반환값을 저장하는 변수의 값을 조작하게 되면 우회가 가능하다.

0개의 댓글