NtQueryInformationProcess, ZwQueryInformationProcess - NoDebugInherit
참고URL : https://docs.microsoft.com/en-us/windows/desktop/procthread/zwqueryinformationprocess
NtQueryInformationProcess는 ZwQueryInformationProcess의 wrapper 함수이다.
[ ZwQueryInformationProcess 함수 ]
[Syntax]
ProcessHandle
: 정보를 받기를 원하는 프로세스의 핸들
ProcessInformationClass [in]
: 받고자 하는 프로세스 정보 타입. (참고 URL을 보면 목록을 볼 수 있다.)
하지만 지금 살펴볼 값은 문서화 되지 않은 값 ProcessDebugFlags(0x1f)을 넘기는 경우를 살펴본다.
ProcessInformation [out]
: ProcessInformation을 받아올 버퍼 주소
ProcessInformationLength [in]
: 받아올 정보의 길이
ReturnLength [out]
: 성공적으로 잘 받아왔다면 ProcessInformationLength와 값이 같고, 실패했다면 information을 받는데 필요한 최소 크기를 명시해줌.
[안티 디버깅]
1) 두번째 인자의 값을 문서화 되지 않은 값인 ProcessDebugFlags(0x1f)를 넘기면,
2) EPROCESS Flags 의 NeDebugInherit Bit Flag 값을 반환 받음.
3) 0 : 디버깅 중! / 1 : 디버깅 아니네?
EPROCESS의 1byte Flags에는 각 비트별로 의미하는 플래그들이 다르다. (자세한 건 URL 참조)
그 중에서 우리는 NoDebugInherit 비트 플래그 (1 or 0) 값을 반환 받아서 디버깅 중인지 판별한다.
[우회 방법]
3번째 인자를 메모리에 띄워놓고 함수 호출 후 1로 바꿈. (0아님! 주의!)
'취약점 분석 > 안티 리버싱' 카테고리의 다른 글
NtQueryInformationProcess - ProcessDebugObjectHandle 우회방법 (0) | 2019.02.27 |
---|---|
NtQueryInformationProcess - ProessDebugPort 우회방법 (0) | 2019.02.27 |
안티 리버싱 - BP를 찾자. (0) | 2019.02.26 |
SeDebugPrivilege, 우회방법 (0) | 2019.02.26 |
NtGlobalFlag, 우회방법 (0) | 2019.02.26 |