Pe文件靜態分析

Pe文件靜態分析能夠獲取到哪些信息

在分析一個樣本之前,通常會需要靜態分析,如何從PE文件格式中獲取到需要的信息就很重要。只有在靜態分析時對文件的一些佈局信息有了理解,例如是是否被加殼了(雖然可以用查殼工具,但是還是需要知道一些原理),文件時圖形化界面(GUI)還是命令執行程序(CUI)等信息的提取和掌握,分析時纔會更清晰要做什麼,做到心中有數。下面是在閱讀《惡意軟件分析實戰》第一章中的一些整理筆記,希望爲後續的學習和分析中提供一些基礎理論知識來支撐。

程序的基本信息特徵

採集程序的md5 sha1 sha-256的信息,之後到virutotal hybird anyrun等在線沙箱去做分析,查看一些分析報告的信息。這裏推薦使用hashmyfiles,如下

在這裏插入圖片描述
使用上述特徵到在線分析網站查找即可。如下是virutotal的查找結果
在這裏插入圖片描述

程序的編譯時間

使用PEView查看PEIMAGE_NT_HEADERS-->IMAGE_FILE_HEADER-->Time Date Stamp,如下
在這裏插入圖片描述
可以知道這程序是2018/01/21 Sun 00:27:26 UTC被編譯的,有些時候這個時間也不夠準確,不過這個也靠我們自己去判斷即可。有時候一個樣本的出現時間很早的話,很多查殺軟件都有了對應的特徵,如果再次出現表明此程序是一個變種樣本,值得窺探。

程序的子系統

程序的子系統是在IMAGE_OPTIANL_HEADER下的SubSystem字段中,通常主要分爲IMAGE_SUBSYSTEM_WINDOWS_GUIIMAGE_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)等,這些都是針對性的去做處理,沒有什麼東西是一蹴而幾的,需要不斷的做,去總結,然後一次次的失敗一次次的再來,或許這就是很多人說的經驗吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章