PE File Format


PE(Portable Executable) 파일은 Windows 운영체제에서 사용되는 실행 파일 형식

32bit : PE32

64bit : PE+ or PE32+



종류

   실행 계열 : EXE, SCR                                           드라이버 계열 : SYS, VXD

   라이브러리 계열 : DLL, OCX, CPL, DRV                    오브젝트 파일 계열 :  OBJ


기본 구조

1.DOS header

2.Section header

3.PE Body


DOS_HEADER(크기 0x40)

중요한것 e_magic, e_lfanew

e_magic은 PE파일 모두 MZ

e_lfanew는 NT Header 구조체의 오프셋이 존재 (도스 헤더의 마지막 8byte)


DOS HEADER의 밑에는 DOS Stub이 존재하는데,

이는 파일 실행의 문제를 주지 않음(있을수도 있고, 없을수도 있음)

(보통은 dos에서 실행시 this program cannot be run in DOS mode" 를 출력)


NT Header(크기 0xF8)

위는 3개의 멤버를 가지는데 첫번째 멤버는 Signature로 PE라는 값을 가짐

그리고 FileHeader와 OptionalHeader를 가짐


FileHeader에선 4가지가 중요

1.Machine CPU별로 고유한값이므로 이는 만들어진 환경을 추측가능함

2.NumboerOfSections 섹션의 수(코드,데이터,리소스 등이 나뉘는데 그 숫자)

3.SizeOfOptionalHeader OPTIONAL헤더의 크기 (이미정해져있는 크기)

4.Characteristics    파일의 속성값(실행가능 여부등을 or로 표시)


Optional Header(크기 0xE0)

매직넘버 32bit 10B, 64bit, 20B

AddressOfEntryPoint : RVA값을 가지고있는데 최초로 실행되는 코드의 시작주소

ImageBase : PE파일이 로딩되는 주소

메모리 로딩후 EIP = ImageBase + AddressOfEntryPoint

섹션의 최소단위(파일과 메모리로 나뉘어져있으나 같을수도있고 다를수도있다)

가상메모리에서 PE Image의 크기

PE헤더의 전체크기(파일섹션크기의 배수)

subsystem값

DataDirectory배열의 크기

DataDirectory 배열(매우 중요)


위와 같은 내용을 오늘 공부했고,  직접 확인해보며 책이랑은 다른부분도 있었고,

중요한내용들이 꽤 많아 이는 분석할때 메모를 바로옆에 켜두고 해야될거같습니다.


요약

1.PE File Format 복습(실습 및 정리)

블로그 이미지

Kylin_1Q84

,