病毒原理與防范-PE+文件型病毒_第1頁
病毒原理與防范-PE+文件型病毒_第2頁
病毒原理與防范-PE+文件型病毒_第3頁
病毒原理與防范-PE+文件型病毒_第4頁
病毒原理與防范-PE+文件型病毒_第5頁
已閱讀5頁,還剩49頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第1頁病毒原理與防范病毒原理與防范 PE文件型病毒文件型病毒林春薔林春薔計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社病毒如何感染病毒如何感染PE文件?文件?l首先判定文件是否是首先判定文件是否是PE文件文件l接下來,添加節接下來,添加節2022年3月8日第2頁計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第3頁Q:如何判斷一個文件是否為:如何判斷一個文件是否為PE文文件?件?l檢驗文件頭部第一個字的值是否等于檢驗文件

2、頭部第一個字的值是否等于MZ,如如果是,則果是,則DOS頭有效。頭有效。l用用DOS頭的字段頭的字段e_lfanew來定位來定位PE頭。頭。l比較比較PE透的第一個雙字的值是否等于透的第一個雙字的值是否等于45500000H(PE00)。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第4頁代碼實現代碼實現/定義局部變量定義局部變量IMAGE_DOS_HEADER dos_header;IMAGE_NT_HEADER nt_header;CFile fp;計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月

