本文是基於計算機病毒課程實踐部分的總結,這些實踐是自主嘗試學習分析惡意代碼的過程,若有疏漏不妥之處,還請不吝賜教!html
靜態分析技術是研究惡意代碼的第一步,經過各類工具儘量多的蒐集其信息並找到進一步分析的思路。
利用一些網站集合的病毒文件特徵庫進行惡意代碼特徵片斷的匹配,爲判斷程序惡意性提供參考。
加殼後的惡意程序會被壓縮或加密處理,混淆技術則隱藏了執行的過程。
加殼程序特色:至少會有兩個函數LoadLibrary
和GetProcAddress
用來加載和使用其餘函數。api
檢測加殼的類型和所用編譯器的類型,簡化加殼分析的過程。瀏覽器
查看PE文件的分節網絡
查看導入函數函數
存在問題:許多PEID插件會運行惡意代碼可執行文件,注意在虛擬機的環境下運行。工具
分析惡意代碼,能夠其連接庫和導入導出函數了解程序的行爲。
靜態連接與動態連接學習
庫與程序靜態連接時,庫中的全部代碼都會複製到程序中,程序增大不少,常見於UNIX和Linux系統中。
Windows中多爲動態連接,只有在程序運行時才連接到庫。網站
DLL文件:動態連接庫文件。可執行文件常被分紅這樣的一個個具備相對獨立功能的dll文件。加密
使用Dependency Walker工具插件
常見的DLL程序:
Kernal.dll 包含系統的核心功能,訪問和操做內存,文件,硬件 WININET.dll 聯網操做 包含了FTP HTTP NTP等協議 User.dll 包含了用戶界面組件,控制響應用戶操做的組件 Ntdll.dll 是Windows內核的接口 一般由Kernal間接導入,一些隱藏功能和操做進程會使用這個接口。 Advapi32.dll 提供了對核心Windows組件的訪問 ,好比服務管理器和註冊表 Gdi32.dll 提供圖形顯示和操做的函數
PE是指Windows系統下32位可執行文件,以一個文件頭開始,其中包括代碼信息,應用程序類型,所需的庫函數與空間要求。
PE文件中常見的分節:
.text:包含了CPU的執行指令,正常是惟一包含代碼的節。 .rdata:一般包含導入導出的函數信息,還能夠存儲程序中的其餘只讀數據。 .data:包含了程序的全局數據 (本地數據並不存儲在這裏)。 .rsrc:包含可執行文件使用的資源,內容並不執行,例如圖標、菜單項、字符串等 .reloc:包含用於重定位文件庫的信息 .pdata:只在64位可執行文件中存在,存儲異常處理信息
使用PEview工具
在這裏或許能夠找到有關惡意代碼行爲的線索。
IMAGE_NT_HEADERS
中的映像文件頭IMAGE_FILE_HEADER
中「Time Date Stamp」能夠獲取可執行文件是何時編譯的。IMAGE_OPTIONAL_HEADER
中第七個成員「AddressOfEntryPoint「,它持有OEP(程序的入口點)的RVA(相對虛擬地址)。- 有着相同編譯時間的動態連接庫 - 有特定行爲的關鍵導入導出函數 - 分節中的信息
- 能與系統實際文件相關的線索 - 與端口號相關的線索 -> 特定的服務 - 與某個網絡地址相關的線索
- 是不是惡意代碼? - 它作了什麼? - 主機已經感染的特徵?