본문 바로가기

Kitri_NCS3기 보안과정/시스템 해킹

[Reverse Engineering]PE-DOS Header

참고 : http://zesrever.tistory.com


※ PE 파일이란 ?


 윈도우즈 환경의 실행파일 포맷을 PE 라고 하며, Portable Executable의 약자. 굳이 EXE 파일만 일컫는것이 아니라 SCR,SYS,DLL,OCX등도 포함됨. PE의 이해는 API후킹, 압축실행파일 등과 같은 고급 리버싱기법의 기본 바탕이된다.


PE파일은 디스크상의 모습과 메모리상의 모습이 거의 같다, 실행시 하드에 저장되어 있던 파일의 형태 그대로 메모리에 올라가는 모습을 보인다.

PE를 파악하기위해서는 PE파일의 구성요소와 그 구성요소들의 시작점을 찾는 방법을 잘 숙지해야함.


실행파일 분석기를 만들어보는것이 PE를 연구하는데 가장 효과적인방법...


PE구성요소 

- DOS header

- DOS stub code

- PE header

- Section table

- Section (1~n)


각 구성요소의 시작위치 계산법 

 시작위치

설명 

DOS header

PE 파일은 DOS header로 시작. 디스크상에서의 위치와 메모리상에서의 위치가 다르다.

디스크 : 파일의 첫부분이 DOS header

메모리 : ImageBase에서 시작

DOS stub code

디스크상이나 메모리 상에서  DOS의 스텁 코드는 시작점(Dos header)으로부터 64byte만큼 떨어진곳.


프로그램을 도스모드에서 실행시켯을때 실행되는 코드이며 DOS header 다음에 위치한다. 필수 구성요소가 아니기 때문에 없어도 실행하는데는 지장이 없으며, 크기는 가변적이다.

PE header

e_lfanew에는 4byte의 크기로 DOS header의 마지막에 위치하며  파일의 시작점에서부터 PE 헤더까지의 오프셋 값이 저장되어있음. e_lfanew의 값을 시작주소로 찾으보면 PE헤더를 찾을 수 있다.

Section table

PE의 헤더 시작주소에서 PE 헤더 사이즈를 더해주면 된다. 

PE 헤더 사이즈 (PE signature + File Header + Optional Header)로 구성되어 있습니다.

Section (1~n) 

각 섹션 테이블에 저장된 섹션 헤더를 통해서 확인 가능합니다.

PointerToRawData는 디스크상의 섹션의 위치

VirtualAddress는 메모리상에서의 section의 위치를 가르키는 offset





DOS Header (= IMAGE_DOS_HEADER)



DOS와의 호환을 위해 유지되고 있는 헤더. PE파일의 시작.

DOS헤더는 항상 64byte의 크기 고정이며 처음 시작 2byte는 DOS Signature(= e_magic)를 나타내는 정보로 4D 5A 값을 가지고

e_lfanew는 DOS Header의 마지막임과 동시에 PE 헤더의 시작점을 가르키는 오프셋이다.