취약점 분석/안티 리버싱

NtQueryInformationProcess - ProcessDebugObjectHandle 우회방법

night-Ohl 2019. 2. 27. 14:33
반응형

NtQueryInformationProcess, ZwQueryInformationProcess - ProcessDebugObjectHandle

참고URL : https://docs.microsoft.com/en-us/windows/desktop/procthread/zwqueryinformationprocess


NtQueryInformationProcess는 ZwQueryInformationProcess의  wrapper 함수이다.


[ ZwQueryInformationProcess 함수 ]

[Syntax]


ProcessHandle

: 정보를 받기를 원하는 프로세스의 핸들


ProcessInformationClass [in]

: 받고자 하는 프로세스 정보 타입. (참고 URL을 보면 목록을 볼 수 있다.)

문서화 되지 않은 값 ProcessDebugObjectHandle (0x1e)을 넘긴다.


ProcessInformation [out]

: ProcessInformation을 받아올 버퍼 주소


ProcessInformationLength [in]

: 받아올 정보의 길이


ReturnLength [out]

: 성공적으로 잘 받아왔다면 ProcessInformationLength와 값이 같고, 실패했다면 information을 받는데 필요한 최소 크기를 명시해줌.


[안티 디버깅]

1) 두번째 인자의 값을 문서화 되지 않은 값인 ProcessDebugObjectHandle (0x1e)를 넘기면,

2) 함수 호출 후 3번째 인자 결과  

[ nonzero : 디버깅 중이네? / 0 : 디버깅 아니군! ]

3) 함수 리턴 값 

[ 0 : 디버깅 중! / 0xC0000353 (STATUS_PORT_NOT_SET) : 디버깅 아니네? ]


[우회 방법]

1) 3번째 인자를 메모리에 띄워놓고 함수 호출 후 0으로 바꿈.

2) NtQueryInformation, ZwQueryInformation 함수 결과 값(eax)를 0xC0000353으로 바꿈.


반응형