티스토리 뷰
[Reversing] PEB, Anti-Debugging
PEB란? Process Environment Block로 프로세스의 정보를 담고있는 구조체로 FS 레지스터를 통해 얻을 수 있다.
각 프로세스들 마다 PEB를 가지고 있으며, 스레드로는 TEB를 가지고 있다.
FS:[18] = TEB 주소
또한 PEB를 이용하여 dll과 api 주소를 얻을 수 있으며, 프로세스의 디버깅 유무도 함께 알 수 있다.
0x002 BYTE BeingDebugged;
0x008 void* ImageBaseAddress;
0x00C _PEB_LDR_DATA* Ldr;
0x018 void* ProcessHeap
0x064 DWORD NumberOfProcessors;
0x068 DWORD NtGlobalFlag;
PEB의 안티디버깅에 대해 작성을 해보면, PEB Structure 을 살펴봐야 된다.
+0x002 BeingDebugged
해당 멤버를 살펴보면 디버깅 중일 때 해당 멤버의 값은 '1'로 설정이 된다.
우회를 하기 위해서는 PEB[2] 값을 '0'으로 수정하면 된다.
참고, Kernel32.dll에서 IsDebuggerPresent() 함수가 이 필드를 참고하여 디버깅 상태 확인 후 리턴값을 준다.
+0x018 ProcessHeap
PEB 멤버 ProcessHeap 정보를 담고 있는 HEAP 포인터
HEAP 멤버의 Flags(0x40)와 ForceFlags(0x44)는 디버깅 유무에 따라 다른 값을 가지며 다음과 같음
디버깅 중이 아닐 시 : Flags(2), ForceFlags(0)
디버깅 중일 시 : Flags(0x50000062), ForceFlags(0x40000060
+0x068 NtGlobalFlag
해당 멤버는 디버깅 중일 때 해당 멤버의 값은 '70'으로 설정이 된다.
우회를 하기 위해서는 PEB[68] 값을 '0'으로 수정하면 된다.
'Reversing > Anti-Reversing' 카테고리의 다른 글
[Reversing] ZwSetInformationThread, Anti-Debugging (0) | 2020.02.10 |
---|---|
[Reversing] Anti-Reversing (0) | 2020.01.06 |
- Total
- Today