ํ์ผ์ ๊ตฌ์กฐ์ ๋ถ์
ํ์ผ์ ๊ตฌ์กฐ์ ๋ถ์
ํ์ผ์ ๊ตฌ์กฐ์ ๋ถ์
ํ์ผ์ ๊ตฌ์กฐ์ ๋ถ์
- PE
-- PE
-- PE
-- PE
-๋ฏธ ์ ์ฑ
( )
07. 01. 25 ์์๋ํ๊ต ๋ณด์๋์๋ฆฌ FLAG 26ํ ์ธ๋ฏธ๋ ์ค ์ ์ธ([email protected])
---์ ์ฑ์ฝ๋๋ถ์, ํจํน ์ธํจํน/ , DLL Injection, ๋ฐ์ด๋๋ฆฌ์กฐ์, ๊ธฐํ๋ฑ๋ฑ ์๋์ฐ์ฆ ๋ฐ์ด๋๋ฆฌ๋ถ์์ ์์ด์ ํ์๊ธฐ๋ณธ์ง์์ธ PEํ์ผ์ ๋ํ์ฌ ํํ์ด ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ์ ๋ฆฌํ๊ฒ์ ๋๋ค.
์์คํ ์คํํ์ผ์ ๊ตฌ์กฐ์ ์๋ฆฌ ๋ผ๋ ์ฑ ์ ๊ธฐ๋ณธ์ผ๋ก ์ธํฐ๋ท์์ ์
Windows PE File Format
โ โ
๋ํ ์๋ฃ๋ค์ ์ฐธ๊ณ ํด๊ฐ๋ฉฐ ํํ์ด ๊ณต๋ถ๋ฅผ ํ๊ณ ์์ง๋ง ์ฐธ๊ณ ์๋ฃ๋ค๋ง๋ค ํํ๋ค์ ์ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ํด๋์๊ฒ ํด๊น๋ฆฌ๋ ๋ถ๋ถ๋ค์ด ์ข ์์ด์ ์ ๋๋ฆ๋๋ก ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌ๋ฅผ ํ ๊ฒ์ด๋ผ๋๊ฒ์ ๋ง์ ๋๋ฆฝ๋๋ค ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ฐ๊ตฌ๋ณด๊ณ ์๊ฐ ์๋ ๊ณต๋ถํ๊ฒ์ ๋ํ ๋ ธํธํ๊ธฐ์ ๊ฐ์๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ. ๋ฅ ์ฐธ๊ณ ๋ง ํด์ฃผ์ธ์ฉ~!! ๋ด์ฉ๋ค์ ๊ณต๋ถํ๋ฉด์ ๋ณด์ถฉ์ด ๋ ๋๋ง๋ค ์ ๋ฐ์ดํธ ํ ์์ ์ ๋๋ค ํํ. ~ ---์ฐจ ๋ก # # ํ์ผ์ ๊ตฌ์กฐ 0. PE ๊ตฌ์กฐ์
1. IMAGE_DOS_HEADER DOS STUB ๊ตฌ์กฐ
2. IMAGE_NT_HEADER 2.1 DWORD Signature
๊ตฌ์กฐ 2.2 IMAGE_FILE_HEADER ๊ตฌ์กฐ 2.3 IMAGE_OPTIONAL_HEADER ๊ธฐ๋ณธํ๋ 2.3.1 ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด 2.3.2 IMAGE_DATA_DIRECTORY 3. IMAGE_SECTION_HEADER ์ฝ๋์น์ 4.
ํ์ผ์ ๊ตฌ์กฐ
ํ์ผ์ ๊ตฌ์กฐ
ํ์ผ์ ๊ตฌ์กฐ
ํ์ผ์ ๊ตฌ์กฐ
0. PE
0. PE
0. PE
0. PE
ํ์ผ์ด๋ - PE์ ์ฝ์๋ก์ ์ด์ ๊ฐ๋ฅํ ํ์ผ ํ๋ก๊ทธ๋จ
# Portable Excutable ( )
์ฒด์ ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ ๊ธฐ๋ณธ์ ์ธ ํ์ผ ํ์ # Win32
์ ์์ ๊ฐ๋ผ์ ธ ๋์ด
# UNIX COFF(Common Object File Format) .
์๋์ฐ์ฆ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ๊ธฐ์ด์ ์ธ ์ง์ #
๋ก๋๋ - PE
ํ์ผ ํฌ๋งท์ ์ฝ์ด๋ค์ฌ ์คํ์์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ํ๋ ์ญํ ์ ํ๋ค
# PE .
ํ์ผ์ ํ์ - Win32 PE
์์ฉํ๋ก๊ทธ๋จ # EXE, DLL, OCX, CPL, .NET
๊ตฌ์กฐ์
๊ตฌ์กฐ์
๊ตฌ์กฐ์
๊ตฌ์กฐ์
1. IMAGE_DOS_HEADER
DOS STUB
1. IMAGE_DOS_HEADER
DOS STUB
1. IMAGE_DOS_HEADER
DOS STUB
1. IMAGE_DOS_HEADER
DOS STUB
ํ์ผ์ ๋ช ์ญ๋ฐ์ดํธ์ ์คํ ์ผ๋ก ์์ํ๋ค
- PE MS-DOS .
์คํ ์ ์์๋ ํฐ ์๋ฏธ๊ฐ ์๋ค
- MS-DOS PE .
์ ๊ตฌ์กฐ์ฒด
- IMAGE_DOS_HEADER (WinNT.H)
์ IMAGE_DOS_HEADER ๊ตฌ์กฐ์ฒด์ค ์ค์ ๋ก ๋์ฌ๊ฒจ ๋ด์ผ ํ ๊ฒ์ ์ฒซ ๋ฒ์งธ ํ๋์ธ e_magic๊ณผ ๋ง ์ง๋ง ํ๋์ธ e_lfanew์ด๋ค.
๋ชจ๋ ํ์ผ์ ๋ก ์์ํ๋ค
์ ๋ก ๊ณ ์ ๋์ด ์๋ค - e_magic ASCII "MZ" (0x5A4D) .
ํ๋๋ ์ค์ ํ์ผ์ ์์์ด๋ผ๊ณ ํ ์ ์๋ ์ ์คํ์ ๊ฐ์
- e_lfanew PE IMAGE_NT_HEADER
๊ฐ์ง๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๊ฐ ์คํ์ ์์ ์์ํจ์ ํ์ธํ ์ ์๋ค
- \x50\x45(PE) 0x000000e8 .
ํ์ผ์ ์ด๊ณ ์ฒ์ ๋ฅผ ์ฝ์ด ๋ค์ธ ๋ค์ ์ด ์ธ์ง ํ์ธํ
- PE IMAGE_DOS_HEADER e_magic "MZ"
ํ e_lfanewํ๋๊ฐ์ ์ฝ์ด์ ์ด ๊ฐ๋งํฐ ํ์ผ ํฌ์ธํฐ๋ฅผ ์ด๋์ํค๋ฉด์ ๋ณธ๊ฒฉ์ ์ผ๋ก PEํ์ผํฌ๋งท์ ๋ถ์ํ ์ ์๋ค.
- DOS STUB
๊ทธ๋ฌ๋ ์ด ๋ถ๋ถ์ ์์ ์๋ฏธ๊ฐ ์๋ ๋ถ๋ถ์ด๋ค ๊ทธ๋ฅ ์ด๋ฐ๊ฒ ์๋ค ๋ผ๋ ์ ๋๋ง ํ์ธ
- PE .( )
์ ๊ตฌ์กฐ
์ ๊ตฌ์กฐ
์ ๊ตฌ์กฐ
์ ๊ตฌ์กฐ
2. IMAGE_NT_HEADERS
2. IMAGE_NT_HEADERS
2. IMAGE_NT_HEADERS
2. IMAGE_NT_HEADERS
์ค์ ํ์ผ์ ์์์ด๋ค
- PE .(PE Header) ์ ๊ด๊ณ๋ ๋ง์ ๋ถ๋ถ์ ๋ด๊ณ ์๋ค
- PE .
๊ตฌ์กฐ์ฒด์ ๋ชจ์ต
-2.1 DWORD Signature
2.1 DWORD Signature
2.1 DWORD Signature
2.1 DWORD Signature
ํ์ผ์์ ๋ํ๋ด๋ ์๊ทธ๋ค์ณ๋ก์ ํญ์ ์ด๋ค
- PE "PE\x00\x00" .
๊ตฌ์กฐ์ฒด์ ํ๋๊ฐ ๊ฐ๋ฆฌํค๋ ์คํ์ ์ผ๋ก๋ถํฐ ๋ฐ์ดํธ ๊ฐ์ด๋ค
- IMAGE_DOS_HEADER e_lfanew 4 .
๊ตฌ์กฐ
๊ตฌ์กฐ
๊ตฌ์กฐ
๊ตฌ์กฐ
2.2 IMAGE_FILE_HEDER
2.2 IMAGE_FILE_HEDER
2.2 IMAGE_FILE_HEDER
2.2 IMAGE_FILE_HEDER
์๊ทธ๋ค์ณ ๋ค์์ ์ค๋ ๋ฐ์ดํธ๋ก ๊ตฌ์ฑ
- PE 20 .
2.2.1 WORD Machine
ํ์ผ์ด ์คํ๋ ๋ฅผ ๋ํ๋
2.2.2 WORD NumberOfSections ํ์ผ์ ์น์ ์ ์
-๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์์์ ๊ฐ์์ ํด๋น ์น์ ์ ๊ฐ์๋ฅผ ๋ํ๋
- IMAGE_SECTION_HEADER .
์น์ ์ ์ถ๊ฐ ์ญ์ ์ ์ด๊ฐ์ ์กฐ์
- / .
2.2.3 DWORD TimeDateStamp
๋ ์ ์ผ ์ ์๊ฐ ๊ธฐ์ค ์ผ๋ก๋ถํฐ ํด๋น ํ์ผ์ ๋ง๋ค์ด๋ธ ์์ ๊น์ง์ ์๊ฐ์ ์ด๋จ - 1970 1 1 9 (GMT )
์๋ก ํํํจ.
2.2.4 DWORD PointerToSymbolTable, DWORD NumberOfSymbols ๋๋ฒ๊ทธ ์ ๋ณด๋ฅผ ๊ฐ์ง ํ์ผ์์๋ง ์ฌ์ฉ
- PE .
ํ์ผ๋ด์์๋ ๋ณด๊ธฐ ํ๋ค๋ค
- PE .
2.2.5 WORD SizeOfOptionalHeader
๊ตฌ์กฐ์ฒด์ ๋ฐ์ดํธ์ - IMAGE_OPTIONAL_HEADER .
ํ์ผ์ ๊ฒฝ์ฐ๋ ์คํํ์ผ์ ๊ฒฝ์ฐ๋
- obj 0, sizeof(IMAGE_OPTIONAL_HEADER)
2.2.6 WORD Characterstics
ํด๋น ํ์ผ์ ๋ํ ํน์ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ํ๋๊ทธ
- PE
์ ๋ค์ ๋ฐ์ดํธ๋ก ๊ตฌ์ฑ๋จ ๊ฐ์ ๊ธฐ๋ณธ ํ๋ ๋ฐ์ดํธ ๋ฐ์ดํธ
- IMAGE_FILE_HEADER 224 .(36 (96 ), 8
๊ตฌ์กฐ์ฒด์ ๊ฐ ๋ฐฐ์ด ๋ฐ์ดํธ
IMAGE_DATA_DIRECTORY 16 (128 ))
์ค์ํ ์ ๋ณด๋ค์ ๋ง์ด ๋ด๊ณ ์๋ ํค๋
- .
์ ๊ธฐ๋ณธํ๋ ๋ฐ์ดํธ
์ ๊ธฐ๋ณธํ๋์ ๊ธฐ๋ณธํ๋ ๋ฐ์ดํธ๋ฐ์ดํธ
์ ๊ธฐ๋ณธํ๋ ๋ฐ์ดํธ
2.3.1 IMAGE_OPTIONAL_HEADER (96 )
2.3.1 IMAGE_OPTIONAL_HEADER (96 )
2.3.1 IMAGE_OPTIONAL_HEADER (96 )
2.3.1 IMAGE_OPTIONAL_HEADER (96 )
(1) WORD Magic (*)
๋ฅผ ๋ํ๋ด๋ ์๊ทธ๋ค์ณ - IMAGE_OPTIONAL_HEADER
๋นํธ ์ธ ๊ฒฝ์ฐ ๋นํธ ์ธ ๊ฒฝ์ฐ ์ด๋ฏธ์ง ํ์ผ์ธ ๊ฒฝ์ฐ
๋นํธ ์์ ๋ํ๋ < 32 PE > (2) BYTE MajorLinkerVersion, BYTE MinorLinkerVersion
ํ์ผ์ ๋ง๋ค์ด๋ธ ๋ง์ปค์ ๋ฒ์
-๋ง์ปค๋ฒ์
< 7.10 > (3) DWORD SizeOfCode (*)
๋ชจ๋ ์ฝ๋ ์น์ ์ ์ฌ์ด์ฆ๋ฅผ ํฉํ ํฌ๊ธฐ
-์ผ๋ฐ์ ์ผ๋ก ์น์ ์ ๋ฐ์ดํธ ์์ ๊ฐ๋ค
- .text .
์ฝ๋ ์น์ ์ ํฌ๊ธฐ
< : 0x00013000 > (4) DWORD SizeOfInitializedData
์ด๊ธฐํ๋ ๋ฐ์ดํฐ ์น์ ์ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ๋ํ๋ ์ฝ๋์น์ ์ ์ธ
- ( )
์ด๊ธฐํ๋ ๋ฐ์ดํฐ ์น์ ์ ํฌ๊ธฐ
< : 0x00008000 >
(5) DWORD SizeOfUnInitializedData ์ ๋ฐ๋ ๊ฐ๋ - SizeOfInitializedData
์ด๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ ์น์ ์ ๋ฐ์ดํธ ์๋ฅผ ๋ํ๋
-๋ณดํต ์ด ํ๋๋ ์ด๋ค
- 0 .
์ด๊ธฐํ ๋์ง ์์ ๋ฐ์ดํฐ ์น์ ์ ํฌ๊ธฐ
< >
(6) DWORD AddressOfEntryPoint (*)
ํ๋ก๊ทธ๋จ ์ฝ๋์ ์์ ์ฃผ์๋ฅผ ๋ํ๋ธ๋ค ํ๋ก๊ทธ๋จ ์ง์ ์
- .( )
๋ฉ์ธ ์ค๋ ๋๊ฐ ์ต์ด๋ก ์คํ์ํฌ ํ๋ก๊ทธ๋จ ์ฝ๋์ ์์๋ฒ์ง์ ๋ํ
- ์๋ ์ฃผ์(RVA)๊ฐ์ด๋ค.
๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฐ์ ์น์ ์ ํน์ ๋ฒ์ง์ ์์นํ๋ค
- .text .
๊ฐ์ ๋ฐํ์ ์์ ๋ฃจํด์ผ๋ก ์ ํํ๋ ์ฝ๋๊ฐ ๋ด๊ฒจ ์๋ค
- WinMain, DllMain .
์์๋ก ์๋ก์ด ์น์ ์ ๋ง๋ค๊ณ ์ด ํ๋์ ๊ฐ์ ๊ทธ ์์ ๊ฐ์ ๊ฐ๋ฆฌํค๊ฒ ํ ์๋ ์๋ค
๋ฉ๋ชจ๋ฆฌ ์์์๋ ์ ํ๋ ๊ฐ ์ ๋ํ ๊ฐ ๋๋ค < ImageBase (0x00400000) 0x0041142E . > (7) DWORD BaseOfCode
์ฝ๋์น์ ์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ์ ๋ํ ๋ฅผ ์๋ฏธ
- RVA
๋ง์ดํฌ๋ก ์ํํธ ๋ง์ปค๋ก ๋ง๋ ํ์ผ์
- 0x00001000
์ฝ๋์ ์์์ ์ด ๋๋ค
< 0x00401000 . >
(8) DWORD BaseOfData
๋ฐ์ดํฐ ์น์ ์ ์์์ฃผ์์ ๋ํ
- (.data) RVA
๋นํธ ์์๋ ๋ํ๋์ง ์์
- 64 PE .
(9) DWORD ImageBase (*)
ํ์ผ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ์์์ฃผ์
- PE .
๊ธฐ๋ณธ ๊ฐ์
- BaseImage EXE : 0x00400000, DLL : 0x10000000
๋ฉ๋ชจ๋ฆฌ ์์์์ ํ์ผ์ ์์์ฃผ์
< PE : 0x00400000 >
(10) DWORD SectionAlignment
ํ์ผ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ๋ ๋ ๊ฐ ์น์ ์ ๋ฐฐ์น ๊ฐ๊ฒฉ ๊ฐ ์น์ ์ ์์์ฃผ์๋ ์ด ํ๋๊ฐ์ ๋ฐฐ์
- PE ( )
(11) DWORD FileAlignment
ํ์ผ ๋ด์์์ ์น์ ๋ค์ ์ ๋ ฌ ๋จ์
- PE .
ํ์ผ ๋ด ๊ฐ๊ฐ์ ์น์ ์ ๊ตฌ์ฑํ๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ค์ ์์ ์ฃผ์๊ฐ์ ๊ฐ๊ฒฉ์ด๋ผ๊ณ ๋ณด๋ฉด ๋จ
- .
(12) WORD MajorOperationgSystemVersion, WORD MinorOperationgSystemVersion ํด๋น ํ์ผ์ ์คํํ๋ ๋ฐ ํ์ํ ์ด์์ฒด์ ์ ์ต์ ๋ฒ์
- PE .
(13) WORD MajorImageVersion, WORD MinorImageVersion
์ ์ ๊ฐ ์์๋ก ์ ํ๋ ๋ ์ ๋ฒ์
- EXE DLL
(14) WORD MajorSubsystemVersion, WORD MinorSubsystemVersion ํด๋น ๋ฅผ ์คํํ๋๋ฐ ํ์ํ ์๋ธ ์์คํ ์ ์ต์๋ฒ์
- PE
(15) DWORD Win32VersionValue ๋ณดํต ์ผ๋ก ์ค์ ๋๋ค
- 0 .
(16) DWORD SizeOfImage (*)
๋ก๋๊ฐ ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ๋ก๋ํ ๋ ํ๋ณดํด์ผํ ์ถฉ๋ถํ ํฌ๊ธฐ
- PE
๋ณดํต ํ์ผ์ ํฌ๊ธฐ๋ณด๋ค ํฌ๋ค
- PE .
๋ง์ฝ ํ์ผ์ด ํจํน์ด ๋์ด ์๋ค๊ณ ํ๋ค๋ฉด ํจํน๋ฃจํด๋งํผ์ ํ์ผ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐ
( )
๋ฐ๋์ ํ๋๊ฐ์ ๋ฐฐ์๊ฐ ๋์ด์ผ ํจ
๋ฉ๋ชจ๋ฆฌ์ ํ๋ณด๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ
< PE >
(17) DWORD SizeOfHeader
ํค๋ ํค๋ ์น์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ํฉ์น ๋งํผ์ ๋ฐ์ดํธ ์
- MS-DOS , PE , .
๋ฐ๋์ ํ๋๊ฐ์ ๋ฐฐ์๊ฐ ๋์ด์ผ ํจ
- FileAlignment .
๋ชจ๋ ํค๋์ ํฌ๊ธฐ ๋ฐ์ดํธ
< : 0x00001000(4K ) > (18) DWORD CheckSum
์ด๋ฏธ์ง์ ์ฒดํฌ์ฌ ๊ฐ
-์ปค๋ ๋ชจ๋ ๋๋ผ์ด๋ฒ๋ ์ด๋ค ์์คํ ์ ๊ฒฝ์ฐ ์๊ตฌ ๋จ
- DLL
๊ทธ ์ธ์ ๊ฒฝ์ฐ๋ ์ค์ ์๋จ ์ด๋ค
- 0( ) .
(19) WORD Subsystem
ํด๋น ์คํํ์ผ์ด ์ ์ ์ธํฐํ์ด์ค๋ก ์ฌ์ฉํ๋ ์๋ธ์์คํ ์ ์ข ๋ฅ๋ฅผ ๋ํ๋
- .
(20) WORD DllCharacteristics
์ธ์ ์ด๊ธฐํํจ์ ๊ฐ ํธ์ถ๋์ด์ผ ํ๋์ง ์ง์ํ๋ ํ๋๊ทธ
- DLL (DllMain())
(21) DWORD SizeOfStackReserve, DWORD SizeOfStackCommit
DWORD SizeOfHeapReserve, DWORD SizeOfHeapCommit ํ๋ก์ธ์ค๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์์ ๋ง์ ์คํ๊ณผ ํ์ ๋ณ๋๋ก ๊ฐ๋๋ค
- .
๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ ์์คํ ์ด ๋ํดํธ ์คํ๊ณผ ํ์ ๋ง๋ค์ด์ฃผ๊ธฐ ์ํด ์ฐธ์กฐํ๋ ํ๋ - PE
(22) DWORD LoaderFlags ์ผ๋ก ์ธํธ ๋๋ค
- 0 .
(23) DWORD NumberOfRvaAndSizes
๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์์ ๊ฐ์๋ฅผ ๋ํ๋
- IMAGE_DATA_DIRECTORY .
ํญ์ ๊ฐ์ด๋ค
- 16 .(0x00000010)
๊ตฌ์กฐ์ฒด ๋ฐฐ์ด ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด๊ตฌ์กฐ์ฒด ๋ฐฐ์ด ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด 2.3.2 IMAGE_DATA_DIRECTORY
2.3.2 IMAGE_DATA_DIRECTORY 2.3.2 IMAGE_DATA_DIRECTORY 2.3.2 IMAGE_DATA_DIRECTORY
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] ์ ์ฒด ๋ฐ์ดํธ๋ก ์ด๋ฃจ์ด์ง
์ ๊ฐ์๋ ์ผ๋ก ์ ์๋์ด์ง - IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ ํญ์ ์ผ๋ก ์ธํ ๋๋ค
- 0 .
๋ง์ง๋ง ์์๋ ํญ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ์ ์์๋ง ์ฌ์ฉ์ด ๋๋ค
- 0 0~14(15 ) .
์ ์ ์๋ ๊ตฌ์กฐ์ฒด์ ๋ชจ์ต - WinNT.H
๋ฐฐ์ด ์์์ ๋ํ ์ ์
-3. IMAGE_SECTION_HEADER
3. IMAGE_SECTION_HEADER
3. IMAGE_SECTION_HEADER
3. IMAGE_SECTION_HEADER
์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค - Section Table .
ํค๋ ๋ค์ ๋ฐ์ดํธ๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด
- PE (IMAGE_NT_HEADERS) 40
์น์ ์ด ๊ฐ๋ผ๊ณ ํ๋ฉด ์น์ ํค๋์ ์ ์๋์ด์ง ๋ฐฐ์ด์ด ๊ฐ๊ฐ ๋๊ณ ๋ง์ง๋ง์ ๋ก ์ฑ์์ง๋ค
- 5 5 NULL .
์น์ ์ ๋ณด์ ๊ฐ์๋ ์ ๋ฉค๋ฒ๊ฐ ๊ฐ๊ณ ์๋ค
- IMAGE_FILE_HEADER NumberOfSections .
(1) BYTE Name[IMAGE_SIZEOF_SHORT_NAME] ์น์ ์ ๋ค์์ ๋ํ๋ด๋ ๋ฉค๋ฒ์ด๋ค
- .
์น์ ์ ์ด๋ฆ์ ๋ํ๋ด๋ ๋ฌธ์์ด์ ์ ์ฅํ๋ค
- .
์ ๋ฐ์ดํธ ๊น์ง์ด๋ฉฐ ์ ์ ์ธ๋๋ค
- IMAGE_SIZEOF_SHORT_NAME 8 NULL .
๋ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง๋ง ์ด๋ฆ์ผ๋ก ์น์ ์ ์ฑ๊ฒฉ๊น์ง ํ์ ์ ํ๋ฉด ์๋๋ค
- .text .code .
์ด ๋ฉค๋ฒ์ ๊ฐ์ ์ผ์๋ ์๋ค
- NULL .
์น์ ์ด๋ฆ์ด ๊ฐ๋ค๊ณ ํ์ฌ ๊ฐ์ ์์ฑ์ ๊ฐ์ง๋ ์๋๋ค
- .
์น์ ์ ์์ฑ์ ํ์ ํ๊ธฐ ์ํด์ ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐํด์ผ ํ๋ค
- Characterstics .
(2) DWORD PhysicalAddress / VirtualSize ์ ๋์จ ๊ตฌ์กฐ์ฒด ๊ณต์ฉ์ฒด ์ ๋ฉค๋ฒ
- Misc ( )
ํ์ผ์ธ ๊ฒฝ์ฐ์ ์ธ ๊ฒฝ์ฐ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง
- OBJ PE
์ ๊ฒฝ์ฐ ํ๋๋ฅผ ์ฌ์ฉ
- PE VirtualSize ๋ก๋์ ์ํด
- PE ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ง ํ์ ํด๋น ์น์ ์ด ์ผ๋ง๋งํผ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋์ง์ ๋ํ ์ ๋ณด ํ๋๋ ๋ ์ด์ ์๋ฏธ๊ฐ ์์
- PhysicalAddress
(3) DWORD VirtualAddress ์์
- PE ํด๋น ์น์ ์ด ๊ฐ์์ฃผ์๊ณต๊ฐ์ ๋งคํ๋์์๋ RVA ๊ฐ.
์ ๊ฐ์ ๋ฐฐ์๊ฐ์ ๊ฐ๋๋ค
- OPTIONAL_HEADER SectionAlignment .
๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ๋ ๊ฐ์ด๋ค
- ImageBase RVA .
(4) DWORD SizeOfRawData (*) ์์์ ํด๋น์น์ ์ ๋ํ
- RawData ์ค์ ์ฌ์ฉ๋ ํฌ๊ธฐ์ ์ ๋ณด.
ํด๋น ์น์ ์ด ์ผ๋ง๋งํผ์ ๋น๊ณต๊ฐ์ด ์๋์ง ์์๋ผ๋ ํ์ํ ์ ๋ณด
-๋ก๋๋ ์ด ๊ฐ์ ํตํ์ฌ ์น์ ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ง๋ ์ฌ๋ผ๊ฐ์ผ ํ๋์ง ์๋ค
- PE .
์ต์ ๋ํค๋์ ๊ฐ์ ๋ฐฐ์๊ฐ์ ๊ฐ๋๋ค
- FileAlignment .
์ฝ๋์น์ ์ ์์น
- (PointerToRawData) : 0x00001000
์ฝ๋์น์ ์์ ์ฌ์ฉ๋๋ ํฌ๊ธฐ(Misc.VitualSize) : 0x000000A00 FileAlignment : 0x00001000
์ฝ๋์ ํฌ๊ธฐ๋งํผ ์ค์ ์ฌ์ฉ๋ ๊ณต๊ฐ ์ฌ์ฉ๋์ง ์๋ ๋น๊ณต๊ฐ
- SizeOfRawData : +
์์์ ์๋์ฐ์ฆ๋ ๊ฐ์ ์ํฅ์ ๋ฐ์ ์น์ ์ ํฌ๊ธฐ๋ฅผ ํ ๋นํ๋ฏ๋ก ํด๋น
- RawData FileAlignment
์น์ ์ ํฌ๊ธฐ์ ๊ด๊ณ์์ด FileAlignment๊ฐ์ ๋ฐฐ์๋งํผ์ ํฌ๊ธฐ๋ก ์น์ ๊ณต๊ฐ์ ํ ๋นํ๋ค. ์ด๋ฌํ ์น์ ๊ด๋ฆฌ๋ฒ์ผ๋ก ์ธํด ๋๊ฐ์ ์น์ ๋ค์ ๋น๊ณต๊ฐ์ด ๋จ์์๋ค ๋ก ์ฑ์์ง
- .(NULL )
๋น๊ณต๊ฐ์ ์์์ ์ฝ๋๋ฅผ ์์ฑํจ์ผ๋ก์ ํ๋ก๊ทธ๋จ์ ์กฐ์ํ ์ ์๋ค
- .
์น์ ์ ์ง์ ์ถ๊ฐํ๊ฑฐ๋ ์น์ ํ ์ด๋ธ์ ๊ฐ์ ์กฐ์ ํ์ฌ ํ์ฌ ์กด์ฌํ๋ ์น์ ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆด์๋
-์๋ค.
(5) DWORD PointerToRawData
ํด๋น ์น์ ์ ํ์ผ์์์์ ์ ๋๋ก๋ถํฐ์ ์คํ์
์์๋ง ์ฌ์ฉ๋จ ์คํํ์ผ์์๋ ์ด๋๋ค
- OBJ ( 0 .)
ํ์ผ์์ ์ด ์๋ ๊ฒฝ์ฐ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์์์ ๊ฐ๋ฆฌํด
- OBJ 0 IMAGE_RELOCATION
(7) DWORD PointerToLinenumbers
๋ผ์ธ๋ฒํธ๊ฐ ์ ์ฒจ๋ถ๋์์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ
- COFF(Common Object File Format) PE .
๊ฐ์ด ์ด ์๋ ๊ฒฝ์ฐ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์์์ ๊ฐ๋ฆฌํด
- 0 IMAGE_LINENUMBER .
(8) WORD NumberOfRelocations
ํ๋๊ฐ ๊ฐ๋ฆฌํค๋ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์์์ ๊ฐ์
- PointerToRelocations IMAGE_RELOCATION ์คํํ์ผ์์๋ ํญ์ ์ด๋ค
- 0 .
(9) WORD NumberOfLinenymvers
ํ๋๊ฐ ๊ฐ๋ฆฌํค๋ ๊ตฌ์กฐ์ฒด ๋ฐฐ์ด์ ์์์ ๊ฐ์
- PointerToLinenumbers IMAGE_LINENUMBER ๋ผ์ธ๋ฒํธ์ฌ ์ ์ฒจ๋ถ๋์์๋๋ง ์ฌ์ฉ
- COFF PE .
(10) DWORD Characteristics
ํด๋น ์น์ ์ ์์ฑ์ ๋ํ๋ด๋ ํ๋๊ทธ์ ์งํฉ
- .
์ ์ ํํ๋ก ๋ฌธ์ ์ํด ์ ์๋์ด ์์
- WinNT.H IMAGE_SCN_XXX_XXX #define .
- IMAGE_SCN_CNT_CODE 0x00000020 ์ฝ๋๋ก ์ฑ์์ง ์น์ ์์ ๋ํ๋
#
๋ณดํต ์คํ๊ฐ๋ฅ ํ๋๊ทธ๋ฅผ ์๋ฏธํ๋ ํ๋๊ทธ์ ํจ๊ป ์ง์ ๋จ
# IMAGE_SCN_MEM_EXECUTE .
- IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 ๋ฐ์ดํฐ๊ฐ ์ด๊ธฐํ๋ ์น์
#
์คํ๊ฐ๋ฅ ์น์ ๊ณผ ์น์ ์ ์ ์ธํ ๊ฑฐ์ ๋๋ถ๋ถ์ ์น์ ์ด ์ด ํ๋๊ทธ๋ฅผ ๊ฐ๋๋ค
# .bbs .
- IMAGE_SCN_CNT_UNINITIALIZED_DATA ๋ฐ์ดํฐ๊ฐ ์ด๊ธฐํ๋์ง ์์ ์น์
#
์๋ฅผ ๋ค๋ฉด ์น์
# .bbs
ํด๋น ์น์ ์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง ์์ฑ์ ๋ํ๋ด๋ ํ๋๊ทธ์ ์งํฉ
< >
- IMAGE_SCN_MEM_DISCARDABLE 0X02000000
์ผ๋จ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ๋๊ณ ๋ ํ ํ๋ก์ธ์ค์๊ฒ ๋ ์ด์ ์๋ฏธ๊ฐ ์๋ ์น์ ์์ ๋ํ๋ #
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ๊ธฐ ๊ฐ๋ฅ ์น์ ์ ๊ธฐ๋ณธ์ฌ๋ฐฐ์น ์น์ ์ด๋ค
# .reloc( ) .
- IMAGE_SCN_MEM_EXECUTE 0x20000000 ์ฝ๋๋ก์ ์คํ๋ ์ ์๋ ์น์ ์์ ๋ํ๋ #
๋ณดํต ํ๋๊ทธ์ ํจ๊ป ์ธํธ ๋จ
# IMAGE_SCN_CNT_CODE .
- IMAGE_SCN_MEM_READ 0x40000000 ์ฝ๊ธฐ ๊ฐ๋ฅ์์ญ ์น์ ์์ ๋ํ๋
์ค์ ์
-๊ฐ์ ํ์ธํด๋ณด๋ฉด ์์ - Characteristics ...( )
# .textbss 0xE000000A0
---IMAGE_SCN_MEM_EXECUTE 0x20000000 IMAGE_SCN_MEM_READ 0x40000000 IMAGE_SCN_MEM_WRITE 0x80000000 IMAGE_SCN_CNT_CODE 0x00000020 IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
---์ฝ๋์น์ ๊ณผ ์ด๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์๋ ์น์ ์ด ํผํฉ๋์ด ์๋ค
-> .bbs .
๋ฉ๋ชจ๋ฆฌ ์์ฑ์ผ๋ก๋ ์คํ ์ฝ๊ธฐ ์ฐ๊ธฐ ์์ฑ
-> , ,
์ฐธ๊ณ ๋ก ์ด๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ด ์น์ ์ด ์์๋ ๋ก ๋ฐ๋๊ฒ์ด
-> .bss( ) VC++7.0 .textbss
- IMAGE_SCN_MEM_WRITE 0x80000000 ์ฐ๊ธฐ ๊ฐ๋ฅ์์ญ ์น์ ์์ ๋ํ๋
# .
์ฐ๊ธฐ ๊ฐ๋ฅ ์น์ ์ ์ ํ์ ์ธ ์
# : .data .bbs
ํ๋ ์น์ ํ ์ด๋ธ
Offset 0x000001e0 0x00000208 0x00000230 0x00000258 0x00000280
Name .textbss .text .rdata .data .idata
VirtualSize 0x00010000 0x00012DA7 0x00002E90 0x0000304C 0x00000B79 VirtualAddr
ess 0x00001000 0x00011000 0x00024000 0x00027000 0x0002B000 SizeOfRawD
ata 0x00000000 0x00013000 0x00003000 0x00002000 0x00001000 PointerToRa
wData 0x00000000 0x00001000 0x00014000 0x00017000 0x00019000 PointerToRe
locations 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 PointerToLi
nenumbers 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 NumberOfR
elocations 0x0000 0x0000 0x0000 0x0000 0x0000 NumberOfLi
nenumbers 0x0000 0x0000 0x0000 0x0000 0x0000 Characterist
๊ฐ ๊ฐ๋ฆฌํค๋ ์์น๋ก ํ์ผ ์คํ์ ์ ์ด๋ # PointerToRawData
๊ฑฐ๊ธฐ์๋ถํฐ ์ ๋ฐ์ดํธ ์๋งํผ์ด ํด๋น ์น์ ์ ๋ด์ฉ์ด ๋๋ค
# SizeOfRawData .
์ด ์น์ ์ด ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ๋์์๋์ ๊ฐ ๊ฐ ๋๋ค
# RVA VirtualAddress .
๋งคํํ ์น์ ์ ์ค์ ์์ํฌ์ธํฐ๋ฅผ ์ป์ผ๋ ค๋ฉด
# ImageBase + VirtualAddress
๋งคํ๋ ํ ์ด ์น์ ์ด ์ฐจ์งํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ํฌ๊ธฐ๋ ์ ๋ช ์๋๋ค
# VirtualSize .
์ฝ๋์น์
์ฝ๋์น์
์ฝ๋์น์
์ฝ๋์น์
4.