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

,

5번째 시간입니다!

알바와 병행하고있어서 매우 피곤한 하루네요.


오늘은 다음주 토요일 26일에 열리는 정보보안대회 예선인

코드게이트준비를 하기위해서 

리버싱핵심원리책에서 PE헤더부분을 복습하고.

안티디버깅부분을 조금 공부하려고해요!

열심히하겠습니당.

블로그 이미지

Kylin_1Q84

,

네번째 모임을 마쳤습니다!


깃허브수정은 이제 구글링 없이 스스로 이것저것 건들여보고 있어서

발전이 조금 더딘것 같습니다.

일단은 메인의 사진을 변경했고,

기본 디자인을 수정해보려했으나 실패했습니다.


리버싱핵심원리책은

11장 의 복습

13장의 PE파일포맷에 대해 공부하였는데 이부분이 좀 어마어마하게 많아서

따로 정리해야할거같습니다.


요약

1.github블로그 꾸미기(진행중)

2.리버싱핵심원리 11장복습

3.PE파일포맷의 공부


블로그 이미지

Kylin_1Q84

,