PE File Format ? : Portable Executable File Format
PE ํ์ผ์ Windows ์ด์์ฒด์ ์์ ์ฌ์ฉ ๋๋ ์คํ ํ์ผ ํ์์ด๋ค.
Unix ๋ COFF ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง
Portable ์ด๋ผ๋ ๋จ์ด๋ ์ด์์ฑ์ ์ข๊ฒ ํ๊ธฐ ์ํด์ ๋ง๋ค์ด ์ง ๊ฒ์ธ๋ฐ, ํ์ค์ Windows ์์๋ง ์ฐ์ด๊ณ ์๋ค.
32๋นํธ ํํ์ ์คํํ์ผ์ ์๋ฏธํ๋ฉฐ , PE32 ๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ ํ๋ค.
64๋นํธ๋ PE+,PE32+ ๋ผ๊ณ ๋ถ๋ฆฐ๋ค (PE64 ๊ฐ ์๋๋ค)
1. PE File Format
์ข ๋ฅ | ์ฃผ์ ํ์ฅ์ | ์ข ๋ฅ | ์ฃผ์ ํ์ฅ์ |
์คํ๊ณ์ด | EXE, SCR | ๋๋ผ์ด๋ฒ ๊ณ์ด | SYS, VXD |
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณ์ด | DLL,OCX,CPL,DRV | ์ค๋ธ์ ํธ ํ์ผ ๊ณ์ด | OBJ |
PE ํค๋ ๋ถ๋ถ์ ํ์ผ์ด ์คํ๋๊ธฐ ์ํ ๋ชจ๋ ์ ๋ณด๋ค์ด ์ ํ์๋ค
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๊ณ , ์ด๋์๋ถํฐ ์คํ๋์ด์ผํ๋์ง, ์คํ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ด๋ค๊ฒ๋ค์ด ์๊ณ , ํ์ํ stack or heap ์ ํฌ๊ธฐ๋ ์ผ๋ง์ธ์ง ๋ฑ๋ฑ
2.๊ธฐ๋ณธ ๊ตฌ์กฐ
notepad.exe ๋ฅผ ์คํํ๋ ๊ฐ์ ์ ํด, ํ์ผ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๋ ๋ชจ์ต์ ์ดํด๋ณธ๋ค.
NULL padding ์ด ์กด์ฌํ๋ ์ด์ ๋ ๋ญ๊น ?
์ฒ๋ฆฌ ํจ์จ์ ๋์ด๊ธฐ ์ํด์ ์ต์ ๊ธฐ๋ณธ ๋จ์์ ๋ฐฐ์์ ํด๋นํ๋ ์์น์ฌ์ผ ํ๋ค.
(์๋ก์ ์์์ ๊ฐ์ญํ๋ ๊ฒ์ ์ต์ํ ํ๊ธฐ ์ํด์ ๋ผ๋ ๋ง์ ๋ค์ ์ ์ด ์๋ค.)
2.1 VA & RVA
VA (Virtual Address) ๋ ํ๋ก์ธ์ค ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ ์ฃผ์๋ฅผ ๋งํ๋ฉฐ , RVA(Relative Vertual Address) ์์ ๊ด๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค.
VA=RVA+ ImageBase
PE ํค๋ ๋ด์ ์ ๋ณด๋ RVA ๋ก ๋์ด ์๋ ๊ฒ์ด ๋ง์๋ฐ ๊ทธ ์ด์ ๋ , PE ํ์ผ (์ฃผ๋ก DLL )์ด ํ๋ก์ธ์ค ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํน์ ์์น์ ๋ก๋ฉ ๋๋ ์๊ฐ ์ด๋ฏธ ๊ทธ ์์น์ ๋ค๋ฅธ PE ํ์ผ์ด ๋ก๋ฉ ๋์ด ์์ ์ ์๋ค. ๊ทธ๋ด ๋ ์ฌ ๋ฐฐ์น ๊ณผ์ ์ ํตํด์ ๋น์ด์๋ ๋ค๋ฅธ ์์น์ ๋ก๋ฉ ๋์ด์ผ ํ๋๋ฐ , ๋ง์ฝ PE ํค๋๋ค์ด VA(Virtual Address , ์ ๋์ฃผ์)๋ก ๋์ด ์๋ค๋ฉด ์ ์์ ์ธ ์ก์ธ์ค๊ฐ ์ด๋ฃจ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ ๋ณด๋ฅผ RVA ๋ก ํด๋๋ฉด ์ฌ๋ฐฐ์น๊ฐ ๋ฐ์ํ์ฌ๋ ๊ธฐ์ค์์น์๋ํ ์๋์ฃผ์๊ฐ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์ด ์ ๋ณด์ ์์ธ์ค ํ ์ ์๋ค.
๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ๋ ํฌ์คํธ๋ฅผ ํผ์๋ค.
[ ์ฌ๋ฐฐ์น(Relocation) ์ํฉ ]
์๋ฅผ ๋ค๊ธฐ์ํด ์ต๋ํ ์ฝ๊ฒ ๋ค์ด๋ฐ์ ํ์ผ๋ฉฐ ๋ค์ด๋ฐ๊ณผ ์ฃผ์๋ ์ค์ ์ ์ ํ ์๊ด์์ต๋๋ค ๊ฐ๋ ๋ง ์ง๊ณ ๊ฐ์ธ์
game.dll๊ฐ 00000000์ด๋ผ๋ ์์น์ ๋ก๋ฉ๋๋์๊ฐ notepad.dll์ด ๋จผ์ ๋ก๋ฉ์ด ๋์ด๋ฒ๋ ธ์ต๋๋ค
ํ๋์ ์์น์ 2๊ฐ์ dllํ์ผ์ด ์ฌ๋ผ๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ์ฌ๋ฐฐ์น(Relocation)์ ํด์ค์ผ ํ๋ ์ํฉ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค
์ด๋ PEํค๋ ์ ๋ณด๋ค์ด VA(์ ๋์ฃผ์)๋ก ๋์ด์๋ค๋ฉด ์ ์์ ์ธ ์์ธ์ค๊ฐ ์ด๋ฃจ์ด ์ง์ง ์๊ธฐ ๋๋ฌธ์
RVA(์๋์ฃผ์)๋ก ํด์ ์ฌ๋ฐฐ์น๊ฐ ๋ฐ์ํด๋ ๊ธฐ์ค์ ๋ํ ์๋์ฃผ์๋ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์ด ์ํ๋ ์ ๋ณด์ ์์ธ์ค ํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ ๋์ฃผ์? ์๋์ฃผ์?
๋ง์๋ถ๋ค์ด ํท๊ฐ๋ ค ํ์๋ ์ ๋์ฃผ์์ ์๋์ฃผ์๋ฅผ ๊ฐ๋ ์ก๊ณ ๊ฐ๊ฒ ์ต๋๋ค
์ ๋์ฃผ์: ๋ฉ๋ชจ๋ฆฌ์ ์์น๋ฅผ ์๋ณํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ ์ฃผ์
์ฆ. ๊ธฐ์ต์ฅ์น๊ต์ ์ ์ฃผ์๋ก์ ๊ธฐ์ต์ฅ์๋ฅผ ์ง์ ์ซ์๋ก ์ง์ ํฉ๋๋ค
์๋์ฃผ์: ๊ณ ์ ์ฃผ์๊ฐ ์๋๋ฉฐ ํน์ ์์ญ์ ์๋์ ์ธ ์ฃผ์๋ฅผ ์ง์ ํฉ๋๋ค
[ ๋ฌผ๋ฆฌ์ฃผ์์ ๊ฐ์์ฃผ์ ]
๋นจ๊ฐ์: ์ฌ์ฉ์ค
ํ๋,์ด๋ก: ์ฌ์ฉ์ํจ
ํ์ฌ 0x1~0x3, 0x7์ด ์ฌ์ฉ์ค์ ๋๋ค ์ค๊ฐ์ค๊ฐ ๋น์ด์๋ ๊ณต๊ฐ์ด ์์ฃ .
ํ์ง๋ง ํ๋ก๊ทธ๋จ์ ์ฐ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น๊ณต๊ฐ์ธ 0x4~0x6, 0x8~0x9(๋ฌผ๋ฆฌ)๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฉ๋๋ค
๊ทธ๋์ ๋์จ ๊ฐ๋ ์ด ๊ฐ์์ฃผ์์ ๋๋ค ์ด๋ ๊ฒ ์ฌ์ฉํ๊ฒ ๋๋ฉด
โ ํ๋ก๊ทธ๋จ์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ธ 0x1~0x3, 0x4~0x5(๊ฐ์)๊น์ง ์ ๊ทผํ๊ฒ ๋๊ณ ์ด์์ฒด์ ๋ ์์์ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ์ธ 0x4~0x6, 0x8~0x9(๋ฌผ๋ฆฌ)๋ฅผ ์ฐพ์๊ฐ์ ๊ฐ์ ์ฝ์ด์ค๊ฒ ๋ฉ๋๋ค
ํ์ค์์ฝํ์๋ฉด.. ๋ฌผ๋ฆฌ์ ์ธ ๋น๊ณต๊ฐ์ ๊ฐ์์ฃผ์์ ์ฐ๊ฒฐํด์ ๊ฐ์์ฃผ์์ ์ ๊ทผํ๋ฉด ์ด์์ฒด์ ๊ฐ ์์์ ๊ฐ์์ฃผ์์ ์ฐ๊ฒฐ๋ ๋ฌผ๋ฆฌ์ฃผ์๋ฅผ ์ฐพ์๊ฐ์ ๊ฐ์ ์ฝ์ด์ด
์ถ๊ฐ๋ก
๊ฐ์์ฃผ์๋ 0x0 ~ 0xFFFFFFFF ๊น์ง์ด๋ฉฐ ํ๋ก๊ทธ๋จ์ 4byte ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค
์ ๊ทธ๋ฆผ์ ์ดํด๋ฅผ ๋๊ธฐ์ํด ์ฝ๊ฒ ํ์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฉ๋๊ณผ ์ฃผ์๋ ์ ์์๋๋ก ํ๊ฒ์ ๋๋ค
3. PE ํค๋
PE ํค๋๋ ๋ง์ ๊ตฌ์กฐ์ฒด๋ค์ ์งํฉ์ด๋ค.
์์์ ๋ณธ ๊ฒ์ฒ๋ผ DOS header ๋ถํฐ Section header ๊น์ง PE ํค๋์ ๊ตฌ์กฐ์ฒด๋ค์ด๋ค.
1) DOS Header
PE File Format ์ ์ด๋ฆ์ด ์๋ ค์ฃผ๋ฏ์ด ์ฒ์ ๊ฐ๋ฐ ๋ ๋๋ ๋น์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ DOS ํ์ผ์ ๋ํ ํธํ์ฑ์ ๊ณ ๋ คํด ๋ง๋ค์๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ก PE ํค๋์ ์ ์ผ ์๋ถ๋ถ์๋ ๊ธฐ์กด์ DOS EXE Header ๋ฅผ ํ์ฅ์ํจ IMAGE_DOS_HEADER ๊ตฌ์กฐ์ฒด๊ฐ ์กด์ฌํ๋ค.
IMAGE_DOS_HEADER ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ๋ 40์ด๋ค. ์ด ๊ตฌ์กฐ์ฒด์์ ๊ผญ ์์์ผ ํ ๋ฉค๋ฒ๋ e_magic ๊ณผ e_lfanew ์ด๋ค.
e_magic : DOS signature (4D5A => ASCII ๊ฐ "MZ") --- ์ด๊ฒ์ ๋ณด๊ณ IMAGE_DOS_HEADER ์์ ์ ์ ์๋ค.
e_lfanew : NT header ์ ์คํ์ ์ ํ์
Intel ๊ณ์ด CPU ๋ ์๋ฃ๋ฅผ ์ญ์์ผ๋ก ์ ์ฅํ๋ค. ์ด๋ฅผ ๋ฆฌํ ์๋์ธ ํ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ค.
2)DOS Stub
DOS Stub ์ ์กด์ฌ์ฌ๋ถ๋ ์ต์ (์์ด๋ ํ์ผ ์คํ ๊ฐ๋ฅ) ์ด๋ฉฐ ํฌ๊ธฐ๋ ์ผ์ ํ์ง ์๋ค.
์ฝ๋์ ๋ฐ์ดํฐ์ ํผํฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
MS-DOS ํธํ ๋ชจ๋๋ฅผ ๊ฐ์ง๊ณ ์์ด์ DOS ํ๊ฒฝ์์ ์คํํ๋ฉด , DOS EXE ์คํ์ฝ๋๊ฐ ๋์ํ๋ฉด์ " This program cannot be run in DOS mode" ๋ฌธ์์ด์ ์ถ๋ ฅํ๊ณ ์ข ๋ฃ๋๋ค. ์ด ํน์ฑ์ ์ ์ด์ฉํ๋ฉด DOS ์ Windows ์์ ๋ชจ๋ ์คํ๊ฐ๋ฅํ ํ์ผ์ ๋ง๋ค ์ ์๋ค.
3)NT Header
NT header ๊ตฌ์กฐ์ฒด IMAGE_NT_HEADERS ์ด๋ค.
IMAGE_NT_HEADERS ๊ตฌ์กฐ์ฒด๋ 3๊ฐ์ ๋ฉค๋ฒ๋ก ๊ตฌ์ฑ๋์ด์๋๋ฐ, ์ ์ผ ์ฒซ ๋ฉค๋ฒ๋ Signature ๋ก 50450000h ( "PE" 00) ๊ฐ์ ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ FileHeader ์ OptionalHeader ๊ตฌ์กฐ์ฒด ๋ฉค๋ฒ๊ฐ ์๋ค.
IMAGE_NT_HEADERS ๊ตฌ์กฐ์ฒด์ ํฌ๊ธฐ๋ F8 (158) ์ด๋ค. ์๋นํ ํฐ ๊ตฌ์กฐ์ฒด์ธ๋ฐ.
์ฌ๊ธฐ์๋ถํฐ NT header๊ตฌ์กฐ์ฒด์ ์์์ ํ๋ณํ์ค ์ ์์ต๋๋ค
3-1) Signature
NT header ๊ตฌ์กฐ์ฒด์ ์์์ ์๋ฆฌ๋ฉฐ ASCII๊ฐ์ด PE ( 50450000)๋ก ์์ํฉ๋๋ค
3-2) IMAGE_FILE_HEADER
[ IMAGE_FILE_HEADER ]
๊ฐ์ฅ ์ค์ํ ๋นจ๊ฐ์ 4๊ฐ์ ๊ฐ๋ง ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค
1. Machine
CPU๋ณ๋ก ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๋ฉด์ IA-32 ํธํ CPU 14Ch์ ๊ฐ์ IA-64ํธํ CPU๋ 200h์ ๊ฐ์ ๊ฐ์ง๋๋ค
- CPU๋ณ๋ก ๊ณ ์ ํ๊ฐ์ ๊ฐ์ง๋๋ค
- IA-32ํธํCPU = 14Ch
- IA-64ํธํCPU = 200h
2. NumberOfSections
์ด ๊ฐ์ ๋ค์์ ๋์ค๋ Section๋ค์ ๊ฐฏ์์ด๋ฉฐ ์ต์ 1๊ฐ ์ด์์ด์ฌ์ผ ํฉ๋๋ค
3. SizeOfOptionalHeader
์ด ๊ฐ์ IMAGE_NT_HEADERS๊ตฌ์กฐ์ฒด์ ๋ง์ง๋ง ๊ตฌ์กฐ์ฒด IMAGE_OPTIONAL_HEADER 32์ ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค
- IMAGE_NT_HEADERS์์ IMAGE_OPTIONAL_HEADER 32ํฌ๊ธฐ๋ฅผ ๋ํ๋
4. Characteristics
์ด ๊ฐ์ ํ์ผ์์ฑ์ ๋ํ ๋ถ๋ถ
ํฅ์ฌ ์๋ํฐ๋ก ๋ฐ์ง๋ฉด ์ด๋ถ๋ถ์ด ๋๊ฒ ์ผ๋ฉฐ ๋ง ๊ทธ๋๋ก ํ์ผ์ ์์ฑ์ ๋ํ ๋ถ๋ถ์ ๋๋ค
์ฌ๊ธฐ์ SizeOfOptionalHeader์ ๊ฐ์ด E0์ ๋๋ค 10์ง์๋ก ๋ฐ๊พธ๋ฉด 224๊ฐ ๋๋๋ฐ ์ด๊ฒ์ด ํค๋์ ์ด ๊ธธ์ด๊ฐ ๋๊ฒ ์ต๋๋ค
3-3)IMAGE_OPTIONAL_HEADER 32
์ญ์ ์ค์ํ ๋ถ๋ถ๋ง ๋นจ๊ฐ์์ผ๋ก ์น ํ์ผ๋ฉฐ ํด๋น ๋ถ๋ถ๋ง ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค
1. Magic
์ด ๊ตฌ์กฐ์ฒด๊ฐ 32bit์ฉ์ด๋ฉด 10Bh
64bit ์ฉ์ด๋ฉด 20Bh ์ ๊ฐ์ ๊ฐ์ง๋๋ค
2. AddressOfEntryPoint
EP(Entry Point)์ RVA ์ฃผ์๊ฐ์ด ๋ค์ด์์ต๋๋ค
์ฝ๊ฒ๋งํด ํ๋ก๊ทธ๋จ์์ ์ต์ด๋ก ์คํ๋๋ ์ฝ๋์ ์์์ฃผ์. ๋งค์ฐ์ค์ํ ๊ฐ์ ๋๋ค
3. Image Base
PEํ์ผ์ด ๋งตํ๋๋ ์์์ฃผ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค
4. SectionAlignment
๋ฉ๋ชจ๋ฆฌ์์์ ์น์ ์ ์ต์๋จ์๋ฅผ ๋ํ๋ ๋๋ค
5. FileAlignment
ํ์ผ์์์ ์น์ ์ ์ต์๋จ์๋ฅผ ๋ํ๋ ๋๋ค
6. SizeOfImage
๋ฉ๋ชจ๋ฆฌ์์์ PE๊ตฌ์กฐ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค
7. SizeOfHeader
PE header์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค
8. Sybsystem
-1: ๋๋ผ์ด๋ฒํ์ผ(SYS,VXD)์ด๋ผ๋ ๋ป์ ๋๋ค
-2: GUIํ์ผ์ด๋ผ๋ ๋ป์ ๋๋ค
-3: CUIํ์ผ์ด๋ผ๋ ๋ป์ ๋๋ค
9. NumberOfRvAndSizes
๋ฐ๋ก ๋ฐ์ ์๋ IMAGE_DATA_DIRECTORY ๊ตฌ์กฐ์ฒด์ ๋ฐฐ์ดํฌ๊ธฐ๋ฅผ ์ ํฉ๋๋ค
---- Section Header ๋ถํฐ ๋ค์ ์์ -----
-๋ฆฌ๋ฒ์ฑ ํต์ฌ์๋ฆฌ์ https://rednooby.tistory.com/33 [๊ฐ๋ฐ์์ ์ทจ๋ฏธ์ํ] ๋ธ๋ก๊ทธ์์ ์๋ฃ๋ฅผ ์ป์์ต๋๋ค.-
'Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์นผ๋ฆฌ ๋ฆฌ๋ ์ค ํ๊ธ ๊นจ์ง ํด๊ฒฐ (0) | 2020.09.13 |
---|