반응형
typedef struct _IMAGE_DOS_HEADER // DOS .EXE header
{
WORD e_majic; // 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; // Maximun 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, *PINAGE_DOS_HEADER;
IMAGE_DOS_HEADER 의 크기는 64 bytes 로 WORD 16개, WORD[] 2개, LONG 1개의 필드를 가지고있다.
IMAGE_DOS_HEADER 에서 가장 중요한 두필드만 설명을 하고 나머지 필드는 중요하지 않으니 생략한다.
1. e_magic
e_magic 필드는 ASCII 코드인 "MZ"를 고정된 값을 가진다.
"MZ" 를 워드 단위로 읽으면 0x5A4D (5A = 'Z', 4D = 'M') 가 되고
리틀 엔디언 방식을 사용하기 때문에 워드의 상/하위 바이트가 바뀌어 표시된다.
이 값은 WinNT.h 파일에 메크로로 정의 되어있다.
#define IMAGE_DOS_SIGNATURE 0x5A4D // MZ
e_magic 필드를 사용하여 해당 파일이 PE 파일 형식인지 체크할 수 있다.
2. elfanew
e_lefanew 필드는 IMAGE_NT_HEADERS 구조체의 시작 오프셋 값을 가진다.
이 값은 ASCII 코드로 "PE"이며, 실제 PE 포맷의 시작을 의미하는 시그니쳐이다.
PE 파일을 읽어들여 IMAGE_DOS_HEADER에서 e_magic 필드가 "MZ" 인지 확인하고,
e_lefanew 필드의 값만큼 파일 포인터를 이동시키면 본격적인 PE 파일분석을 시작할 수 있게된다.
반응형
'보안 > Reversing' 카테고리의 다른 글
PE 파일 구조 - IMAGE_SECTION_HEADER (0) | 2020.07.24 |
---|---|
PE 파일 구조 - IMAGE_OPTIONAL_HEADER (0) | 2020.07.23 |
PE 파일 구조 - IMAGE_FILE_HEADER (0) | 2020.07.23 |
PE 파일 구조 - IMAGE_NT_HEADERS (0) | 2020.07.23 |
메모리 구조 (0) | 2020.02.29 |