3、8日第5頁fp.Read(&dos_header,sizeof(dos_header);If(dos_header.e_magic!=0 x5A4D).fp.Seek(dos_header.e_lfanew,CFile:begin);if(nt_header.Signature!=0 x00004550)計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第6頁PE病毒編寫的關鍵技術病毒編寫的關鍵技術l定位定位l獲取獲取API函數函數l搜索目標文件搜索目標文件l感染感染l破壞破壞計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社

4、清華大學出版社2022年3月8日第7頁病毒編寫的難點病毒編寫的難點l病毒是在宿主的運行環境下運行,所以無病毒是在宿主的運行環境下運行,所以無法像在自己本身的運行環境下一樣訪問自法像在自己本身的運行環境下一樣訪問自己的靜態(全局)變量的數據和直接調用己的靜態(全局)變量的數據和直接調用系統系統API。l通過一些技術可以克服上述的難點,但編通過一些技術可以克服上述的難點,但編寫起來會比較繁瑣。寫起來會比較繁瑣。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第8頁1 重定位重定位病毒編譯后病毒編譯后 病毒模塊進入宿主體病毒模塊進入宿主體病毒在感染前的

5、病毒在感染前的Var2位置位置病毒感染病毒感染HOST后后Var2的位置的位置變量Var2VIRUS00400000004010 xx變量Var2的實際位置HOST變量Var2VIRUS00400000004010 xxmov ax,Var2mov ax,004010 xx計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社問題的產生原因及解決方法?問題的產生原因及解決方法?l為什么程序加載到一個不同的位置之后會出錯?為什么程序加載到一個不同的位置之后會出錯?l病毒是否能夠事先預料到自己的病毒代碼將添加到病毒是否能夠事先預料到自己的病毒代碼將添加到HOST什么位置?加

6、載之后又在什么位置?什么位置?加載之后又在什么位置? 不能不能 怎么辦?怎么辦? 代碼重定位計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第10頁病毒模塊病毒模塊delta:DELTA的偏移量的偏移量病毒代碼基地址病毒代碼基地址= Delta的地址的地址 - Delta的偏移量的偏移量 病毒模塊的基地址病毒模塊的基地址計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社CALL語句用法語句用法mov al,?call dpcharmov ax,bxdpchar proc push ax push bx mov bx,0

7、 mov ah,0ehint 10hpop bxpop axretdpchar endp2022年3月8日第11頁CALL 指令將返回地址壓入堆棧(即指令將返回地址壓入堆棧(即CALL的下一條的下一條指令地址壓入堆棧)指令地址壓入堆棧)計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第12頁得到病毒代碼基地址得到病毒代碼基地址 call deltadelta: pop eax sub eax,offset delta 運行后,運行后,eax中存放的是病毒代碼基地址中存放的是病毒代碼基地址則則V2的地址的地址 = eax + offset v2計算

8、機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第13頁實例:訪問變量實例:訪問變量 x的數據的數據l.codel call fl : jmp fl x dd 12345678hl : l pop ebxsub ebx, offset Bmov eax, ebx+x計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第14頁2 獲取獲取API函數地址函數地址l為什么要獲取為什么要獲取API函數地址函數地址 Win32下的系統功能調用一般通過調用動態連接下的系統功能調用一般通過調用動態連接庫中的庫中的API函

9、數實現。函數實現。 API函數調用的實質是找到函數地址,然后函數調用的實質是找到函數地址,然后call計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第15頁調用調用Windows API的方法的方法lMessageBox(0,”123”,0,0);lCall 0 x7c91001c; (WIN XP SP3)地址放在地址放在導入表中導入表中計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第16頁引入表引入表l導入表是用來描述可執行文件需要調用的導入表是用來描述可執行文件需要調用的外部函數(外部函數

10、(API)。)。lAPI包含在眾多擴展名為包含在眾多擴展名為DLL的動態鏈接庫的動態鏈接庫中,當應用程序運行時,通過將函數所在中,當應用程序運行時,通過將函數所在的動態鏈接庫載入到內存后調用的。的動態鏈接庫載入到內存后調用的。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第17頁病毒獲取病毒獲取API函數地址函數地址 病毒和普通程序一樣需要調用病毒和普通程序一樣需要調用API函數實現某函數實現某些功能,但病毒運行在宿主環境下,在編寫上些功能,但病毒運行在宿主環境下,在編寫上不能直接寫函數名去調用不能直接寫函數名去調用API(引入表提供把(引入表

11、提供把函數名轉換為函數地址),必須病毒自身去獲函數名轉換為函數地址),必須病毒自身去獲取取API函數地址(動態調用函數地址(動態調用API)。)。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第18頁病毒獲取病毒獲取API函數地址函數地址l靜態方式:調用時,根據函數名查引入表,靜態方式:調用時,根據函數名查引入表,就可以獲取該函數的地址。就可以獲取該函數的地址。l動態方式:使用函數動態方式:使用函數LoadLibrary裝載需要裝載需要調用的函數所在的調用的函數所在的dll文件,獲取模塊句柄。文件,獲取模塊句柄。然后調用然后調用GetProcA

12、ddress獲取需要調用的獲取需要調用的函數地址。這種方式是在需要調用函數時函數地址。這種方式是在需要調用函數時才將函數所在的模塊調入到內存中,同時才將函數所在的模塊調入到內存中,同時也不需要編譯器為函數在引入表中建立相也不需要編譯器為函數在引入表中建立相應的項。應的項。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第19頁兩個有用的兩個有用的APILoadLibrary加載一個加載一個DLL,返回,返回DLL地址地址GetProcAddress通過通過DLL地址和地址和API函數名獲得函數名獲得API函數的地址函數的地址C語言實例:語言實例:

13、DLL地址地址 = LoadLibrary(“DLL名名”);API函數地址函數地址 = GetProcAddress(DLL地址地址,“函數函數名名”);計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社問題問題LoadLibrary , GetProcAddress函數始終在內存函數始終在內存中嗎?中嗎?2022年3月8日第20頁ExitProcessLoadLibraryGetProcAddressKernel32.dll計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第21頁硬編碼硬編碼API地址地址l如何獲取

14、如何獲取API函數地址函數地址 通過工具查看通過工具查看API函數的地址,然后用硬編碼地函數的地址,然后用硬編碼地址來調用,比如址來調用,比如WIN 8系統環境下系統環境下API函數函數“LoadLibraryA”的地址是的地址是0 x76C4F864. 可直可直接通過函數地址調用接通過函數地址調用: Call 0 x76C4F864 API函數地址在不同的函數地址在不同的WINDOWS版本下一般會版本下一般會有所不同。所以用硬編碼地址來調用有所不同。所以用硬編碼地址來調用API只能針只能針對某個版本的系統,兼容性不好。對某個版本的系統,兼容性不好。計算機病毒分析與防治教程計算機病毒分析與防治

15、教程 清華大學出版社清華大學出版社2022年3月8日第22頁動態獲取動態獲取l獲得獲得LoadLibrary和和GetProcAddress的地址的地址l這兩函數是系統模塊這兩函數是系統模塊kernel32.dll提供的,提供的,所以他們必定在所以他們必定在kernel32的引出表中被導的引出表中被導出。出。l只要我們能得到只要我們能得到kernel32的地址,我們就的地址,我們就可以通過搜索可以通過搜索kernel32的引出表,搜索得的引出表,搜索得到它們的地址。到它們的地址。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第23頁得到模塊得到

16、模塊kernel32的地址方法的地址方法1由于程序入口點是被由于程序入口點是被kernel32某個函數調用的,某個函數調用的,所以這個調用函數肯定在所以這個調用函數肯定在kernel32的地址空間的地址空間上。上。那么我們只要取得這個返回地址,就得到了一個那么我們只要取得這個返回地址,就得到了一個kernel32空間中的一個地址。空間中的一個地址。通過這個地址,我們可以從高地址向低地址方向通過這個地址,我們可以從高地址向低地址方向進行搜索,通過進行搜索,通過PE標志的判斷,搜索到標志的判斷,搜索到kernel32模塊的基地址!模塊的基地址!計算機病毒分析與防治教程計算機病毒分析與防治教程 清華

17、大學出版社清華大學出版社2022年3月8日第24頁l取棧頂值到寄存器取棧頂值到寄存器A(KERNEL32中的一個地址中的一個地址)lA = A 與與 0FFFFF000h(分配粒度是分配粒度是1000h,基,基地址必然在地址必然在xxxx000h處處)l循環:循環:l 如果如果A = IMAGE_DOS_SIGNATURE(判(判斷斷DOS頭標志)頭標志)l B = A;B =B+e_lfanew; 指向指向PE標志標志l 如果如果B =IMAGE_NT_SIGNATURE (判斷判斷“PE00”標志)標志)l 跳出循環;跳出循環;(找到,退出!)(找到,退出!)l A = A - 01000

