PE 헤더
:: 작은 구조체들이 모여서 만들어진 데이터 덩어리
:: 크게 DOS Header와 DOS Stub, NT Header, Section Header로 구성
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 정보를 담고 있는 구조체이다.
- 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 |