PE 헤더

:: 작은 구조체들이 모여서 만들어진 데이터 덩어리

:: 크게 DOS Header와 DOS Stub, NT Header, Section Header로 구성

 

 

PE 헤더 (출처 위키백과)

 

 

DOS Header DOS Header는 DOS와 호환성을 위해 만들었다. 파일의 처음에 위치하고 0x40의 크기를 갖는다.
DOS Stub 해당 파일이 MS-DOS에서 실행될 경우, 화면에 출력될 메시지와 코드가 기록되어 있다. 
DOS Stub은 옵션이기 때문에 파일 실행에 영향이 없다. 크기가 일정하지 않고 없어도 되는 영역이다.
NT Header 파일 실행에 필요한 중요 정보들을 담고 있다. 0xF8의 크기를 갖는다.
Section Header  각 섹션의 속성 정보를 담고 있다.

 

ⓐ DOS Header

- DOS Signature : 실행 파일이라는 표식. 2Byte이고 "MZ(0x5A4D)" 값을 가진다.

- NT Header Offset : NT 헤더의 시작 지점에 대한 정보를 담는다. 4Byte.

 

ⓑ NT Header 

- PE Signature : 올바른 PE 파일인지 확인하는 용도로 사용된다. 4Byte이고 "0x50450000"값을 가진다.

- FILE HEADER : 파일의 Physical 정보를 담고 있는 구조체이다.

Machine에서 UPU -> CPU (오타)

- OPTIONAL HEADER : 파일의 Losical 정보를 담고 있는 구조체이다.

 

ⓒ Section Header

- VirtualSize : 메모리에서 섹션이 차지하는 크기이다.

- RVA(VirtualAddress) : 메모리에서 섹션의 시작 주소이다.

- SizeOfRawData :  파일에서 섹션이 차지하는 크기이다.

- OffsetToRawData : 파일에서 섹션의 시작 주소이다.

- Characteristics :  섹션의 속성 정보를 담고 있다.

 

VA (Virtual Address, 가상주소) & RVA (Relative Virtual Address, 상대주소)

:: 특정 값의 위치 정보를 표현할 때

파일에서의 위치(Offset), 메모리에서의 위치(VA), 메모리에서의 상대 위치(RVA)를 사용한다.

여기서 RVA는 파일 데이터가 메모리에 올라간 시작 지점으로부터 떨어져 있는 상대 위치이다.

VA = Image Base + RVA

(Image Base는 OPTIONAL HEADER에 있다.

실행파일이 메모리에 올라간 위치로, 파일 데이터가 메모리에 올라갈 때 기준이 되는 주소 값을 가진다. 기본적으로 EXE는 0x004000000, DLL은 0x10000000 값을 가진다.)

 

ⓓ IAT(Import Address Table)와 EAT(Export Address Table)

Windows 운영체제에서 EXE가 동작할 때 DLL이라는 비서를 두고 활용하게끔 만들어져 있다. 이것을 가능하게 하는 것이 IAT와 EAT 메커니즘이다. 

- IAT : DLL이 제공하는 함수들 중 사용하는 것들에 대한 정보를 기술해놓은 테이블

(ex; EXE를 로드하는 과정에서 필요한 함수 호출 주소 정보를 획득하여 EXE의 IAT에 기록, EXE는 동작 과정에서 필요할 때마다 IAT를 참고하여 함수를 호출)

- EAT : DLL 자신이 서비스하는 함수에 대한 정보를 기술해 놓은 테이블

 

 

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

main 함수 찾기  (0) 2021.03.23
OllyDBG, 어셈블리어  (0) 2021.02.04
IAT & EAT  (0) 2021.01.25
PE File Format 이해  (0) 2021.01.23
리버싱의 이해  (0) 2021.01.22

+ Recent posts