18、h;l循環結束循環結束 計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第25頁匯編算法匯編算法GetKBase:GetKBase: mov edi ,esp ; mov edi ,esp ;取棧頂值,就是取棧頂值,就是KERNEL32KERNEL32中的一個地址中的一個地址 and edi,0FFFFF0000h ;and edi,0FFFFF0000h ;分配粒度是分配粒度是10000h10000h,基地址必然在,基地址必然在xxxx0000hxxxx0000h處處 .while TRUE.while TRUE .if WORD ptr ed

19、i = .if WORD ptr edi = IMAGE_DOS_SIGNATUREIMAGE_DOS_SIGNATURE ; ;判斷判斷DOSDOS頭標志頭標志 mov esi,edimov esi,edi add esi,DWORD ptr esi+03Ch ;esi add esi,DWORD ptr esi+03Ch ;esi指向指向PEPE標志標志 .if DWORD ptr esi =.if DWORD ptr esi =IMAGE_NT_SIGNATUREIMAGE_NT_SIGNATURE ; ;判斷判斷PEPE標志標志 .break.break ; ;若正確,則跳出循環若正確

20、,則跳出循環 .endif.endif .endif.endif sub edi, 010000h sub edi, 010000h .endw.endwmov hKernel32,edimov hKernel32,edi ; ;把找到的把找到的KERNEL32.DLLKERNEL32.DLL的基地址保存起來的基地址保存起來計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第26頁得到模塊得到模塊kernel32的地址方法的地址方法2l通過宿主進程的通過宿主進程的PEB:進程環境塊獲得:進程環境塊獲得lFs寄存器寄存器-TEBlTEB + 0 x3

21、0-PEBlPEB + 0 xc-PEB_LDR_DATAlPEB_LDR_DATA+0 x1c處存放了一些處存放了一些DLL的地址,第一個是的地址,第一個是nt.dll地址,第二個就是地址,第二個就是kernel32.dll的地址了。的地址了。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第27頁得到模塊得到模塊kernel32的地址方法的地址方法3lSEH(結構化異常處理結構化異常處理)lSEH鏈表中最頂層的異常處理函數是鏈表中最頂層的異常處理函數是Kernel32.dll中的一個函數。中的一個函數。l可以遍歷這個鏈表去搜索這個函數地址,可

