简单病毒分析及手工查杀
【實驗目的】
分析PE文件結構,理解關鍵字段意義,掌握RVA、VA、FOA地址間轉換;分析文件型病毒的原理;了解文件型病毒的發現方法,能利用OD等工具分析PE病毒,并通過手工方式進行病毒查殺;分析病毒專殺工具的基本設計方法。
【系統環境及工具】
WinSR虛擬機、病毒樣本、OllyDBG、PE Explorer、UltraEdit32
【實驗步驟】
一.驗證利用OllyDBG修改病毒感染程序
(1)進入實驗目錄C:\ExpNIS\AntiVir-Lab\VirusExp\Filevirus。
新建文件夾“text”,將文件夾“hei”下的hei0.exe(未感染病毒的可執行程序)復制到text目錄中,將目錄C:\ExpNIS\AntiVir-Lab\Virus\LaborDayVirus中的LaborDayVirus.exe也復制到text目錄中。將系統時間調整為5月1日,雙擊text目錄下LaborDayVirus.exe感染hei0.exe文件,觀察hei0.exe感染病毒前后的大小變化。
感染前:
感染后:
能發現,感染后hei0.exe文件從3KB變成了9KB
(2)啟動ollyDbg1.10,C:\ExpNIS\NetAD-Lab\Tools\RemoteCtrl\OllyDBG ,單擊文件菜單中的“打開”項,選擇要修復的hei0.exe。由于病毒修改了原程序的入口點,因此會有程序入口點超出代碼范圍的提示,如圖2所示。
? 圖2 入口點警告提示
單擊“確定”按鈕繼續,程序會停在病毒修改后的程序入口點(hei0.exe的入口點為0x00403200)上,在代碼中找到最后一個jmp指令處(病毒感染完成后將跳轉回原程序),按F2設置斷點,按F9運行,程序會在剛設置的jmp斷點上中斷,查看EAX寄存器的值(EAX=0x401000注意上面提到的斷點,下面還會用到),按F7單步執行到下一條指令地址,點選鼠標右鍵,選擇菜單中的“用ollyDump脫殼調試進程”,
選中重建輸入表方式1,方式2各脫殼一次,分別保存為1.exe、2.exe。測試兩個程序是否還具有病毒的傳染特性___?
「注」 由于重建輸入表的方式不同,可能造成某一種導出方式導出的文件無法正常運行,請選擇可以執行的一種方式來清除病毒。
找到OEP
方式1:沒有傳染性
方式2:有傳染性
二.病毒感染機制分析
(1)準備一個沒有感染病毒的可執行程序和一個感染病毒的可執行程序,將其分別重命名為hei0.ex_,hei.ex_,并復制到一個新的目錄下用于調試、對比。
(2)使用PE Explorer,C:\ExpNIS\AntiVir-Lab\Tools\PE_Explorer分別打開hei.ex和hei0.ex文件,對比兩個文件入口點(OEP–Address of Entry Point)和Image Base并分別記錄。
| hei0.ex_ | 0000 1000h | 0040 0000h |
| hei.ex_ | 0000 3200h | 0040 0000h |
點擊“View”菜單中的“Section Headers”進入Section Headers頁面,比對Section Header的數據信息并記錄到下面表格。
| hei0.ex_的.data | 0000 0027h | 0040 3000h | 0000 0200h | 0000 0800h |
| hei.ex_的.data | 0000 1A00h | 0040 3000h | 0000 1A00h | 0000 0800h |
由于一般文件型病毒只有代碼段,數據和代碼都存在一起。所以可以斷定hei.ex的.data段多出的數據即為病毒代碼和數據。
(3)進入實驗平臺,單擊工具欄中“UE”按鈕,打開Ultra Editor,C:\ExpNIS\HostSec-Lab\UltraEdit選擇“文件”菜單中的“比較文件”功能對hei0.ex和hei.ex進行二進制比對,可以發現在hei.ex文件的0xa00處開始的數據塊為存儲于.data節的病毒代碼。
「注」 該段數據在.data節是因為hei0.ex和hei.ex的.data節都開始于各自文件偏移的Point to Raw Data處。這段數據是病毒代碼是因為0xa00 - 0x800 + 0x403000 = 0x403200(感染病毒文件hei.ex OEP的虛地址(VA))。
(4)使用Ultra Editor打開hei.ex定位光標到hei.ex的.data塊的Point to Raw Data位置,并以16進制形式查找hei0.ex的入口點(注意字節順序),將查找到的數據的文件偏移記錄FOA 00002010h 。計算該偏移的保護模式內存虛擬地址VA:00404810h__________。
(5)定位上面例子中hei.ex的jmp斷點,在jmp指令上面會發現如下的匯編代碼:
0x40481c在病毒代碼之后為被加載到內存的病毒數據的存儲區,0x1000為hei0.exe OEP的RVA,0x1000在反匯編代碼中的表示是0010。
(6)文件分析利用上面的方法分別對文件分析目錄下C:\ExpNIS\AntiVir-Lab\VirusExp\Filevirus\的已感染和未感染文件進行調試,注意比對感染病毒文件和原文件特征,將各個病毒文件的最后一個跳轉指令的目的地址記錄到如下表。
| mspaint.exe | 0003 4CF5 | 0005 3800 | 0103 4CF5 |
| notepad.exe | 0000 73A5 | 0001 3000 | 0100 73A5 |
| wordpad.exe | 0000 119B | 0000 3A00 | 0100 119B |
(7)通過以上的分析,就可以初步斷定,該病毒的感染方式是: 計算宿主文件OEP跳轉執行宿主程序,最后跳轉到EAX執行源程序 。
三.手工查殺
(1)查找病毒寄存特征。
入口點在代碼節(.text)之外,病毒代碼存儲于最后一節、且在病毒代碼段后的一個雙字為原程序代碼入口RVA(在.text節范圍內)。
文件病毒代碼以0xE58BE0FF結尾。
(以上特征是對簡化后的病毒特征的總結、實際中的病毒要復雜的多);
(2)查找原程序入口點。
(3)修改程序入口點為原程序入口點。
(4)修改病毒感染的最后一個節表的SizeOfRawData,使之大小變為去掉病毒代碼時的大小。
(5)修改PE文件選項頭中的SizeOfImage為去掉病毒代碼后的大小。
(6)清除病毒代碼數據。
(7)保存清除病毒代碼后的文件。
【實驗小結】
這次實驗我知道了如何尋找OEP,脫殼,理解了關鍵字段意義,掌握了RVA、VA、FOA地址間轉換;分析文件型病毒的原理;了解文件型病毒的發現方法,能利用OD等工具分析PE病毒,并通過手工方式進行病毒查殺;分析病毒專殺工具的基本設計方法。
總結
以上是生活随笔為你收集整理的简单病毒分析及手工查杀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信登录总结公众号登录小程序登录企业微信
- 下一篇: 用python搭建微商城_python框