Pe文件靜態分析能夠獲取到哪些信息
在分析一個樣本之前,通常會需要靜態分析,如何從PE文件格式中獲取到需要的信息就很重要。只有在靜態分析時對文件的一些佈局信息有了理解,例如是是否被加殼了(雖然可以用查殼工具,但是還是需要知道一些原理),文件時圖形化界面(GUI)還是命令執行程序(CUI)等信息的提取和掌握,分析時纔會更清晰要做什麼,做到心中有數。下面是在閱讀《惡意軟件分析實戰》
第一章中的一些整理筆記,希望爲後續的學習和分析中提供一些基礎理論知識來支撐。
程序的基本信息特徵
採集程序的md5 sha1 sha-256
的信息,之後到virutotal hybird anyrun
等在線沙箱去做分析,查看一些分析報告的信息。這裏推薦使用hashmyfiles
,如下
使用上述特徵到在線分析網站查找即可。如下是virutotal
的查找結果
程序的編譯時間
使用PEView
查看PE
的IMAGE_NT_HEADERS-->IMAGE_FILE_HEADER-->Time Date Stamp
,如下
可以知道這程序是2018/01/21 Sun 00:27:26 UTC
被編譯的,有些時候這個時間也不夠準確,不過這個也靠我們自己去判斷即可。有時候一個樣本的出現時間很早的話,很多查殺軟件都有了對應的特徵,如果再次出現表明此程序是一個變種樣本,值得窺探。
程序的子系統
程序的子系統是在IMAGE_OPTIANL_HEADER
下的SubSystem
字段中,通常主要分爲IMAGE_SUBSYSTEM_WINDOWS_GUI
和IMAGE_SUBSYSTEM_WINDOWS_CUI
兩個類型,第一個是圖形化程序,第二個是一個命令執行程序,使用PEView
查看子系統,如下
根據上述字段的描述,可以知道這個程序是一個圖形化界面程序,因此會有對應的窗體供給用戶交互。
如何查看是否被加殼了
查看PE結構
這裏選用PEView
來分析某個樣本是否被加殼了,需要知道的是一個正常的樣本,它的每個節區(例如.rdata .rsrc .text
的虛擬大小Virtual Size
和原始數據大小Size of Raw Data
的大小應該一樣大或者相差不多。如下是一個正常樣本的.text
的大小
正常樣本
當一個樣本被加殼了,則一些節區就會發生變化,例如被壓縮的程序,如下是一個被themida
壓縮的程序,程序不存在.text
節區,而是存在了.themida
節區,虛擬大小的值要比原始數據的值大很多,可以確定程序應該被處理過了,如下
表明程序在運行時會釋放數據到.themida
節區,在磁盤上不佔用大小。
使用工具
爲了能更好的對比處使用PEView
分析的結果(是否被themida
壓縮)正確,如下是對應的查殼工具分析的結果
DIE --Detect It Easy
查詢結果:不存在殼
這個結果還是有點出乎意料,因爲根據PE
結果來看,這個存在一個壓縮殼,估計是一個bug。
Exeinfo
查詢結果是Themida
,這個筆者分析的一致。
PEiD
查詢結果爲yoda's protector v1.02
,估計這也是個bug問題,這裏參考https://www.52pojie.cn/thread-146636-1-1.html
總結
根據工具分析和人工分析的結果來看,有時候工具也存在一些bug問題,此時可以人工分析,再來做一定的對比,或者多試試一些查殼工具等。
查看依賴的庫
- 查看導出函數
- 查看導入函數
這裏使用PeBear
這個工具分析,重點關注到Imports
這個選項,如下
從圖中可以知道導入了庫KERNEL32.DLL MSVCRT.DLL
兩個庫,並且可以看到對應的導出函數。
從導出的函數中可以推測,程序會調用CreateFileA
創建文件,並且使用FindFistFileA FindNextFileA
執行遍歷文件,之後可能會通過CopyFileA
函數執行對應的複製等操作,這裏會涉及到文件的操作。
查看字符串
在獲取了一些基本的Api
等函數信息後,進一步查找一些可能存在的特殊信息,這裏可以選擇查找一些字符串,Windows
下查看字符串可以使用BinText
來獲取,如下
這裏給出的字符串提示,程序會對系統造成一些危害行爲,這對後面的彙編分析中會提供更多的幫助信息。
有些時候程序中的字符串被混淆加密了,此時只能先靜態分析一些還是行爲,接着在動態調試階段來獲取解密的內容。
靜態分析總結
在平時的分析過程中,尤其是靜態分的過程中要足夠細心的去搜集更多的信息,能夠從靜態分析中獲取程序的一些行爲特徵,嘗試理解程序的行爲並做大膽的猜測,之後在動態調試階段去做針對性的驗證實際分析的結果,可以加深對程序的理解。當然很多時候分析的時候都不全是很簡單的就能完成的,可能靜態分析階段就被卡住了,例如程序可能被壓縮加密,也可能被運行時修復(IAT)等,這些都是針對性的去做處理,沒有什麼東西是一蹴而幾的,需要不斷的做,去總結,然後一次次的失敗一次次的再來,或許這就是很多人說的經驗吧。