手写PE文件(一)
DOS Header(IMAGE_DOS_HEADER)->64 Byte
DOS頭部
???????????????????? DOS Stub 112字節(jié)
?
????????????????????"PE"00(Signature) 4個(gè)字節(jié)
?
??????????????????? IMAGE_FILE_HEADER? 20個(gè)字節(jié)
?
PE文件頭?????? IMAGE_OPTIONAL_HEADER32? 96個(gè)字節(jié)
?
??????????????????? 數(shù)據(jù)目錄表?????????16*8=128個(gè)字節(jié)
?
??????????????????? IMAGE_SECTION_HEADER??? 40個(gè)字節(jié)
?
塊表????????????? IMAGE_SECTION_HEADER??? 40個(gè)字節(jié)
?
??????????????????? IMAGE_SECTION_HEADER??? 40個(gè)字節(jié)
?
??????????????????? .text?? 512個(gè)字節(jié)
?
塊???????????????? .rdata? 512個(gè)字節(jié)
?
??????????????????? .data?? 512個(gè)字節(jié)
??????????????????
????????????????????COFF 行號
?
調(diào)試信息??????? COFF符號表
?
??????????????????? Code View調(diào)試信息
1這部分可以使讀者對PE文件整體結(jié)構(gòu)有一個(gè)大概了解。
2方便審查自己的構(gòu)造進(jìn)度 本次構(gòu)造的PE文件總共有3個(gè)塊,他們分別用來存放可執(zhí)行代?
? 碼,輸入表信息,以及全局變量,接觸過PE文件的朋友對區(qū)塊的概念應(yīng)該不陌生,我們知道windows下的很多應(yīng)用程序的文件對齊制度,也就是大名鼎鼎的FileAlignment字段的值最多200個(gè)字節(jié),也就是十進(jìn)制的512字節(jié),對于不足512個(gè)字節(jié)的,要填充00補(bǔ)完512個(gè)字節(jié),對于超過512個(gè)字節(jié),要多分配512個(gè)字節(jié)
?本例中的PE文件頭64+112+4+20+224+40*3=544個(gè)字節(jié)但是顯然要填充到1024個(gè)字節(jié),整個(gè)文件體積就是512*2(PE文件頭)+512*3(塊)=2560個(gè)字節(jié),這也就是我們構(gòu)造的PE文件總的大小
提前搞清一些字段與區(qū)段的偏移量也是比較重要的,
?1 PE文件頭開始位置B0
?2 IMAGE_OPTIONAL_HEADER32開始處000000C8h
?3 數(shù)據(jù)目錄表開始處 00000128h
?4 塊表開始處 000001A8h
?5 .text區(qū)段開始處 00000400
?6 .rdata區(qū)段開始處 00000600
?7 .data區(qū)段開始處 00000800
二:重點(diǎn)字段的介紹
?1 DOS頭部
?? 1-1 DOS Header
?????? 1-1-1 e_magic[WORD]-->4D5A(DOS可執(zhí)行文件頭標(biāo)記)
???????1-1-19 e_lfanew[WORD]->BO OO OO OO (指定PE文件頭的偏移量64+112)
?2 PE文件頭
?? 2-1 "PE"00
?????? 2-1-1 Signature[DWORD]-->50450000(PE文件頭標(biāo)記)
????????? 注釋:此處的值總為0000h
?
???2-2 IMAGE_FILE_HEADER
?????? 2-2-1 Machine[DWORD]--->4C 01(可執(zhí)行文件的目標(biāo)CPU類型)
??????????注釋:次PE文件運(yùn)行于哪個(gè)CUP下,其標(biāo)志就為相應(yīng)的值
????????? interl i386 14C h????????????????? MIPS R3000 162h
????????? MIPS R4000? 166h???????????????Alpha AXP 184h
????????? Power PC 1F0h
?????? 2-2-2? NumberOfSections[WORD]--->03 00區(qū)段數(shù)目
??????????注釋:此值取決于PE文件的區(qū)塊數(shù)目,本程序?yàn)?個(gè)區(qū)段
?????? 2-2-3? SizeOfOptionalHeader[WORD]--->E0 00(PE 可選頭大小)
????????? 注釋:此值表示PE可選頭的大小
?????? 2-2-7 Characteristics[WORD]--->OF O1(文件屬性)
????????? 注釋: 此值為文件的執(zhí)行屬性,EXE文件的屬性一般為010Fh,DLL文件般?
???????????? 為0210h
???2-3 IMAGE_OPTIONAL_HEADER
??????? 2-3-1? Magic[WORD]--->OB 01(*標(biāo)記字)
???????????注釋:此處是一個(gè)標(biāo)記字,用于描述PE文件的映像類型,ROM映像0107h,普通可?
??????????????? 執(zhí)行映像010Bh,PE32+則是020Bh。
??????? 2-3-7 AddressOfEntryPoint[DWORD]--->00 10 00 00(*程序執(zhí)行入口)
???????????注釋:通俗的講就是指向可執(zhí)行代碼區(qū)塊(.text)的首地址
??????? 2-3-10 ImageBase[DWORD]--->00 00 40 00(*程序默認(rèn)裝入基地址)
??????? 2-3-11 SectionAlignment[DWORD]-內(nèi)存中的對齊大小,也叫做塊粒度,其默認(rèn)值是CPU頁大小
??????? 2-3-12 FileAlignment[DWORD]--->00 02 00 00(*文件區(qū)中區(qū)塊對齊值)
?????????? 注釋: 磁盤上的PE文件的區(qū)塊對齊大小,這個(gè)值必須是2的冪,并且最小是200h
??????? 2-3-17 MajorSubsystemVersion[WORD]--->04 00(*運(yùn)行所需最低子系統(tǒng)主版本號)
?????????? 注釋:要求最低的子系統(tǒng)主版本號,一般情況下為4
??????? 2-3-18 MinorSubsystemVersion[WORD]--->00 00(*運(yùn)行所需最低子系統(tǒng)次版本號)
?????????? 注釋:要求最低的子系統(tǒng)次版本號,一般情況下都為0
??????? 2-3-20 SizeOfImage[DWORD]--->00 40 00 00(映像裝入內(nèi)存后總尺寸)
?????????? 注釋:指的是裝入文件從Image Base到最后一個(gè)區(qū)塊大小
??????? 2-3-21 SizeOfHeaders [DWORD]--->00 04 00 00(*DOS頭 PE頭,區(qū)塊表的總大小)
?????????? 注釋:指的是DOS頭,PE頭與區(qū)塊表的總大小,并且所有這些項(xiàng)目都是出現(xiàn)在PE文件中任何代碼和數(shù)據(jù)之前,此值遵循文件對齊制度
??????? 2-3-23 Subsystem[WORD]--->03 00(*文件子系統(tǒng))
?????????? 注釋:標(biāo)明可執(zhí)行文件所期望的子系統(tǒng)
??????? 2-3-30 NumberOfRvaAndSizes[DWORD]--->10 00 00 00(數(shù)據(jù)目錄表的項(xiàng)數(shù),默認(rèn)值16)
?????????? 注釋:數(shù)據(jù)目錄的項(xiàng)數(shù),這個(gè)自動(dòng)從NT系統(tǒng)發(fā)布以來就是16
?? 2-4 數(shù)據(jù)目錄表
??????? 2-4-2 Import Table
???????????注釋:輸入表
???????????2-4-2-1 VirtualAddress[DWORD]--->10 20 00 00(*數(shù)據(jù)塊起始RAV)
???????????? 注釋:輸入表的起始地址,要去除IAT所占空間,直接從第一個(gè)IID開始
???????????2-4-2-2 Size[DWORD]--->3C 00 00?00 (*數(shù)據(jù)塊大小)
???????????? 注釋:從第一個(gè)IID到最后一個(gè)IMAGE_IMPORT_BY_NAME的總長度
3 塊表
???? 3-1 IMAGE_SECTION_HEADER(1.text)
?????????? 3-1-1 Name[BYTE]--->2E 74 65 78 74 00 00 00(*8個(gè)字節(jié)的塊名)
????????????? 注釋:此區(qū)塊的名稱,限制在8個(gè)字節(jié)內(nèi)
?????????? 3-1-2 VirtualSize[DWORD]--->26 00 00 00(被實(shí)際使用的區(qū)塊大小)
??????????????注釋:此區(qū)塊包含數(shù)據(jù)的大小
?????????? 3-1-10 Characteristics[DWORD]--->20 00 00 60(該區(qū)塊的讀寫執(zhí)行屬性)
?????????????????????? *----------------------------------------------------------------*
? ?? ?? ? |??字段值? ?|? ?? ?? ?? ???用 途? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 00000020h | 包含代碼,常與10000000h一起設(shè)置 |
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 00000040h | 包含已初始化數(shù)據(jù)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 00000080h | 包含未初始化數(shù)據(jù)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 02000000h | 可以被丟棄? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 10000000h | 共享塊? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 20000000h | 可執(zhí)行? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 40000000h | 可讀? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
? ?? ?? ? | 80000000h | 可寫? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?|
? ?? ?? ? -----------------------------------------------------------------
?
?
4 塊
????? 4-1?.text(*此區(qū)段是一段匯編代碼的16進(jìn)制形式,功能是彈出一個(gè)MessageBox提示框)?
?????????? 6A 00 68 00 30 40 00 68 07 30 40 00 6A 00 E8 07 00 00 00 6A 00 E8 06 00 00 00 FF 25 08 20 40 00 FF 25 00 20 40 00
????? 4-2 .rdata (該區(qū)塊包含輸入表)
???????????? 4-2-1 IMAGE_THUNK_DATA32(IAT1)
?????????????注釋:其實(shí)IMAGE_THUNK_DATA32是一個(gè)聯(lián)合體,可以同時(shí)代表IAT和INT
??????????????? 4-2-1-1 AddressOfData[DWORD]--->76 20 00 00(*指向IMAGE_IMPORT_BY_NAME的RVA)
??????????????? 注釋:作為IAT時(shí)我們就使用它的成員AddressOfData成員,用來存放指向IMAGE_IMPORT_BY_NAME的RVA,當(dāng)程序裝入內(nèi)存后,只與IAT交換信息,輸入表的其他部分就不再需要了。[由于本例子中兩個(gè)API引自兩個(gè)不同DLL中,所以要補(bǔ)充00 00 00 00結(jié)束]
??????????????? 4-2-3 IMAGE_IMPORT_DESCRIPTOR(IID 1)
??????????????? 注釋:這里稍微復(fù)雜些,它的作用是使用INT指定某個(gè)DLL文件中的API函數(shù),并配合IAT指向相關(guān)API的地址
???????????????????4-2-3-1 OriginalFirstThunk[DWORD]--->4C 20 00 00(*指向輸入名稱表INT的RVA)
?????????????????? 注釋:這里指定某個(gè)DLL中API函數(shù)
?
???????????????????4-2-3-4 Name[DWORD]--->6A 20 00 00(指向DLL名字的RVA與指針)
?????????????????? 注釋:這里指定某個(gè)系統(tǒng)DLL
?????????????????? 4-2-3-5 FirstThunk[DWORD]--->08 20 00 00(指向輸入地址表的IAT的RVA)
???????????????????注釋:這里指定相關(guān)的IAT,并由IAT在IMAGE_IMPORT_BY_NAME中獲得相應(yīng)API的地址
????????????? 4-2-4 IMAGE_IMPORT_DESCRIPTOR(IID 2)
?????????????????? 4-2-4-1 OriginalFirstThunk [DWORD]--->54 20 00 00(*指向輸入名稱表INT的RVA)
?????????????????? 4-2-4-4 Name [DWORD]--->84 20 00 00(*指向DLL名字的RVA與指針)
?????????????????? 4-2-4-5 FirstThunk [DWORD]--->00 20 00 00(*指向輸入地址表IAT的RVA)
????????? [填充20個(gè)00h空字節(jié)做結(jié)尾標(biāo)記]
?????? 4-2-5 IMAGE_THUNK_DATA32(INT 1)
??????????4-2-5-1 ForwarderString [DWORD]--->5C 20 00 00
????????? 注釋:直接指向相關(guān)API函數(shù)
??????????【由于本例子中兩個(gè)API函數(shù)引自兩個(gè)不同的DLL中,所以要補(bǔ)充00 00 00 00結(jié)束】
?????? 4-2-7 IMAGE_IMPORT_BY_NAME(1)
?????????? 4-2-7-2 Name[BYTE]--->4D 65 73 73 61 67 65 42 6F 78 41(MessageBoxA的16進(jìn)制碼)
?????????? 注釋:相關(guān)API函數(shù)的16進(jìn)制碼
?????????? 【后面跟輸出函數(shù)的DLL名稱16進(jìn)制碼00 75 73 65 72 33 32 2E 64 6C 6C 00 00 user32.dll】注釋:相關(guān)系統(tǒng)的API函數(shù)羅列完畢后,通常在最后一個(gè)AIP后面加00,并跟著DLL名稱的16進(jìn)制數(shù)據(jù)
三 PE文件結(jié)構(gòu)字段清單
??? 1 DOS頭部
????? 1-1 DOS Header
??????? 1-1-1 e_magic [WORD]---> 4D 5A(*DOS可執(zhí)行文件頭標(biāo)記)
????????1-1-2 e_cblp [WORD]---> 00 00(文件最后頁的字節(jié)數(shù))
????????1-1-3 e_cp[WORD]--->00 00(文件頁數(shù))
????????1-1-4 e_crlc[WORD]--->00 00(重定位元素個(gè)數(shù))
??????? 1-1-5 e_cparhdr[WORD]--->00 00(以段落為單位的頭部大小)
????????1-1-6 e_minalloc[WORD]--->00 00(所需的最小附加段)
??????? 1-1-7 e_maxalloc[WORD]--->00 00(所需的最大附加段)
??????? 1-1-8 e_ss[WORD]--->00 00(初始的堆棧段(ss)相對偏移量)
??????? 1-1-9 e_sp[WORD]--->00 00(初始的堆棧指針(SP)值)
????????1-1-10 e_csum[WORD]--->00 00(校驗(yàn)和)
????????1-1-11 e_ip[WORD]--->00 00(初始的指令指針(IP)值)
??????? 1-1-12 e_cs[WORD]--->00 00(初始的代碼段(CS)的偏移量)
??????? 1-1-13 e_lfarlc[WORD]--->00 00(重定位表在文件中的偏移量)
????????1-1-14 e_ovno[WORD]--->00 00(覆蓋號)
??????? 1-1-15 e_res[WORD]--->00 00(保留字,一般都為確保對齊而保留)
??????? 1-1-16 e_oemid[WORD]--->00 00(OEM標(biāo)識(shí)符,相對于e_oemid)
??????? 1-1-17 e_oeminfo[WORD]--->00 00(OEM信息,即OEM細(xì)節(jié))
??????? 1-1-18 e_res[WORD]--->00 00(保留字,一般為對齊而保留)
??????? 1-1-19 e_lfanew[DWORD]--->B0 00 00 00(指向PE文件頭的偏移量,BO=64+112)
2 PE文件頭
? 2-1 PE 00
???? 2-1-1 Signature[DWORD]--->50 45 00 00(*PE文件頭標(biāo)記)
? 2-2 IMAGE_FILE_HEADER
???? 2-2-1 Machine[WORD]--->4C 01(可執(zhí)行文件的目標(biāo)CPU類型)
???? 2-2-2NumberOfSections[WORD]--->03 00區(qū)塊數(shù)目
???? 2-2-3TimeDateStamp [DWORD]--->00 00 00 00(文件創(chuàng)建時(shí)間和日期)
???? 2-2-4 PointerToSymbolTable[DWORD]---->00 00 00 00(指向符號表,用于調(diào)試)
???? 2-2-5 NumberOfSymbols[DWORD]--->(符號表中的符號個(gè)數(shù),用于調(diào)試) 00 00 00 00
???? 2-2-6 SizeOfOptionalHeader[WORD]--->E0 00(PE頭IMAGE_OPTIONAL_HEADER32)大小
???? 2-2-7 Characteristics [WORD]--->OF O1 (*文件屬性)
2-3 IMAGE_OPTIONAL_HEADER32
2-3-1 Magic [WORD]--->OB 01(*標(biāo)記字) 2-3-2 MajorLinkVersion [BYTE] 00(連接程序主版本號) 2-3-3 MinorLinkVersion [BYTE] 00 (連接程序主版本號) 2-3-4 SizeOfCode [DWORD] 00 00 00 00(所含代碼區(qū)塊的總大小) 2-3-5 SizeOfInitializedData[DWORD] 00 00 00 00(所有初始話數(shù)據(jù)區(qū)塊總大小) 2-3-6 SizeOfUninitializedData[DWORD] 00 00 00 00(所有未初始話數(shù)據(jù)區(qū)塊大小) 2-3-7 AddressOfEntryPoint 00 10 00 00(程序入口點(diǎn)RAV) 2-3-8 BaseOfCode 00 00 00 00(代碼區(qū)塊起始RVA) 2-3-9 BaseOfData 00 00 00 00(數(shù)據(jù)區(qū)塊起始RVA) 2-3-10 ImageBase 00 00 40 00(程序默認(rèn)裝入基地址) 2-3-11 SectionAlignment 00 10 00 00 內(nèi)存中區(qū)塊對齊值 2-3-12 FileAlignment 00 02 00 00文件中區(qū)塊對齊值 2-3-13 MajorOperatingSystemVersion 00 00操作系統(tǒng)主版本號 2-3-14 MinorOperatingSystemVersion 00 00操作系統(tǒng)次版本號 2-3-15?MajorImageVersion 00 00用戶定義主版本號 2-3-16 MinorImageVersion 00 00用戶定義次版本號 2-3-17 MajorSubSystemVersion 04 00運(yùn)行所需最低子系統(tǒng)主版本號 2-3-18 MinorSubSystemVersion 00 00運(yùn)行所需最低子系統(tǒng)次版本號 2-3-19 Win32VersionValue 00 00 00 00保留值,通常為0 2-3-20 SizeOFimage 00 40 00 00映像裝入內(nèi)存后的總尺寸 2-3-21 SizeOfHeaders 00 04 00 00DOS頭 PE頭 區(qū)塊表的總大小 2-3-22 CheckSum 00 00 00 00映像校驗(yàn)和 2-3-23 SubSystem 03 00文件子系統(tǒng) 2-3-24 DllCharacteristics 00 00顯示DLL特性的旗標(biāo) 2-3-25 SizeOfStackReserve 00 00 00 00初始話堆??偞笮?2-3-26 SizeOfStackCommit 00 00 00 00初始話提交堆棧大小 2-3-27 SizeOfHeapReserve 00 00 00 00 初始話保留堆棧大小 2-3-28 SizeOfHeapCommit 00 00 00 00 初始話實(shí)際保留堆棧大小 2-3-29 LoaderFlags 00 00 00 00與調(diào)試有關(guān),默認(rèn)值為0 2-3-30 NumberOfRvaAndSizes 10 00 00 00 數(shù)據(jù)目錄表的數(shù)目 2-4數(shù)據(jù)目錄表 2-4-1 Export Table 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小????
????????
2-4-10 Threda local storage(TLS) 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-11 Load configuration 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-12 Bound import 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-13 Import Address Table(IAT) 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-14 Delay import??? 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-15 COM descriptor 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-1 保留 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 3塊表 3-1 IMAGE_SECTION_HEADER(1.text) 3-1-1 Name[BYTE]-->2E 74 65 78 74 00 00 00(8個(gè)自己的塊名) 3-1-2 VirtualSize 26 00 00 00被實(shí)際使用的區(qū)塊大小 3-1-3 VirtualAddress 00 10 00 00區(qū)塊的RVA地址 3-1-4 SizeOfRawData 00 02 00 00 該塊在磁盤中占的大小 3-1-5 PointerToRawData 00 04 00 00該塊在文件中的偏移 3-1-6?PointerToRelocations 00 00 00 00在OBJ文件中使用,調(diào)試中使用 3-1-7 PointerToLinenumbers00 00 00 00行號表的偏移,調(diào)試中使用 3-1-8 NumberOfRelocations00 00在OBJ文件中使用,重定位項(xiàng)數(shù)目 3-1-9 NumberOfLinenumbers 00 00行號表中行號數(shù)目 3-1-10 Characteristics 20 00 00 60該區(qū)的執(zhí)行讀寫屬性 3-2 IMAGE_SECTION_HEADER(1.rdata) 3-1-1 Name[BYTE]-->2E 72 64 61 74 61 00 00(8個(gè)自己的塊名) 3-1-2 VirtualSize 92 00 00 00被實(shí)際使用的區(qū)塊大小 3-1-3 VirtualAddress 00 20 00 00區(qū)塊的RVA地址 3-1-4 SizeOfRawData 00 02 00 00 該塊在磁盤中占的大小 3-1-5 PointerToRawData 00 06 00 00該塊在文件中的偏移 3-1-6?PointerToRelocations 00 00 00 00在OBJ文件中使用,調(diào)試中使用 3-1-7 PointerToLinenumbers00 00 00 00行號表的偏移,調(diào)試中使用 3-1-8 NumberOfRelocations00 00在OBJ文件中使用,重定位項(xiàng)數(shù)目 3-1-9 NumberOfLinenumbers 00 00行號表中行號數(shù)目 3-1-10 Characteristics 40 00 00 40該區(qū)的執(zhí)行讀寫屬性 3-3 IMAGE_SECTION_HEADER(1.data) 3-1-1 Name[BYTE]-->2E 64 61 74 61 00 00 00(8個(gè)自己的塊名) 3-1-2 VirtualSize 3E 00 00 00被實(shí)際使用的區(qū)塊大小 3-1-3 VirtualAddress 00 30 00 00區(qū)塊的RVA地址 3-1-4 SizeOfRawData 00 02 00 00 該塊在磁盤中占的大小 3-1-5 PointerToRawData 00 08 00 00該塊在文件中的偏移 3-1-6?PointerToRelocations 00 00 00 00在OBJ文件中使用,調(diào)試中使用 3-1-7 PointerToLinenumbers00 00 00 00行號表的偏移,調(diào)試中使用 3-1-8 NumberOfRelocations00 00在OBJ文件中使用,重定位項(xiàng)數(shù)目 3-1-9 NumberOfLinenumbers 00 00行號表中行號數(shù)目 3-1-10 Characteristics 40 00 00 C0該區(qū)的執(zhí)行讀寫屬性 4塊 4-1 .text(該區(qū)塊是一段匯編代碼16進(jìn)制形式,功能是彈出一個(gè)MessageBox提示框) 6A 00 68 00 30 40 00 68 07 30 40 00 6A 00 E8 07 00 00 00 6A 00 E8 06 00 00 00 FF 25 08 20 40 00 FF 25 00 20 40 00 4-2 .rdata(該區(qū)塊包括輸入表) 4-2-1 IMAGE_THUNK_DATA32(IAT1) 4-2-1-1 AddressOfData 76 20 00 00(*指向IMAGE_IMPORT_BY_NAME的RVA??? 由于本例子中兩個(gè)API函數(shù)引自兩個(gè)不同DLL,所以要補(bǔ)充00 00 00 00結(jié)束 4-2-2 IMAGE_THUNK_DATA(IAT2) 4-2-2-1 AddressOfData 5C 20 00 00(*指向IMAGE_IMPORT_BY_NAME的RVA 由于本例子中兩個(gè)API函數(shù)引自兩天不同DLL,所以要補(bǔ)充00 00 00 00結(jié)束 4-2-3 IMAGE_IMPORT_DESCRIPTOR(IID1) 4-2-3-1 OriginalFirstThunk 4C 20 00 00指向輸入名稱表的RVA 4-2-3-2 TimeDateStamp 00 00 00 00 32時(shí)間標(biāo)志 4-2-3-3 ForwarderChain 00 00 00 00被轉(zhuǎn)向API索引 4-2-3-4 Name 6A 20 00 00 指向DLL名稱的RVA與指針 4-2-3-5 FirstThunk 08 20 00 00 指向輸入地址表IAT的RVA 4-2-4 IMAGE_IMPORT_DESCRIPTOR(IID2) 4-2-3-1 OriginalFirstThunk 54 20 00 00指向輸入名稱表的RVA 4-2-3-2 TimeDateStamp 00 00 00 00 32時(shí)間標(biāo)志 4-2-3-3 ForwarderChain 00 00 00 00被轉(zhuǎn)向API索引 4-2-3-4 Name 84 20 00 00 指向DLL名稱的RVA與指針 4-2-3-5 FirstThunk 00 20 00 00 指向輸入地址表IAT的RVA 填充20個(gè)00h作為結(jié)尾標(biāo)記 4-2-5 IMAGE_THUNK_DATA32(INT1) 4-2-5-1 ForwarderString 5C 20 00 00 (*指向一個(gè)轉(zhuǎn)向字符的RVA) 由于兩個(gè)API函數(shù)引自兩個(gè)不同DLL文件,所以要補(bǔ)充00 00 00 00結(jié)束 4-2-6 IMAGE_THUNK_DATA32(INT1) 4-2-6-1 ForwarderString 76 20 00 00(*指向一個(gè)轉(zhuǎn)向符的RVA) 由于兩個(gè)API函數(shù)引自兩個(gè)不同DLL文件,所以要補(bǔ)充00 00 00 00 結(jié)束 4-2-7 IMAGE_IMPORT_BY_NAME(1) 4-2-7-1 Hint 00 00此函數(shù)所駐留DLL的輸出表序號 4-2-7-2 Name 4D 65 73 73 61 67 65 42 6F 78 41 (MessageBox的16進(jìn)制代碼,后面跟著此函數(shù)的DLL名稱16進(jìn)制代碼00 75 73 65 72 33 32 2E 64 6C 6C 00 00 4-2-8 IMAGE_IMPORT_BY_NAME(2) 4-2-8-1 Hint 00 00此函數(shù)所駐留DLL的輸出表序號 4-2-8-2 Name 45 78 69 74 50 72 6F 63 65 73 73(ExitProcess的16進(jìn)制代碼)后面跟輸出函數(shù)的DLL名稱16進(jìn)制碼00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 kernel32.dll 填充至00 08 00 00 4-3? .data CF FB CF A2 BF F2 00 48 65 6C 6C 6F 2C 77 6F 72 64 00填充至00 10 00 00 至此第一個(gè)首先PE文件完畢,好累呀?
2-4-2Import Table 2-4-1VirtualAddress 10 20 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 3C 00 00 00 數(shù)據(jù)塊大小 2-4-3Resorce Table 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-4 Exception Table 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-5 Security Table 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-6Base relocation Table 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-7 Debug 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-8 CopyRight 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小 2-4-9 Global ptr 2-4-1 VirtualAddress 00 00 00 00數(shù)據(jù)塊的起始RVA 2-4-2 Size 00 00 00 00 數(shù)據(jù)塊大小總結(jié)
- 上一篇: NHibernate应用二:第一个NHi
- 下一篇: web前端技术杂谈--css篇(1)--