1. PEμ PEview
β
PE(Portable Executable) : νλμ μ€ννμΌμ λ€μν Windows μ΄μ체μ μμ μ€νμν¬ μ μλ€.
β
PE File : 1) Windows μ΄μ체μ μμ μ€νλλ μ€ννμΌμ΄λ€.
2) Win32 μ΄μ체μ λΌλ©΄ μ΄λμμλ μ λμκ°λ€. -> DOSλͺ¨λλ₯Ό μ μΈν windows μ΄μ체μ
β
PEλ₯Ό λ°°μμΌ νλ μ΄μ : 1) PEνμΌμ ꡬ쑰λ₯Ό λ°°μ°λ©΄ νμΌμ΄ μ€νλκΈ° μν λͺ¨λ μ 보λ₯Ό μ»μ μ μλ€.
2) μ΄λ ꡬ쑰체 νμμΌλ‘ PEν€λμ μ μ₯λμ΄ μλ€.
β
PEνμΌμ μ’ λ₯
μ€νκ³μ΄
|
μ€λͺ
|
λλΌμ΄λ²κ³μ΄
|
μ€λͺ
|
λΌμ΄λΈλ¬λ¦¬
κ³μ΄
|
μ€λͺ
|
μ€λΈμ νΈκ³μ΄
|
μ€λͺ
|
EXE
|
μ€ννμΌ
|
SYS
|
μλμ° μ΄μ체μ μμ μ¬μ©λλ μμ€ν
νμΌ
|
DLL
|
μλμ°μ μ μ₯λμ΄μλ κΈ°λ₯μ νμΌλ‘ μ μ₯(μ©λ↓/ μ€νx )
|
OBJ
|
3μ°¨μ κ·Έλν½ μ΄λ―Έμ§κ° μ μ₯λ νμΌμ νν μ€ νλ€
|
SCR
|
ν면보νΈκΈ°μ μΌλ°μ μΈ νμΌνμ
|
VXD
|
μλμ°μμ μ°μ΄λ μ₯μΉλλΌμ΄λ² λͺ¨λΈ
|
OCX
|
μλμ°μ κ°μ’
μμ©νλ‘κ·Έλ¨ μ¬μ΄μμ μλ‘ λ°μ΄ν°λ₯Ό 곡μ ν μ μλ κΈ°λ₯
|
||
CPL
|
DLLκ³Ό λμΌνλ, EXEμ κ°μ΄ μ€νκ°λ₯
|
||||||
DRV
|
μλμ° μ΄μ체μ μμ νλμ¨μ΄ μ₯νΌλ₯Ό μ°κ²°νκ³ ν΅μ νκΈ° μν΄ μ¬μ©
|
β
PEviewμ notepad.exeλ₯Ό μ μ©μν¨ λͺ¨μ΅μ μ’μΈ‘ λͺ©λ‘ λΆλΆμ΄λ€.
μ¬κΈ°μ IMAGE_DOS_HEADER ~ IMAGE_SECTION_HEADER κΉμ§κ° ν€λ λΆλΆμ΄λ©°,
SECTION.text λΆν° λ°λ λΆλΆμ΄λ€.
β
2. IMAGE_DOS_HEADER
μ’μΈ‘ μ¬μ§μ μμμ μΈκΈνμλ€μνΌ ν€λλ ꡬ쑰체 νμμΌλ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μ΄λ visual studioμμ #include <winnt.h>μ λ¬Έμλ₯Ό 보면 μ°Ύμ μ μλ€.
β
1) e_magic (2byte) : 1) κ°μ₯ λ¨Όμ λ‘λκ° μΈμνλ€.
2) MZ = 4D 5A
3) νμ¬ νμΌμ΄ PEνμΌμΈμ§ 체ν¬νλ€. (MZμΌ κ²½μ°)
β
2) e_lfanew(4byte) : 1) IMAGE_NT_HEADERSμ μμ μ λμ£Όμ(Offset)μ΄λ€.
2) νμΌμ λ°λΌ κ°μ΄ λ€λ₯΄λ€
β
μ€λ₯Έμͺ½ κ·Έλ¦Όμ peviewλ₯Ό ν΅ν΄ μ°Ύμλ³Έ λ κ°μ΄λ€. dataμμμ ν΄λΉνλ κ°μ΄ μ μ₯λμ΄ μλ€.
κ·Έλ¦¬κ³ κΆκΈνλμ λ€ μ€ μ μλμλ κ²μ΄ μ WORD μλ£νμ μ¬μ©ν κ²μΈκ°? μλ€.
μ°μ wordμλ£νμ cpuκ° μ²λ¦¬ ν μ μλ λ°μ΄ν°μ ν¬κΈ°μ λ¨μμ΄λ€ (cpuλ§λ€ λ€λ₯΄λ€)
κ·Έλ¬λ―λ‘ wordκ° μ¬μ©λμκ³ , λ€μμ λμ¬ν μ§λ§ dword : 4byte, word : 2byteμ΄λ€.
λν, pfile = offsetκ³Ό κ°λ€.
β
+) MS-DOS Stub Program
1) κ·Έλ κ² μ€μν λΆλΆμ΄ μλλ€. (νμ ꡬμ±μμX)
2) νλ‘κ·Έλ¨μ DOS λͺ¨λμμ μ€ν μμΌ°μ λ “This program cannot be run in DOS mode” λΌλ λ¬Έμμ΄μ μ€ννλ€.
β
3. IMAGE_NT_HEADERS
1) e_lfanewμ μ μ₯λ μ£Όμ κ°μ΄ μ΄λΆλΆμ κ°λ¦¬ν¨λ€.
2) νμΌ μ€νμ νμν μ λ³΄κ° μ μ₯λμ΄ μλ€.
β
3-1. Signature
1) PE ꡬ쑰μ νμΌμ΄λΌλ κ²μ μλ¦°λ€.
2) PEμ κ°(0x50450000)μ κ°μ§λ©°, μ΄ κ°μ λ³κ²½μ΄ λΆκ°λ₯νλ€.
3) κ°μ λ³κ²½ μ PEνμΌλ‘ μΈμνμ§ λͺ»νμ¬ μ€νμ΄ λΆκ°λ₯νλ€.
β
pFileμ μμ κ°μ΄ 000000F0μ΄λ€. μ΄ κ°μ μμ λμλ e_lfanewμμ λ΄€λ κ°μ΄κ³ , μ¦ e_lfanewμ μν΄ offsetμ΄ μ§μ λ¨μ νμΈν μ μλ€.
β
3-2. IMAGE_FILE_HEADER
: λμνλ CPU, μΉμ μ μ, μμ± μκ° λ± νμΌμ λλ΅μ μΈ μ 보λ₯Ό μ μ₯νλ€.
winnt.hμ peviewμμλ κ°μ΄ κ°μ ꡬμ±μμλ₯Ό κ°μ§λ€.
β
1. machine : 1) PEνμΌμ΄ λμν μ μλ CPU μ’ λ₯μ΄λ€.
λ©λͺ¨μ₯μμλ 4C 01μ΄λΌλ κ°μ΄ λμ¨λ€.
μ²μμ 곡λΆλ₯Ό ν λλ λ΄κ° μ¬μ©νλ μ»΄ν¨ν°μ cpuμ λ°λΌμ κ°μ΄ λ¬λΌμ§λ€κ³ μκ°νμλ€. κ·Έλμ μμ¬νμ§ μκ³ 4C 01λ‘ νκΈ°λμλ€κ³ μκ°νλλ°, μ΄λ₯Ό μμΈν μμ보λ κ·Έκ² μλλΌ νμΌμ΄ μ»΄νμΌμ λͺλΉνΈλ‘ νλμ λ°λΌ λ€λ₯΄κ² νκΈ°λμλ€.
32λΉνΈλ‘ μ»΄νμΌλ exeνμΌκ³Ό 64λΉνΈλ‘ μ»΄νμΌλ exeνμΌμ κ°κ° peviewμ λ£μ΄ κ°μ λΉκ΅ν΄ 보μλ€.
κ·Έλ¬λλ κ°μ μ»΄ν¨ν°λ‘ νμΈνμμλ 32λΉνΈμμλ 4C 01, 64λΉνΈμμλ 64 86μ΄λΌλ κ°μ΄ λμλ€.
μ¦, μ»΄ν¨ν°μ cpuκ° κΈ°μ€μ΄ μλλΌ νμΌμ΄ λͺλΉνΈλ‘ μ»΄νμΌ λμλκ° ν΅μ¬μ΄λ€.
λν λ©λͺ¨μ₯μ 32λΉνΈλ‘ μ»΄νμΌ λμμμ μ μ μλ€.
β
2. Number of Sections
1) PEνμΌμ ꡬμ±νλ μΉμ μ μλ₯Ό λνλΈλ€.
2) μΉμ μ΄ μλ νμΌμ μ‘΄μ¬νμ§ μλλ€. (κ°μ΄ 0λ³΄λ€ μ»€μΌ νλ€.)
ν΄λΉ κ°μ΄ 6μ΄λ―λ‘ μΉμ μ κ°μλ 6κ°μ΄λ€. μΉμ μ ν€λμ μλ μΉμ μ μλ―Ένλ€.
β
3. TimeDateStamp
1) νμΌμ΄ λ§λ€μ΄μ§ μκ°μ΄ κΈ°λ‘λλ€. (1970λ 1μ 1μΌ~/ μ λμ€μ μμμ )
2) μ΄λ¨μλ‘ νκΈ°λλ€.
0x93B4E8FA = 156633163892μ΄ μ΄λ―λ‘, μ΄λ₯Ό νμ°νμ¬ 1970λ 1μ 1μΌμ λνλ€.
β
4. PointerSymbolTable
1) COFF(Common Object File Format)
μ¬λ³Ό ν μ΄λΈμ νμΌ μ€νμ μ κ°λ¦¬ν¨λ€.
2) μλ κ²½μ°κ° λλΆλΆμ΄λ€.
β
β
5. NumberOfSymbols
1) PointerToSymbolTableνλκ° κ°λ¦¬ν€λ COFFμ¬λ³Ό ν μ΄λΈμ μ¬λ³Ό μλ₯Ό λνλΈλ€.
β
*COFF : μ λμ€ μμ€ν μ μν΄ μ¬μ©λλ μ€ννμΌ, λͺ©μ νμΌ, 곡μ λΌμ΄λΈλ¬λ¦¬ μ»΄ν¨ν° νμΌμ μν ν¬λ§·μΌλ‘ μ΄μ λΈλ¬λ₯Ό κ±°μ³μ λ§λ€μ΄μ§ μ€λΈμ νΈ νμΌμμ 곡ν΅λκ²λ§ λ°λ‘ λͺ¨μ κ΄λ¦¬νλ ν¬λ§·μ΄λ€.
β
ν΄λΉ κ°μ λλΆλΆ 0μ΄λ€. PointerSymbolTable, NumberOfSymbolsλ νμ¬λ μ μ°μ΄μ§ μλλ€.
β
6. SizeOfOptionalHeader
1) Optional Headerμ ν¬κΈ°λ₯Ό μ μ₯νλ€.
2) Optional Headerμ ν¬κΈ°λ μ΄μ체μ μ λ°λΌ μ°¨μ΄κ° μλ€.
β
7. Characteristics
1) νμ¬ νμΌμ νμμ μλ €μ€λ€.
2) μ΄ κ°μ μ΄μ©νμ¬ νμΌμ μ’ λ₯(EXE, DLL, SYSλ±)λ₯Ό μ μ μλ€.
3) ORμ°μ°μ μ΄μ©νλ€.
β
3-3. IMAGE_OPTIONAL_HEADER
: νμΌμ€νμ κ΄ν μ€μν μ 보λ€μ μ μ₯νλ€.
β
1.Magic
1)μ€ννλ PEνμΌμ κ΅¬μ‘°μ²΄κ° 32bit(0x10B)μΈμ§, 64bit(0x20B)μΈμ§ μλ €μ£Όλ λΆλΆ
β
2. Size Of Code
1) μ½λ μμμ ν¬κΈ°λ₯Ό λνλΈλ€.
μ¦, section.text(λ°λ)μ ν¬κΈ°λ₯Ό λνλΈλ€.
β
3. Address Of Entry Point
1) νλ‘κ·Έλ¨μ΄ μμλλ μ½λμ μ£Όμκ° RVAκ°μΌλ‘ μ μ₯λμ΄ μλ€.
2) μ€μ λ‘λκ° μ μΌ λ¨Όμ μ€νν μ½λμ μμμ
β
** RVA (Relative Virtual Address) : μ€ννμΌμ΄ λ©λͺ¨λ¦¬μ λ‘λ λμμ λμ μλμ£Όμ.
ex) RVAμ κ°μ΄ 0x3000μ΄κ³ , μ€ννμΌμ΄ λ‘λλμμ λ Image Baseκ° 0x40000μ΄λ©΄
RVA 0x3000 μμμ΄ λ©λͺ¨λ¦¬μ λ‘λ λμμ λ μμΉλ 0x43000μ΄ λλ€.
β
4. Base Of Code
1) μ½λ μμμ΄ μμλλ μλ μ£Όμ(RVA)μ΄λ€.
** μ½λμμ -> λ©λͺ¨λ¦¬μ μλ μ½λ
β
5. Image Base
1) PEνμΌμ΄ λ©λͺ¨λ¦¬μ λ‘λλλ μμ μ£Όμ
2) λ³΄ν΅ exe(0x400000), DDL(0x10000000)λ²μ§λ‘ μ€μ
Image Base + Base of code(RVA) = section.text(μ½λ μμμ μμ μ£Όμ)
β
6. Section Alignment
1) λ©λͺ¨λ¦¬μμ μΉμ μ μ΅μ λ¨μ, μμμ£Όμλ μ΄ κ°μ λ°°μμ΄λ€.
β
7. File Alignment
1) νμΌμμ μΉμ μ μ΅μ λ¨μμ΄λ€.
2) μμμ£Όμλ μ΄ κ°μ λ°°μμ΄λ€.
β
β
** PE ꡬ쑰
μ¬μ§ μΆμ² : https://jmoon.co.kr/130
μμ Section Alignmentμ File Alignmentμ λ΄μ©μμ λ©λͺ¨λ¦¬μμ μΉμ μ λ¨μλ 1000μ΄κ³ , νμΌμμ μΉμ μ λ¨μλ 200μ΄λ€.
λ°λΌμ Disk λΆλΆμμλ μΉμ μ 200μ© λλκ³ , Memeory λΆλΆμμλ 1000μ© λλμ΄μ μΉμ μ λλλ λ¨μκ° μ»€μ‘κΈ° λλ¬Έμ λκ°μ΄ μ¦κ°νκ³ , μ£Όμ λν λ°λλ€.
β
8. Size of Image
1) PEνμΌμ΄ λ©λͺ¨λ¦¬μ λ‘λ©λ λ μ 체 ν¬κΈ°μ΄λ€.
β
9. Size of hedaer
1) λͺ¨λ ν€λμ ν¬κΈ°μ΄λ€.
2) Dos Header + Dos Stub + PE Header + Section Header
400 λ°μ΄νΈμμ νμΈ κ°λ₯νλ€.
β
10. Sub System
1) μ€ν νμΌμ μ μ μΈν°νμ΄μ€ λΆλΆμ λν΄ νμν μλΈ μμ€ν κ°μ΄λ€.
κ°μ΄ 2μ΄λ―λ‘ λ©λͺ¨μ₯μ GUI μ΄λ€.
β
11. Number of RvaAndSizes
- Data Directory ꡬ쑰체 λ©€λ² κ°μ
10κ°μμ μ μ μλ€.
β
4. IMAGE_SECTION_HEADER : κ° Sectionμ λν μ΄λ¦μ λΉλ‘―ν΄ μμ μ£Όμμ μ¬μ΄μ¦ λ±μ μ 보λ₯Ό κ΄λ¦¬νλ ꡬ쑰체μ΄λ€.
1.Name
1) μΉμ μ μ΄λ¦μ λνλ΄λ λ©€λ²μ΄λ€.
2) μΉμ μ μ΄λ¦μ΄ κ°λ€κ³ ν΄μ κ°μ μμ±μ μ§λμ§ μμΌλ―λ‘ Characteristics λ©€λ²λ₯Ό μ°Έμ‘°ν΄μΌ νλ€.
β
**
1).text : νμΌμ μ΄μμ λ μ€νλ μ½λκ° μ μ₯λλ€.
2).data : μ΄κΈ°νλ μ μλ³μ, staticλ³μλ₯Ό μ μ₯νλ€.
3).rdata : Constλ³μ, λ¬Έμμ΄ μμλ₯Ό μ μ₯νλ€.
4).bss : μ΄κΈ°νλμ§ μμ μ μλ³μ, staticλ³μ, λ¬Έμμ΄, κΈ°ν μμλ₯Ό μ μ₯νλ€. μ΄κΈ°νκ° μ§νλ κ²½μ° dataμμμΌλ‘ μ΄λνλ€.
5).edata : EATμ κ΄λ ¨λ μ λ³΄κ° μ μ₯λλ€.
6).idata : IATμ κ΄λ ¨λ μ λ³΄κ° μ μ₯λλ€.
7).rsrc : 리μμ€ μ λ³΄κ° μ μ₯λλ€.
β
** EAT(Export Address Table) : λΌμ΄λΈλ¬λ¦¬ νμΌμμ μ 곡νλ ν¨μλ₯Ό λ€λ₯Έ νλ‘κ·Έλ¨μμ κ°μ Έλ€ μΈμμκ² μ¬μ©ν΄μ€λ€.
IAT(Import Address Table) : νλ‘κ·Έλ¨μμ μ΄λ€ DLLμ μ¬μ©νλμ§ μλ €μ£Όλ ν μ΄λΈμ΄λ€.
2. VirtualAddress
1) λ©λͺ¨λ¦¬μμ ν΄λΉ μΉμ μ μμΉ (RVA)
3. SizeOfRawData
1) νμΌμμ μΉμ μ΄ μ°¨μ§νλ ν¬κΈ°
4. PointerToRawData
1) νμΌμμ μΉμ μ μμ μμΉ
5. Characteristics
1) μΉμ μ νΉμ§
***+) μ λ΄μ©μ λ°νμΌλ‘ notepadμ ν€λλ₯Ό λ³΄κ³ μ μ μλ κ²
β
IMAGE_DOS_HEADER
1) 4D 5A (MZ) = peꡬ쑰λ₯Ό μ¬μ©νκ³ μλ€.
β
MS-DOS Stub Program
2) Dos modeμμ μ€νλμ§ μλλ€.
β
IMAGE_NT_HEADERS
-IMAGE_FILE_HEADER
3) νμΌμ΄ λμνλ CPU : x86 (Machine)
4) μΉμ μ μ : 6 (Number of Sections)
5) 32bit , exeνμμ΄λ€. (Characteristics)
β
-IMAGE_OPTIONAL_HEADER
6) PEνμΌμ ꡬ쑰체 : 32bit (Magic)
7) μ²μ μ€νλλ μ½λμ μ£Όμ : 400000(Image Base) + 001F8D0(Address of EntryPoint) = 41F8D0
8) μ½λ μμμ μ£Όμ : 400000(Image Base) + 1000(Base of Code) = 401000
9) λ©λͺ¨λ¦¬μ λ‘λ© λμμ λμ ν¬κΈ° : 02B000(Size of Image)
10) ν€λμ ν¬κΈ° : 400byte (Size of Header)
11) νμΌμ μ’ λ₯ : GUI(2) (Sub System)
β