X2r0Ar
리버싱 - PE File Format 본문
리버싱 - PE File Format
◆ PE File Format 이란?
Windows 운영체제에서 사용되는 실행 파일 형식입니다.
- 32bit : PE32
- 64bit : PE+, PE32+
PE File의 종류
- 실행 계열 : EXE, SCR
- 라이브러리 계열 : DLL, OCX, CPL, DRV
- 드라이버 계열 : SYS, VXD
- 오브젝트 파일 계열 : OBJ
VA & RVA
- VA : 프로세스 가상 메모리의 절대주소
- RVA : ImageBase 기준에서 부터의 상대주소
※ ImageBase + RVA = VA
◆ PE 헤더
DOS Header
PE 헤더의 제일 앞부분에 존재 (IMAGE_DOS_HEADER 구조체 / 64byte)
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // Magic number WORD e_cblp; // Bytes on last page of file WORD e_cp; // Pages in file WORD e_crlc; // Relocations WORD e_cparhdr; // Size of header in paragraphs WORD e_minalloc; // Minimum extra paragraphs needed WORD e_maxalloc; // Maximum extra paragraphs needed WORD e_ss; // Initial (relative) SS value WORD e_sp; // Initial SP value WORD e_csum; // Checksum WORD e_ip; // Initial IP value WORD e_cs; // Initial (relative) CS value WORD e_lfarlc; // File address of relocation table WORD e_ovno; // Overlay number WORD e_res[4]; // Reserved words WORD e_oemid; // OEM identifier (for e_oeminfo) WORD e_oeminfo; // OEM information; e_oemid specific WORD e_res2[10]; // Reserved words LONG e_lfanew; // File address of new exe header } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
- e_magic : DOS signature (4D5A=>ASCII "MZ")
- e_lfanew : NT header의 옵셋 (파일에 따라 가변적)
DOS Stub
16비트 어셈블리어 명령어로 32비트에서는 전혀 실행되지 않습니다. (해당 코드가 없어도 실행에 지장없습니다.)
NT Header
typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
- DWORD Signature : PE Signature (50450000=>ASCII "PE00")
NT Header - IMAGE_FILE_HEADER
typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
- WORD Machine : CPU별로 고유한 값 (Intel x86 : 0x014c / Intel x64 : 0x0200)
- WORD NumberOfSections : 섹션의 개수
- WORD SizeOfOptionalHeader : NT Header - IMAGE_OPTIONAL_HEADER32의 크기
- WORD Characteristics : 파일의 속성을 나타내는 값으로, 실행가능한 형태인지 혹은 DLL파일인지 등의 정보들이 bit OR 형식으로 조합
'Reversing. > Study' 카테고리의 다른 글
리버싱 - 기초 리버싱2 (0) | 2017.05.04 |
---|---|
리버싱 - 기초 리버싱 (0) | 2017.05.01 |