본문 바로가기
Reversing/Reversing

static 안티 디버깅

by bbolmin 2013. 1. 3.

 

PEB(+0x2) BeingDebugged 검사 : 디버깅 중이면 1, 일반 실행은 0을 가진다.

 

관련 함수 : IsDebuggerPresent() - BeingDebugged 값 반환

 

 

 

PEB(+0x68) NtGlobalFlag 검사 : 디버깅 중이면 0x70, 일반 실행은 0을 가진다.

[*] 실행 후 attach한 경우에는 그대로 0을 가짐.

 

ex)

mov eax, fs:[0x18];
mov eax, dword ptr [eax+0x30];
movzx eax, byte ptr [eax+0x68];

 

 

 

ntdll의 NtQueryInformationProceses() 함수

 

PROCESSINFOCLASS 구조체에서 디버거 탐지에 사용되는 필드 

ProcessDebugPort(0x7), ProcessDebugObjectHandle(0x1e), ProcessDebugFlasg(0x1f)

 

ProcessDebugPort(0x7) : 디버깅 중이면 0xfffffffff, 일반 실행은 0을 가진다.

ProcessDebugObjectHandle(0x1e) : 0x20 / 0x0
ProcessDebugFlasg(0x1f) : 0x0 / 0x1

 

[*] CheckRemoteDebuggerPresent함수 :  ProcessDebugPort로 디버깅 탐지. (다른 프로세스의 디버깅 여부도 판단 가능)

 

 

 

ntdll의 ZwSetInformationThread() 함수

ThreadHideFromDebugger(0x11) : 디버거를 detach시킴

 

 

'Reversing > Reversing' 카테고리의 다른 글

무료 .NET Decompiler  (1) 2013.11.04
ollydbg로 dll파일 디버깅  (0) 2013.02.28
PE의 IAT입력 과정  (0) 2012.10.31
함수 호출 규약  (1) 2012.10.16
Windbg 명령어 요약  (0) 2012.10.13