22、以遍歷這個鏈表去搜索這個函數地址,通過這個函數地址向低地址方向以通過這個函數地址向低地址方向以64KB為為對齊單位查找對齊單位查找PE文件的文件的DOS頭標志頭標志”MZ”,從而找到從而找到Kernel32.dll的地址。的地址。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社SEH結構結構2022年3月8日第28頁自定義異常處理函數自定義異常處理函數自定義異常處理函數FFFFFHUnhandleExceptionFilterFs:0計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第29頁得到模塊得到模塊kernel

23、32的地址方法的地址方法4l宿主進程中的宿主進程中的TEB:線程環境塊,這個塊:線程環境塊,這個塊存放了線程的棧頂地址,這個地址存放了線程的棧頂地址,這個地址+0 x1c肯肯定位于定位于kernel32.dll中(中(NT系統)。系統)。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第30頁獲取獲取API函數地址函數地址 在得到了在得到了Kernel32的模塊地址以后,就可以搜的模塊地址以后,就可以搜索他的導出表得到索他的導出表得到GetProcAddress和和LoadLibrary兩個兩個API函數的地址。函數的地址。 對這兩個對這兩個AP

24、I函數的聯合調用就可以得到函數的聯合調用就可以得到WIN32 應用層上任何所需要的應用層上任何所需要的API函數地址了。函數地址了。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社MZ文件頭:DOS MZ HEADERDOS插樁程序:DOS StubIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADER.text.data.edata.reloc.COFF行號COFF符號表Code View調試信息PE文件標志:“PE00”映像文件頭:IMAGE_FILE_H

25、EADER可選映像頭:IMAGE_OPTIONAL_HEADER32數據目錄表:IMAGE_DATA_DIRECTORYDOS頭PE文件頭節表(Section Table)節(Section)調試信息文件頭文件尾計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第32頁MZ文件頭:DOS MZ HEADERDOS插樁程序:DOS StubIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADER.text.data.edata.reloc.COFF

26、行號COFF符號表Code View調試信息PE文件標志:“PE00”映像文件頭:IMAGE_FILE_HEADER可選映像頭:IMAGE_OPTIONAL_HEADER32數據目錄表:IMAGE_DATA_DIRECTORYDOS頭PE文件頭節表(Section Table)節(Section)調試信息文件頭文件尾00080f計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第33頁引入表引入表IMAGE_IMPORT_DESCRIPTOR 結構數組,結構數組,有多少有多少DLL就有多少就有多少該結構該結構00080F計算機病毒分析與防治教程計算

27、機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第34頁引出節引出節 PE : EXE,DLL 當當Windows啟動運行一個啟動運行一個EXE之前,需要將該之前,需要將該EXE需要使用的需要使用的DLL都裝入內存。都裝入內存。 引出節是引出節是DLL向向PE提供的導出函數信息的列表,提供的導出函數信息的列表,通常這些信息包含了導出的通常這些信息包含了導出的函數名和函數的地址。函數名和函數的地址。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第35頁計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版

28、社2022年3月8日第36頁lAddressOfFunctions指向一個數組,數組的每個成指向一個數組,數組的每個成員指向一個員指向一個API函數的地址。既然如此,我們要獲函數的地址。既然如此,我們要獲得一個得一個API函數的地址,就必須找到該函數的地址,就必須找到該API函數在函數在這個數組中的具體位置,也就是一個索引號。這個數組中的具體位置,也就是一個索引號。lAddressOfNames 和和AddressOfNameOrdinals指向指向兩個數組,一個是函數名字數組,一個是函數名字兩個數組,一個是函數名字數組,一個是函數名字所對應的索引號的數組。這兩個數組是一一對應的,所對應的索引

