공부해요/리버싱_핵심원리

47. PEB

yenas0 2025. 1. 2. 08:26
반응형

PEB란?

프로세스의 정보를 담고 있는 구조체

방대한 크기

문서화 된 내용

 

PEB 접근 방법

앞에 TEB설명가지고 생각해보면

 

FS:[30] = TEB.ProcessEnvironmentBlock = address of PEB

 

이런 공식을 구할 수 있다.

 

이 공식을 어셈블리 코드로 만들어보면

방법1. 바로 PEB 주소 구하는 방법

MOV EAX, DWORD PTR FS:[30]            ; FS[30] = address of PEB

 

방법2. TEB 주소 구하고 ProcessEnvironmentBlock멤버를 이용하는 방법

MOV EAX, DWORD PTR FS:[18]             ; FS[18] = address of TEB
MOV EAX, DWORD PTR DS:[EAX+30]            ; DS[EAX+30] = address of PEB

 

 

올리디버거로 PEB 구조체를 확인하기 위해 아무 프로그램이나 올려보고 명령어를 입력해보자

MOV EAX, DWORD PTR FS:[30]이거 입력하면 됨

 

그럼 새로 입력한 명령어를 실행 시키고 나면 EAX 레지스터에 PEB 주소가 입력된다.

 

 

PEB 구조체 정의

typedef struct _PEB {
    BYTE Reserved1[2];
    BYTE BeingDebugged;
    BYTE Reserved2[1];
    PVOID Reserved3[2];
    PPEB_LDR_DATA Ldr;
    PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
    BYTE Reserved4[104];
    PVOID Reserved5[52];
    PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
    BYTE Reserved6[128];
    PVOID Reserved7[1];
    ULONG SessionId;
} PEB, *PPEB;

 

운영체제 별로 PEB 구조체 내용은 다른데 Windows 7의 PEB 구조체가 Windows XP SP3보다 크다..

 

 

PEB 중요 멤버 설명

+002 BeingDebugged     : UChar
+008 ImageBaseAddress  : Ptr32 Void
+00c Ldr              : Ptr32 _PEB_LDR_DATA
+018 ProcessHeap      : Ptr32 Void
+068 NtGlobalFlag     : Uint4B

 

PEB.BeingDebugged

Kernel32!IsDebuggerPResent()라는 API는 일반 응용 프로그램 개발에는 잘 사용 안함.

BOOL WINAPI IsDebuggerPresent(void);

얘는 현재 프로세스가 디버깅 당하고 있는지 판단해서 결과 리턴하는 API

이 API가 참조하는 정보가 PEB.BeingDebugged 멤버

디버깅 중이면 1 아니면 0리턴한다.

 

PEB.ImageBaseAdress

이거는 프로세스의 ImageBase를 표시

HetModuleHandle() API는 ImageBase 얻는 API

 

PEB.Ldr

_PEB_LDR_DATA 구조체의 포인터

프로세스에 로딩된 모듈의 로딩 베이스 주소를 직접 구할 수 있는 방법을 제공함

_LIST_ENTRY는 양방향 연결 리스트 매커니즘을 제공 -> 프로세스에 로딩된 DLL 모듈마다 _LDR_DATA_TABLE_ENTRY 구조체가 하나씩 생성되고 이 구조체가 _LIST_ENTRY 양방향 연결 리스트로 연결됨

 

PEB.ProcessHeap & PEBNtBlobalFlag

안티 디버깅 기법에 사용

프로세스가 디버깅 중이라면 두 멤버는 특정 값을 가지는데 이걸로 안티디버깅한다.

반응형

'공부해요 > 리버싱_핵심원리' 카테고리의 다른 글

49. IA-32 Instruction  (0) 2025.01.12
48. SEH  (0) 2025.01.08
46. TEB  (1) 2025.01.02
45. TLS 콜백 함수  (0) 2025.01.02
44. InjDll.exe-DLL 인젝션 전용 도구  (0) 2024.12.26