티스토리 뷰
PE32, PE+, PE32+ 라고 불리는 PE File Format은 실행파일형식이다.
Linux의 ELF File Format과 같다. 이 파일형식을 가지는 확장자는 EXE, DLL, OCX, SYS 등등이 있다.
DOS Header
DOS Stub --- 여기까지는 DOS와의 호환성을 위해 존재하는 Header이다.
NT Header
Section Header (.text)
Section Header (.data)
Section Header (.rsrc) --- 여기까지가 PE Header이다.
Section (.text)
Section (.data)
Section (.rsrc)
PE File Format은 대표적으로 위와같은 구성을 가진다.
여기서 당연하게도 Section은 늘어날수도 줄어들수도 있다. (임의로 추가도 가능)
[ DOS Header ]
DOS와의 호환성을 위해 만들어진 Header이다. 총 40byte로 구성되어있다.
사용되는 멤버
- e_magic : DOS Signiture ( 4D5A : MZ )
- e_ifanew : NT Header Offset ( Default : 0x100 )
( NT Header이 나오는 Offset을 나타낸다. DOS Stub에 따라서 가변적이다. )
위 두 멤버를 제외하고 나머지 멤버는 다른 것으로 대체되어도 상관없다.
( 실제로 UPackPE에서는 이와 같은 방법을 교묘하게 이용했다. )
[ NT Header ]
총 0xF8byte로 구성되어있다. PE Header중에 가장 큰 구조체이다.
사용되는 멤버
- Signiture : 5045 (PE)
- File Header
Machine : CPU별 고유한 값이 존재한다.
NumberOfSections : Section의 개수. 반드시 Section Header의 개수와 일치해야한다.
SizeOfOptionalHeader : OptionalHeader의 크기는 구조체로 0xE0으로 고정되어있지만,
Windows는 해당 값을 통해서 OptionalHeader의 크기를 인식한다.
UPackPE에서는 이 값을통해 해당 크기를 속이는 방법을 이용한다.
Characteristics : 파일의 속성을 OR bit연산을 통해서 나타낸다.
- OptionalHeader :
Magic : 32bit일 경우 10B, 64bit일 경우 20B의 값을 가진다.
AddressOfEntryPoint : 해당 PE 파일이 Memory에 올라갈경우 Entry Point를 나타낸다.
ImageBase : 뭔지는 됐고, EXE는 0x40000 DLL은 0x10000000의 기본값을 가진다.
Windows 시스템에서 제공하는 DLL들은 고유한 ImageBase를 가진다.
( Relocation의 과정을 거치지 않기 위함이다. )
SectionAlignment, FileAlignment : 두 가지 정렬기준이다.
SizeOfImage : PE파일이 메모리에 로딩되었을때 가상메모리에서 PE Image크기이다.
SizeOfHeader : PE Header의 총 크기를 나타낸다. 파일 시작인 0에서 이 크기를 더하면
첫 번째 Section에 대한 데이터가 나온다. - FileAlignment의 배수이다.
Subsystem : 별건 아니지만 SYS, GUI, CUI의 구분용이다.
NumberOfRvaAndSize : DataDirectory 배열의 길이이다.
기본적으로 0x10개로 정해져 있지만 PE로더는 해당 값을 보고 인식한다.
( 마찬가지로 UPackPE는 이를 이용해 여유공간을 만들고 이용한다. )
[ Section Header ]
Section을 구분짓는 이유는 상호간의 안정성을 위해서이다.
사용되는 멤버
- Name (8byte)
- Virtual Size (4byte) : Memory에서의 Size
- RVA (4byte) : Memory에서의 Offset
- SizeOfRawData (4byte) : File에서의 Size
- PointerToRawData (4byte) : File에서의 Offset
- Characteristics (4byte) : 권한 등등의 속성을 OR bit로 계산하여 나타낸다.
'Reversing > Concept' 카테고리의 다른 글
[Reversing] PE File Format 2 ( Feat. 나뭇잎 ) (0) | 2020.01.14 |
---|---|
[Reversing] RVA → RAW ( Feat. 나뭇잎 ) (0) | 2020.01.14 |
[Reversing] Visual Basic에서의 Reversing ( Feat. 나뭇잎 ) (0) | 2020.01.13 |
[Reversing] Register & Stack ? ( Feat. 나뭇잎 ) (0) | 2020.01.13 |
[Reversing] 정적분석 & 동적분석 ( Feat. 나뭇잎 ) (0) | 2020.01.13 |