




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
病毒原理及防范
——《PE型病毒》主講:林春薔職稱:講師成都信息工程學院信息對抗教研室通過一個實例改變程序的執(zhí)行流程,從而加深大家對PE文件格式的理解。深度解析PE文件格式WinhexLordPEOllyICE工具PE文件結構zzzzzzzzz為什么要重點學習這種文件格式?portableexecutable
可移植可執(zhí)行跨Win32平臺的文件格式所有Win32執(zhí)行體(exe、dll、kernelmodedrivers)本講的內(nèi)容提綱1.PE文件格式總體結構2.MS-DOSMZ文件頭+DOSStub3.PE文件頭4.節(jié)表5.節(jié)hello-2.5.exePE文件格式總體結構“PE00”?2023年11月8日第8頁MSDOSHeader所有MS-DOS兼容的可執(zhí)行文件都將這個值設為0x5A4D(MZ)4字節(jié)文件偏移地址定位PE頭部MS-DOSMZheaderMS-DOS頭部占據(jù)了PE文件的頭64個字節(jié)(4*16=64)USHORTe_magic;//魔數(shù)=MZMZ文件格式創(chuàng)始人,微軟資深工程師MarkZbikowski的縮寫LONGe_lfanew;//e_lfanew成員用于定位PE頭。該字段位于3CH處,該位置給出了PE文件頭部的開始位置。在本例中,PE文件頭部開始位置為0B0H。字串“PE\0\0”Signature
一dword類型,值為50h,45h,00h,00h(PE\0\0)。
本域為PE標記,我們可以此識別給定文件是否為有效PE文件。這個字串在文件中的位置(e_lfanew)可以在DOS程序頭中找到它的指針,它占用四個字節(jié),位于文件開始偏移3CH字節(jié)中。
魔術數(shù)字定位PE頭部PE文件標志“PE\0\0”“PE00”魔術數(shù)字魔術數(shù)字魔術數(shù)字映像文件頭(0x14)該結構域包含了關于PE文件物理分布的信息,
比如節(jié)數(shù)目、文件執(zhí)行機器等。
它實際上是結構IMAGE_FILE_HEADER的簡稱。2023年11月8日第14頁WORDMachine;該程序要執(zhí)行的環(huán)境及平臺WORDNumberOfSections;文件中節(jié)的個數(shù)DWORDTimeDateStamp;文件建立的時間DWORDPointerToSymbolTable;COFF符號表的偏移DWORDNumberOfSymbols;符號數(shù)目WORDSizeOfOptionalHeader;可選頭的長度WORDCharacteristics;文件屬性標志集合PE頭部1:映像文件頭可選映像頭(P80)可選映像頭中的一些關鍵字段1名字描述AddressOfEntryPoint
*PE裝載器準備運行的PE文件的第一個指令的RVA。若要改變整個執(zhí)行的流程,可以將該值指定到新的RVA,這樣新RVA處的指令首先被執(zhí)行。(病毒感染中通用關鍵字段)ImageBasePE文件的優(yōu)先裝載地址。比如,如果該值是400000h,PE裝載器將嘗試把文件裝到虛擬地址空間的400000h處。若該地址區(qū)域已被其他模塊占用,那PE裝載器會選用其他空閑地址。SectionAlignment內(nèi)存中節(jié)對齊的粒度。FileAlignment文件中節(jié)對齊的粒度。可選映像頭中的一些關鍵字段2名字描述MajorSubsystemVersion
MinorSubsystemVersionwin32子系統(tǒng)版本。若PE文件是專門為Win32設計的,該子系統(tǒng)版本必定是4.0否則對話框不會有3維立體感。SizeOfImage內(nèi)存中整個PE映像體的尺寸。SizeOfHeaders所有頭+節(jié)表的大小??梢砸源酥底鳛镻E文件第一節(jié)的文件偏移量。SubsystemNT用來識別PE文件屬于哪個子系統(tǒng)。DataDirectory一個IMAGE_DATA_DIRECTORY結構數(shù)組。每個結構給出一個重要數(shù)據(jù)結構的RVA,比如引入地址表等。RVA:RelativeVirtualAddress,表示相對虛擬地址。它是相對內(nèi)存中ImageBase的偏移位置。VA:VirtualAddress,表示虛擬地址,即裝載到內(nèi)存中之后的位置。(VA=ImageBase+RVA)舉例說明,如果PE文件裝入內(nèi)存空間的400000h處,且進程從虛擬地址401000h開始執(zhí)行,我們可以說進程執(zhí)行起始地址在RVA1000h。每個RVA都是相對于模塊的起始VA的。幾個常用術語幾個常用術語對齊內(nèi)存中節(jié)對齊的粒度文件中節(jié)對齊的粒度問題1:桶的容量為100升,現(xiàn)有367升水,請問需要使用多少個桶?問題2:代碼節(jié)的代碼實際長度為0x46字節(jié),文件中節(jié)對齊粒度為0x200,內(nèi)存中節(jié)對齊粒度為0x1000字節(jié),請問代碼節(jié)在文件和內(nèi)存中分別占用多少字節(jié)?為什么PE文件中有很多“00”字節(jié)?DataDirectory數(shù)據(jù)目錄一個IMAGE_DATA_DIRECTORY數(shù)組,里面放的是這個可執(zhí)行文件的一些重要部分的RVA和尺寸,目的是使可執(zhí)行文件的裝入更快,數(shù)組的項數(shù)由上一個域給出。IMAGE_DATA_DIRECTORY包含有兩個域,如下:IMAGE_DATA_DIRECTORYVitualAddressDD?SizeDD? IMAGE_DATA_DIRECTORYENDS3.4hello-2.5.exe的IAT與引入表節(jié)表節(jié)表其實就是緊挨著PEheader的一結構數(shù)組。該數(shù)組成員的數(shù)目由Fileheader(IMAGE_FILE_HEADER)結構中NumberOfSections
域的域值來決定。節(jié)表結構又命名為IMAGE_SECTION_HEADER(每個結構占用28H)。結構中放的是一個節(jié)的信息,如名字、地址、長度、屬性等。2023年11月8日第25頁節(jié)表UCHARName[8];//節(jié)名union{ULONGPhysicalAddress;//OBJ文件中表示本節(jié)物理地址
ULONGVirtualSize;//EXE文件中表示節(jié)的實際字節(jié)數(shù)
}Misc;ULONGVirtualAddress;//本節(jié)的RVAULONGSizeOfRawData;//本節(jié)在文件中的尺寸ULONGPointerToRawData;//本節(jié)在文件中的偏移地址ULONGPointerToRelocations;//OBJ文件中表示本節(jié)重定位信
//息的偏移,EXE文件中無意義ULONGPointerToLinenumbers;//行號偏移USHORTNumberOfRelocations;//重定位項的數(shù)目USHORTNumberOfLinenumbers;//本節(jié)在行號表中的行號數(shù)目ULONGCharacteristics;//節(jié)屬性代碼SectionAlignmentFileAlignment2023年11月8日第27頁如:80000000H就表示這段內(nèi)存是可寫的, 40000000H就表示這段內(nèi)存是可讀的一個節(jié)可包含多個屬性,對應位為1表示有此屬性如果期望一個節(jié)的數(shù)據(jù)可讀可寫,則它的屬性代碼應該是:?節(jié)的屬性節(jié)的屬性代表了該節(jié)所在內(nèi)存區(qū)塊的權限,其中每一位都代表了一種權限或屬性的啟開和關閉:屬性為:60000020H,請問是什么節(jié)?屬性為:C0000040H,請問是什么節(jié)?請問病毒代碼會為自己設置什么樣的屬性值?Question2023年11月8日第29頁PE裝載器的工作流程裝載器如何把一個節(jié)映射到內(nèi)存中?獲取文件節(jié)的數(shù)目(NumberOfSections)定位節(jié)表(SizeOfHeaders)獲得該節(jié)在磁盤上的存儲位置及大?。≒ointerToRawData,SizeOfRawData)把該節(jié)映射進內(nèi)存(VirtualAddress,ImageBase)設置該節(jié)的屬性(Characteristics)節(jié)
“節(jié)(Section)”跟在節(jié)表之后,一般PE文件都有幾個“節(jié)”。比較常見的有:代碼節(jié)已初始化的數(shù)據(jù)節(jié)未初始化的數(shù)據(jù)節(jié)引入函數(shù)節(jié)引出函數(shù)節(jié)資源節(jié)代碼節(jié)代碼節(jié)代碼節(jié)一般名為.text或CODE,該節(jié)含有程序的可執(zhí)行代碼。每個PE文件應該都有代碼節(jié)已初始化的數(shù)據(jù)節(jié)這個節(jié)一般取名為.data或DATA已初始化的數(shù)據(jù)節(jié)中放的是在編譯時刻就已確定的數(shù)據(jù)。如HelloWorld中的字符串“HelloWorld!”。.data節(jié)未初始化的數(shù)據(jù)節(jié)這個節(jié)的名稱一般叫.bbs。這個節(jié)里放有未初始化的全局變量和靜態(tài)變量。例如"static
int
k;“該節(jié)的'PointerToRawData'為0,表明其內(nèi)容不在文件內(nèi),特征位'IMAGE_SCN_CNT_UNINITIALIZED_DATA'指明所有內(nèi)容必須在加載時間置0。這意味著有節(jié)頭,但沒有節(jié)在文件內(nèi),該節(jié)被加載器創(chuàng)建,并且包含全0字節(jié)。其長度是'SizeOfUninitializedData'.典型名字如'.bss',
'BSS'。
引入函數(shù)節(jié)這個節(jié)一般名為.rdata,也叫引入函數(shù)節(jié)。一個引入函數(shù)是被某模塊調(diào)用的但又不在調(diào)用者模塊中的函數(shù)它可以用來從其它(系統(tǒng)或第三方寫的)DLL中引入函數(shù),例如user32.dll、gdi32.dll等。IAT
(IMPORTAddressTable)一系列DWORD的數(shù)組在文件中時,每個雙字中存放著對應引入函數(shù)的函數(shù)名字符串的RVA在內(nèi)存中時,每個雙字中存放著對應引入函數(shù)的地址。請問:ExitProcess函數(shù)的地址可能在不同的操作系統(tǒng)中各不相同,但為什么我們寫的程序可以在不同的系統(tǒng)中正常運行?IAT(IMPORTAddressTable)IMPORTDirectoryTable(核心)輸入目錄是一個IMAGE_IMPORT_DESCRIPTORs數(shù)組,每個DLL都使用一個元素,該列表中止于一個全0的數(shù)組元素。一個IMAGE_IMPORT_DESCRIPTOR是一個具有如下元素的結構:
IMAGE_IMPORT_DESCRIPTOR
STRUCT
union
Characteristics
dd
?
OriginalFirstThunk
dd
?//指向引入函數(shù)名列表或序號列表
Ends
TimeDateStamp
dd
?
ForwarderChain
dd
?
Name1
dd
?//指向dll函數(shù)名
FirstThunk
dd
?//指向IAT表
IMAGE_IMPORT_DESCRIPTOR
ENDSIMPORTDirectoryTableIMPORTNameTableData最高位:為1時,表示通過序號引入函數(shù)為0時,表示通過函數(shù)名引入IMPORTHints/Names&DLLnamesIMPORTHints/Names&DLLnames分解說明kernel32.dll為dll文件名8000為Hints,ExitProcess為引入函數(shù)名user32.dll為dll文件名6202為Hints,wsprintfA為引入函數(shù)名9D01為Hints,MessageBoxA為引入函數(shù)名在文件中的引入表在內(nèi)存中的引入表2023年11月8日第49頁2023年11月8日第50頁什么是引入函數(shù)?這些函數(shù)一般從哪里引入?為什么要設計引入函數(shù)節(jié)?目的何在?復習ExitProcess7081CDDAMessageBoxA77D504EAwsprintfA77D1A8AD引出函數(shù)節(jié)引出函數(shù)節(jié)一般名為.edata,這是本文件向其他程序提供調(diào)用函數(shù)的列表所在的“索引”及具體代碼實現(xiàn)。(這個節(jié)一般用在DLL中,EXE也可以有這個節(jié),但通常很少使用)我們主要分析其“索引”部分。通過該“索引”,可以找到對應函數(shù)的具體地址。引出函數(shù)節(jié)1
(00H)
Characteristics
4
一般為0
2
(04H)
TimeDateStamp
4
文件生成時間
3
(08H)
MajorVersion
2
主版本號
4
(0AH)
MinorVersion
2
次版本號
5
(0CH)
Name
4
指向DLL的名字
6
(10H)
Base
4
開始的序列號
7
(14H)
NumberOfFunctions
4
AddressOfFunctions數(shù)組的項數(shù)
8
(18H)
NumberOfNames
4
AddressOfNames數(shù)組的項數(shù)
9
(1CH)
AddressOfFunctions
4
指向函數(shù)地址數(shù)組
10
(20H)
AddressOfNames
4
指向“函數(shù)名所在地址”數(shù)組
11
(24H)
AddressOfNameOrdinals
4
指向“函數(shù)索引序列號”數(shù)組
Kernel32.dll的引出函數(shù)節(jié)尋找ExitProcess地址首先從AddressOfNames指向的指針數(shù)組中找到“ExitProcess”字符串,并記下該數(shù)組序號x然后從AddressofNameOrinals指向的數(shù)組中,定位第x項成員,得到一個序號yy為ExitProcess函數(shù)地址在AddressOfFunction中的索引號。從AddressOfFunction指向的數(shù)組中定位第y項,獲得ExitProcess的RVA函數(shù)地址1.尋找ExitProcess地址:
首先搜索NameTable,x=?x=00B72.然后從AddressofNameOrinals指向的數(shù)組中,定位第x項成員,獲得y=?00B63.從AddressTable獲取ExitProcess的函數(shù)地址(RVA=001CDDA)y=00B6,為何這里是00B7項?==〉PEView定位數(shù)組成員從1開始,而不是0獲取的ExitProcess地址是否正確?2023年11月8日第61頁構建PE中的引入信息PE加載器是如何正確的填充了FirstThunk指向的函數(shù)地址?2023年11月8日第62頁對于每個DLL的IMAGE_IMPORT_DESCRIPTOR:1.通過OriginalFirstThunk指向的INT得到函數(shù)名列表。2.對每個函數(shù)名:從DLLEXPORT匹配名稱,查得地址3.把函數(shù)地址填到FirstThunk對應的字段。
2023年11月8日第63頁首先打開一個名為example.exe的程序(PE文件)
實驗后的效果test.exe實例:如何改變程序(.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安徽省合肥市蜀山區(qū)中考物理一模試卷(含解析)
- 中國人民大學《英語演講與辯論理解當代中國》2023-2024學年第二學期期末試卷
- 西安美術學院《鋼琴即興配奏與彈唱》2023-2024學年第一學期期末試卷
- 四川省雅安市天全縣2025屆六年級下學期5月模擬預測數(shù)學試題含解析
- 山東省齊河、夏津、臨邑、禹城、武城五縣達標名校2024-2025學年初三第二學期綜合練習(一)生物試題試卷含解析
- 河北經(jīng)貿(mào)大學經(jīng)濟管理學院《綜合英語》2023-2024學年第一學期期末試卷
- 武漢工商學院《臨床流行病學與循證醫(yī)學》2023-2024學年第一學期期末試卷
- 上海濟光職業(yè)技術學院《幼兒教師語言與寫作技能》2023-2024學年第二學期期末試卷
- 山東省臨沭一中2025年第二學期期中七校聯(lián)考高三物理試題含解析
- 朔州職業(yè)技術學院《熱工測試技術》2023-2024學年第二學期期末試卷
- 【教無憂】高考二輪復習課件地理微專題33冰雪運動
- 《產(chǎn)業(yè)經(jīng)濟學》期末考試復習題及答案
- 重癥患者的疼痛管理
- 【MOOC】隧道工程-中南大學 中國大學慕課MOOC答案
- 二年級下冊語文《寫字表》生字組詞
- 《云南蔬菜出口現(xiàn)狀及完善對策研究》8400字(論文)
- 《常見魚類》課件
- 勞動用工風險與規(guī)范培訓
- 咯血病人的護理
- 銀行業(yè)審計服務方案
- 安徽省2024年中考道德與法治真題試卷(含答案)
評論
0/150
提交評論