29、號的數組。這兩個數組是一一對應的,也就是說,如果第一個數組中的第也就是說,如果第一個數組中的第m項是我們查找項是我們查找的函數的名字,那么第二個數組中的第的函數的名字,那么第二個數組中的第m項就是該項就是該函數的索引號。這樣,我們通過在第一個數組中查函數的索引號。這樣,我們通過在第一個數組中查找我們需要查找函數的函數名,如果查到,便記住找我們需要查找函數的函數名,如果查到,便記住該項在該數組中的位置,然后再到第二個數組中相該項在該數組中的位置,然后再到第二個數組中相同的位置就可以取出該函數在函數地址數組中的索同的位置就可以取出該函數在函數地址數組中的索引號。引號。 計算機病毒分析與防治教程計算

30、機病毒分析與防治教程 清華大學出版社清華大學出版社通過函數名稱查找函數地址通過函數名稱查找函數地址l定位到定位到PE文件頭。文件頭。l從從PE文件頭中的可選文件頭中取出數據目錄表的第一個數據目錄,得到導出文件頭中的可選文件頭中取出數據目錄表的第一個數據目錄,得到導出表的地址。表的地址。l從導出表的從導出表的NumberOfNames字段得到以命名函數的總數,并以這個數字做字段得到以命名函數的總數,并以這個數字做微循環的次數來構造一個循環。微循環的次數來構造一個循環。l從從AddressOfNames字段指向的函數名稱地址表的第一項開始,在循環中將字段指向的函數名稱地址表的第一項開始,在循環中將

31、每一項定義的函數名與要查找的函數名比較,如果沒有任何一個函數名符合每一項定義的函數名與要查找的函數名比較,如果沒有任何一個函數名符合,說明文件中沒有指定名稱的函數。,說明文件中沒有指定名稱的函數。l如果某一項定義的函數名與要查找的函數名符合,那么記住這個函數名在字如果某一項定義的函數名與要查找的函數名符合,那么記住這個函數名在字符串地址表中的索引值(如符串地址表中的索引值(如x),然后在),然后在AddressOfNameOrdinals指向的數指向的數組中以同樣的索引值組中以同樣的索引值x去找數組項中的值,假如該值為去找數組項中的值,假如該值為y。l以以y值作為索引值,在值作為索引值,在Ad

32、dressOfFunctions字段指向的函數入口地址表中獲字段指向的函數入口地址表中獲取的取的RVA就是函數的入口地址,當函數被裝入內存后,這個就是函數的入口地址,當函數被裝入內存后,這個RVA值加上模塊值加上模塊實際裝入的基址實際裝入的基址(ImageBase),就得到了函數真正的入口地址。,就得到了函數真正的入口地址。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社從從Kernel32.dll的導出表中獲取某個的導出表中獲取某個API函數函數的地址的地址exportD=hKernel32.OptionalHeader.DataDirectory.Virtua

33、lAddress + hKernel32;int i,iA;for (i=0;iexportD.NumberOfNames;i+)p=hKernel32+exportD.AddressOfNamesi; If (!strcmp(p,name) break;WORD *pw = (WORD*)(hKernel32 + exportD.AddressOfNamesOrdinals);iA = pwi;DWORD *pA = (DWORD*)(hKernel32 + exportD.AddressOfFunctions);DWORD address = pAiA;2022年3月8日第38頁計算機病毒

34、分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社搜索目標文件搜索目標文件lPE病毒通常以病毒通常以PE文件格式的文件(如文件格式的文件(如EXE、SCR、DLL等)作為感染目標。等)作為感染目標。l在對目標進行搜索時一般采用兩個關鍵的在對目標進行搜索時一般采用兩個關鍵的API函數:函數: FindFirstFile FindNextFilel其一般搜索其一般搜索“*.exe”、“*.scr”等文件進行感染。等文件進行感染。l在算法上可以采用遞歸或者非遞歸算法對所有盤符進在算法上可以采用遞歸或者非遞歸算法對所有盤符進行搜索。行搜索。計算機病毒分析與防治教程計算機病毒分析與防治

35、教程 清華大學出版社清華大學出版社文件感染文件感染l一個被病毒感染的一個被病毒感染的HOST程序通常首先執行程序通常首先執行病毒代碼,然后執行病毒代碼,然后執行HOST程序的正常代碼程序的正常代碼。這既保證病毒首先獲得控制權,同時也。這既保證病毒首先獲得控制權,同時也不影響不影響HOST程序的正常執行。程序的正常執行。l另外也可能在另外也可能在HOST程序執行的過程中調用程序執行的過程中調用病毒代碼,例如病毒的病毒代碼,例如病毒的EPO技術中就采用技術中就采用這種方式。這種方式。 計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第41頁病毒對病毒

36、對PE文件的修改方式文件的修改方式l添加節添加節l擴展節擴展節l插入節插入節計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第42頁4.2 添加節方式修改添加節方式修改PE 在文件的最后建立一個新節,在節表結構的后面建立一個節在文件的最后建立一個新節,在節表結構的后面建立一個節表,用以表述該節。入口地址修改為病毒所在節表,用以表述該節。入口地址修改為病毒所在節計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第43頁增加新一節步驟增加新一節步驟l先把病毒代碼追加到文件尾部。先把病毒代碼追加到文件尾部。

37、l在節表中增加一個在節表中增加一個section header各項數據填寫正確各項數據填寫正確(VirtualSize,VirtualAddress,PointerToRawData.)。)。l在在FILEHEADER中修改節表項數目:中修改節表項數目: +1。l重新計算重新計算SizeofHeaders,并替換原值。,并替換原值。l重新計算重新計算SizeofImage,并替換原值。,并替換原值。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第44頁l記錄未感染時的記錄未感染時的AOEP(入口地址),因為(入口地址),因為在病毒代碼結束時要讓

