์ค๋ ์์
๋ชฉํ
1. ํ๋ก์ ํธ ์งํํ๊ธฐ (์๋ฒ ๋ฐ ๋คํธ์ํฌ ๋ฑ, ๊ธฐ๋ณธ ์ธํ๋ผ ๊ตฌ์ถ)
- ์ค์ -
2. ์๋์ฐ PE
- ์คํ -
3. GSN3 ์ธ๋ถ ์ธํฐ๋ท ์ฐ๊ฒฐ
- ์คํ -
Inside : DB, Win7, Win10
DMZ : Web, Mail, DNS, NTP
Image_NT_headers32
- Signature
- Image_File_headers32
- Image_Optional_header32
- address of entry point
- Image base
RVA
VA
Section Alignment : 0000 1000
File Alignment : 0000 0200
--> ํด๋ฌ์คํฐ์ ๋น์ทํ ์ญํ ์ ํ๋ค
Section = ๋ฉ๋ชจ๋ฆฌ
file = ํ์ผ
Number Of Rva And Sizes : 0000 0010
-> Image_Data_Directory์ ๋ฐฐ์ด ๊ฐ์
- 16๊ฐ Data Driectrory๊ฐ ์กด์ฌํ๋ค.
158๋ถํฐ ์์
Data Directory[0] -> Export
-> 0000 0000 / 0000 0000
Data Directory[1] -> Import
-> 0000 7604 / 0000 00C8
..
..
..
Data Directory[F] ->
--- ์์์ ๊ตฌํ ์ฃผ์๊ฐ์ ๋์ค์ INT IAT์ EAT์์ ์ฌ์ฉํ ์์
INT = Import Name Table
IAT = Import Application Table
-----------------------------------------NT ํค๋ ๋ ----------
๊ฐ ์์ญ๋ณ(text, data, rsrc) ํค๋ ๋ณด๊ธฐ
์์ญ๋ณ ํค๋์ ๊ตฌ์กฐ๋ ์ ๋ถ ๋์ผํ๋ค
typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union {
DWORD PhysicalAddress;
DWORD VirtualSize; -> ๋ฉ๋ชจ๋ฆฌ์์ ์น์
์ด ์ฐจ์งํ๋ ํฌ๊ธฐ
} Misc;
DWORD VirtualAddress; -> ๋ฉ๋ชจ๋ฆฌ์์ ์น์
์ด ์์ํ๋ ์ฃผ์(RVA)
DWORD SizeOfRawData; -> ํ์ผ์์ ์น์
์ด ์ฐจ์งํ๋ ํฌ๊ธฐ
DWORD PointerToRawData; -> ํ์ผ์์ ์น์
์ด ์์ํ๋ ์ฃผ์
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics; -> ์์ฑ
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
=== text section header ===
VirtualSize : 0000 7748 ๋ฉ๋ชจ๋ฆฌ์์ ์น์
์ด ์ฐจ์งํ๋ ํฌ๊ธฐ
VirtualAddress : 0000 1000 ๋ฉ๋ชจ๋ฆฌ์์ ์น์
์ด ์์ํ๋ ์ฃผ์
SizeOfRawData : 0000 7800 ํ์ผ์์ ์น์
์ด ์ฐจ์งํ๋ ํฌ๊ธฐ
PointerToRawData : 0000 0400 ํ์ผ์์ ์น์
์ด ์์ํ๋ ์ฃผ์
=== data section header ===
VirtualSize : 0000 1BA8
VirtualAddress : 0000 9000
SizeOfRawData : 0000 0800
PointerToRawData : 0000 7C00
=== rsrc section header ===
VirtualSize : 0000 8304
VirtualAddress : 0000 B000
SizeOfRawData : 0000 8400
PointerToRawData : 0000 8400
----->
RVA(๋ฉ๋ชจ๋ฆฌ) to RAW(ํ์ผ์ ์์ ๋)
ํน์ ๊ธฐ๋ฅ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋์์ ๋
์ด ์์น(HxD๋ก ๋ณผ ์ ์๋)๋ฅผ ์ฐพ์์ผ ํ๋ค!
๊ณต์ :
RAW = (๋ด๊ฐ ์ฐพ๋)RVA - Virtual Address + Point to Raw Data
RVA : 5000์ผ ๋ RAW(offset ์ฃผ์)๋ ๋ฌด์์ผ๊น์?
RAW : RVA(5000) - VA(1000) + PRD(400) = 4400
RVA : 13314์ผ ๋ RAW(offset ์ฃผ์)๋ ๋ฌด์์ผ๊น์?
RAW : RVA(13314) - VA(B000) + PRD(8400) = 10714
RVA : ABA8์ผ ๋ RAW(offset ์ฃผ์)๋ ๋ฌด์์ผ๊น์?
RAW : RAV(ABA8) - VA(9000) + PRD(7C00) = 97A8