반응형

NT Header에는 IMAGE_NT_HEADERS 구조체가 있는데, 3개의 멤버로 구성되어 있다.

그 중 Signature은 50450000h("PE 00")값을 가진다. 또한 File Header와 Optional Header 구조체가 있다.


File Header


IMAGE_FILE_HEADER 구조체는 파일의 개략적인 속성을 나타내는데, 옆의 그림에서 보이는 4가지 멤버가 있지 않으면 파일의 정상적 실행이 불가능하다.





1. Machine

머신 넘버는 CPU별로 고유한 값이다.


2. Number Of Sections

코드, 데이터, 리소스 등이 각각의 섹션에 나뉘어 저장되는데 그 섹션의 개수를 나타낸다.


3. Size Of Optional Header

IMAGE_NT_HEADERS 구조체의 마지막 멤버인 IMAGE_OPTIONAL_HEADER32 구조체의 크기를 나타낸다. 


4. Characteristics

파일의 속성을 나타내는 값이다. 실행 가능한지 DLL파일인지 등을 bit OR형식으로 조합한다.


참고로 IMAGE_FILE_HEADER의 TimeDataStamp 멤버는 파일의 실행에 영향을 미치지 않지만, 해당 파일의 빌드 시간을 알려준다.

위는 IMAGE_FILE_HEADER 구조체를 나타낸 것이다.


Optional Header

PE헤더의 구조체 중 가장 크기가 큰 구조체가 IMAGE_OPTIONAL_HEADER32이다.

1. Magic : IMAGE_OPTIONAL_HEADER32인 경우 10B, IMAGE_OPTIONAL_HEADER64(64bit)는 20B값을 가진다.


2. Address Of Entry Point

EP의 RVA값을 가진다. 프로그램 최초 시작 주소이다.


3. ImageBase

프로세스 가상 메모리는 0~FFFFFFFF까지 광범위한데 이 광활한 메모리에서 PE파일이 로딩되는 시작주소를 나타낸다. 일반적으로 EXE 파일의 ImageBase값은 00400000, DLL은 10000000이다. PE로더는 PE파일을 실행시키기 위해 프로세스를 생성하고 메모리에 로딩한 후 EIP 레지스터 값을 ImageBase+AddressOfEntryPoint 값으로 세팅한다.


4. SectionAlignment, FileAlignment

PE바디는 섹션으로 나뉘어 있는데 파일에 섹션의 최소단위를 나타내는 것이 FileAlignment이고, 메모리에서 섹션의 최소단위를 나타내는 것이 SectionAlignment이다. 섹션 크기는 반드시 FileAlignment/SectionAlignment의 배수가 되어야한다.


5. Size Of Image

PE파일이 메모리에 로딩되었을때 가상 메모리에서 PE Image가 차지하는 크기를 나타낸다. 


6. Size Of Header

PE헤더의 전체 크기이다. FileAlignment의 배수가 되어야 한다. 


7. Subsystem

Subsystem값을 보고 파일의 종류를 구분할 수 있다.

 값

 의             미

 1

 드라이버 파일 - 시스템 드라이버

 2

GUI 파일 - 창 기반 어플리케이션 

 3

CUI 파일 - 콘솔 기반 어플리케이션 


8. Number Of Rva And Sizes

IMAGE_OPTIONAL_HEADER32 구조체의 마지막 멤버 DataDirectory 배열 갯수를 나타낸다. 


9. DataDirectory

IMAGE_DATA_DIRECTORY 구조체 배열로 각 항목마다 정의된 값을 가진다.


위는 notepad의 IMAGE_OPTIONAL_HEADER 구조체 영역을 가져온 것이다.











반응형

'Study > Reversing' 카테고리의 다른 글

"pwnable.kr" fd 문제풀이  (0) 2014.11.04
PE헤더-Dos header/Dos stub  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07

+ Recent posts