38、宿主程序正常執行。在病毒代碼結束時要讓宿主程序正常執行。所以要先記錄所以要先記錄AOEP,在病毒程序結束后,在病毒程序結束后JMP跳到宿主程序的跳到宿主程序的AOEP。 l修改修改OptionalHEADER中的中的AddressOfEntryPoint,讓它指向新加節,讓它指向新加節的入口代碼的入口代碼計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第45頁總結總結l病毒程序進行了如下工作:病毒程序進行了如下工作:(1)分析)分析EXE搜索到的文件是否為正常的搜索到的文件是否為正常的PE文件,判斷文件,判斷DOS頭有無頭有無MZ標志,標志,PE

39、頭有無頭有無PE標志。標志。(2)通過感染標記分析是否已經感染過,如已經感染過就)通過感染標記分析是否已經感染過,如已經感染過就不必重復感染。不必重復感染。(3)建立病毒節表結構,將病毒代碼寫入到感染文件的最)建立病毒節表結構,將病毒代碼寫入到感染文件的最后。節表結構中需要填入的有節名,節的內存偏移地址,后。節表結構中需要填入的有節名,節的內存偏移地址,節的屬性,節的文件偏移,節的實際大小。節的屬性,節的文件偏移,節的實際大小。(4)修改的參數有)修改的參數有PE頭中的節個數,代碼段大小,內存中頭中的節個數,代碼段大小,內存中整個整個PE映像體的尺寸,入口地址等。映像體的尺寸,入口地址等。計算

40、機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第46頁思考?思考?l如果被感染文件的最后一個節表結構和第如果被感染文件的最后一個節表結構和第一個節之間的間距很小,不足以讓病毒插一個節之間的間距很小,不足以讓病毒插入一個新的節表結構,病毒還能感染該文入一個新的節表結構,病毒還能感染該文件嗎?件嗎?計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第47頁4.3 加長最后一節修改加長最后一節修改PE 計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第48頁l先

41、把病毒代碼追加到最后一個節的尾部。先把病毒代碼追加到最后一個節的尾部。l修改節表中最后一項修改節表中最后一項section header并增并增加加 SizeOfRawData 的大小和內存布局大小。的大小和內存布局大小。計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第49頁感染前感染前后對比后對比計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第50頁4.4 插入節方式修改插入節方式修改PE 計算機病毒分析與防治教程計算機病毒分析與防治教程 清華大學出版社清華大學出版社2022年3月8日第51頁插入節方式修改插入節方式修改PEl這種方式不增加節的個數和文件長度,病這種方式不增加節的個數和文件長度,病毒搜尋到一個可執行文件后,分析每個節,毒搜尋到一個可執行文件后,分析每個節,查詢節的空白空間查詢節的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論