二進制程序分析
分析惡意軟件的第一步是收集二進制程序在主機上執行的行為事件,研究人員根據這些行為大體形成一個思路來描述惡意軟件的功能。
這包含應用釋放或者從互聯網下下載的文件,寫入什么樣的注冊表、訪問了什么網絡地址,修改讀寫本地的什么文件等等。那么研究人員通過行為會確定惡意樣本的類型。通常類型如下:
- 后門:沒有通過合法身份驗證的方式鏈接到目標計算機的通道。
- 僵尸網路:采用一種或多種傳播手段,將大量主機感染bot程序(僵尸程序)病毒。
- 勒索軟件:通過騷擾、恐嚇甚至采用綁架用戶文件等方式,使用戶數據資產或計算資源無法正常使用,并以此為條件向用戶勒索錢財。
- 下載者:自動下載病毒的程序。
- 間諜軟件:鍵盤記錄器,截圖信息記錄等工具。
- Rootkit:啟發式病毒,操作系統、內核層面的病毒隱藏、執行的方案。
- 恐嚇軟件:恐嚇用戶安裝惡意程序。
- 蠕蟲:無須計算機使用者干預即可運行的獨立程序,它通過不停的獲得網絡中存在漏洞的計算機上的部分或全部控制權來進行傳播。
- 無文件病毒:在內存中執行的病毒,并不使用文件作為載體。
- APT:高級可持續攻擊。
靜態分析
靜態惡意軟件分析是指在不運行PE/ELF文件的情況下對其進行分析。首先通過分析PE/ELF頭結構,其中提供了操作系統加載和執行文件的有價值的信息(例如支持的系統版本、內存布局、動態鏈接庫、靜態鏈接庫、導出和導入表、資源和線程數據等等)。
研究員需要初步通過惡意文件的功能、證書、編譯日期等基本信息來確認文件是否為惡意文件。然后創建控制流分析惡意文件的邏輯進行進一步的調查。與高級靜態分析相比,這種分析對于混淆加固的樣本是無效的。
我們下面將介紹用于執行靜態惡意軟件分析的不同工具和方法。
靜態分析方法—Virus Total
將樣本上傳到VirusTotal,引擎會與各種反病毒程序的檢測結果進行交叉比對,產生綜合報告。同時還提供文件的信息,如SHA256, MD5,文件大小,簽名信息,導入導出表等。

靜態分析方法—字符串分析
從二進制文件中提取可讀的Ascii和Unicode字符。但并不是所有找到的字符串都會被程序使用,黑客會使用虛假字符串來擾亂取證,研究人員需要辨明那些是有用的字符串。
利用XSearch搜索字符串。利用grep -rn/strings命令搜索字符串。利用IDA、apktools等特別工具搜索字符串。


當然如果需要去混淆、降噪等操作。推薦flare-floss:
https://github.com/fireeye/flare-floss
靜態分析方法—查殼工具die
“DIE”是一個跨平臺的應用程序,除Windows版本外,還有適用于Linux和Mac OS的可用版本。許多此類程序(PEID,PE工具)允許使用第三方簽名。不幸的是,這些簽名只能通過預設掩碼掃描字節。
Detect It Easy完全開放簽名架構。可以輕松添加自己的算法來檢測或修改已存在的算法。這是通過使用腳本來實現的。腳本語言與JavaScript非常相似,任何了解編程基礎知識的人都會很容易理解它的工作原理。可能有人可能會決定腳本工作非常緩慢。
事實上,腳本運行速度比編譯代碼慢,但是,由于腳本引擎的良好優化,這不會造成任何特別的不便。開放式架構的可能性彌補了這些限制。目前該程序定義了以下類型:
- MSDOS可執行文件MS-DOS
- PE可執行文件Windows
- ELF可執行文件Linux
- MACH可執行文件Mac OS
- 文本文件
- 二進制文件

靜態分析方法—PE結構工具Cff
CFF Explorer是一款優秀的PE資源工具,使用CFF Explorer可以方便地查看和編輯PE(EXE/DLL)資源,類似PE資源工具有eXeScope、ResHacker等。比如下圖分析到文件的unix時間。

我們也可以通過分析段的標題,來判斷文件是否存在加殼現象(類似die)。我們排除常規名稱(.text .data .rsrc等),剩下的,例如本例UPX1。我們可以判斷文件通過UPX加殼的。
靜態分析方法—ELF結構處理命令readelf
readelf命令,一般用于查看ELF格式的文件信息。選項 -h(elf header),顯示elf文件開始的文件頭信息。

選項 -l(program headers),segments 顯示程序頭(段頭)信息(如果有數據的話)。

選項 -S(section headers),sections 顯示節頭信息(如果有數據的話)。

選項 -s,symbols 顯示符號表段中的項

選項 -d,dynamic 顯示動態段的信息。

靜態分析方法—ELF結構處理命令ldd
ldd的作用是打印可執行檔依賴的共享庫文件。

靜態分析方法—PE/ELF/DEX結構處理工具010editor
點擊Templates選項—Online Template Repository下載指定格式的模板
按F5,即使用對應的模板查看

靜態分析方法—Restorator
Restorator 主要用于查看、反匯編和修改 Windows 32/64 位可執行的資源。

靜態分析方法—逆向篇(IDA)
反匯編可以對可執行文件綜合理解,并了解其運作機制。工具會以匯編代碼、偽代碼的形式展現程序,并自動分析理解函數執行過程,甚至可以展示出代碼執行流程。
使用IDA進行惡意軟件分析可以單步謹慎的分析程序執行事件,熟練及了解系統原理的情況下,并不會感染主機本身。而IDA的調試功能,強烈建議研究人員在獨立的虛擬化系統中執行。
IDA在基本視圖中顯示匯編代碼(地址、指令、參數和注釋)或以邏輯流程圖的形式繪制匯編代碼。邏輯的劃分基本上基于跳轉、條件和循環。邏輯塊之間的關系用箭頭表示。圖形視圖僅對完整函數識別的情況下可用。通過按空格鍵可以改變視圖。

在IDA中打開可執行文件后,第一步是熟悉可執行文件的基本屬性——字符串、函數、導入、導出表、name。所有的都可以在菜單’視圖’ > ‘打開子視圖’ > ‘字符串’(函數,導入,導出和name他們在同一位置)

字符串:在可執行文件中出現的字符串(文本)表示列表,可以幫助更好地理解惡意樣本的內容,例如IP地址、URL域名以及網絡api行為。
導入函數:從外部鏈接庫加載并且樣本文件使用的API函數列表。API函數是一種被定義的代碼,程序無需在其代碼中實現即可調用它。觀察導入函數列表中,可以確定可執行文件如何與操作系統、資源(文件系統、注冊表、網絡、加密等)之間交互的關鍵點。
導出函數:樣本文件提供給外部環境的函數列表。其他程序可以調用和執行。惡意程序對外提供的方法在這里可以被發現。
函數:可執行程序中包含的所有函數的列表。IDA識別標準庫函數。
在分析惡意樣本的過程中,通常建議重點關注網絡、加解密和文件操作。例如,對導入函數‘ InternetConnectA ’的步驟:
- 雙擊(或單擊并按ENTER)程序視圖轉向到該引入函數聲明的地址。
- 單擊函數名并按“x”(或右鍵單擊>“跳轉到xref“),顯示一個包含所有引用該函數的表。
- 雙擊將視圖切換到具有InternetConnectA功能的代碼段,分析上下文。(如圖)

“InternetConnectA”通過CALL訪問。根據微軟提供的官方文檔,“InternetConnectA”功能有8個參數。每個參數是通過PUSH指令按順序分配給函數的。IDA能夠識別已知函數的參數,并通過注釋標記它們,這有助于分析人員更好地定位代碼并理解代碼。如上圖所示(圖D),參數由’ PUSH ‘指令以相反的順序將參數推入堆棧——‘ dwContext ’(函數的第八個參數)成為被推入的第一個參數。
相反,‘ hInternet ’(函數的第一個參數)被推為最后一個參數,這是由于CPU的制式決定的。參數’ dwService ‘決定了服務的類型:’ nServerPort ‘中的值50h表示使用標準TCP端口80(50的十六進制等于 80的十進制);’szServerName’的內容為’ C2.malware.info ‘,這就是黑客服務器的域名。
人工分析代碼分析是一個非常緩慢的過程,建議不要從一開始就逐個指令地分析整個代碼。更好的方法是識別有價值的代碼塊(基于字符串、導入和函數),回溯上下文并徹底分析它們。
通過使用IDA插件,可以容易地擴展IDA功能。編寫插件也是為了自動化分析工作,插件可以用c++、python編寫。插件可以完全訪問IDA數據庫(idb),可以檢查或修改(patch)程序或使用讀寫功能。付費擴展插件(例如hexx - rays反編譯器),可以F5一鍵將匯編代碼編譯成偽代碼。最廣泛使用的插件是IDAPython,它支持用Python為IDA編寫自定義腳本。
靜態分析方法—逆向篇(Ghidra)
Ghidra是由美國國家安全局(NSA)研究部門開發的軟件逆向工程(SRE)套件,用于支持網絡安全任務。

A - 菜單 B - 段 C - 符號目錄 D - 匯編 E - 反匯編
對于安全研究人員來說,能夠顯示類似于流程圖(代碼塊、分支、條件等)的代碼結構的圖形解釋,能夠更好地理解代碼執行流程及算法。使用功能,需要點擊位于主面板中的“顯示功能圖”圖標”。

Ghidra通過其強大的反編譯器超越了IDA免費版本。雖然IDA也提供了反編譯器功能,但這只包含在其商業版本中,并作為需要支付額外費用。
反編譯器將匯編代碼轉換為高級編程語言,代碼結構良好,算法的邏輯更加明顯。這大大減少了分析工作的時間。當鼠標移動到匯編代碼或C代碼時,光標會在兩個窗口中同時用綠色高亮顯示相同的代碼部分,如圖所示。


動態分析
與靜態分析不同,動態惡意程序分析發生在代碼運行時。我們建議使用虛擬化的環境來進行動態分析的過程。進一步,逆向工程師需要了解不同架構、制式、語言的指令調試方法(調試器)才能真正的搞清楚惡意程序的原理。
行為分析方法—Process Monitor
使用Process Monitor可以對系統中的任何文件和注冊表操作同時進行監視和記錄,通過注冊表和文件讀寫的變化,對于幫助診斷系統故障或是發現惡意軟件、病毒或木馬來說,非常有用。
該軟件具有針對微軟操作系統產品的行為監視、捕獲和過濾多個工件的能力,具體如下:
- 監視進程和線程的啟動和退出,包括退出狀態代碼
- 監視映像 (DLL 和內核模式驅動程序) 加載
- 捕獲更多輸入輸出參數操作
- 非破壞性的過濾器允許你自行定義而不會丟失任何捕獲的數據
- 捕獲每一個線程操作的堆棧,使得可以在許多情況下識別一個操作的根源
- 可靠捕獲進程詳細信息,包括映像路徑、命令行、完整性、用戶和會話ID等等
- 完全可以自定義任何事件的屬性列
- 過濾器可以設置為任何數據條件,包括未在當前視圖中顯示的
- 高級的日志機制,可記錄上千萬的事件,數GB的日志數據
- 進程樹工具顯示所有進程的關系
- 原生的日志格式,可將所有數據信息保存,讓另一個 Process Monitor 實例加載
- 進程懸停提示,可方便的查看進程信息
- 詳細的懸停提示信息讓你方便的查看列中不能完整顯示的信息
在下圖中,使用Process Monitor過濾功能并應用樣本名稱為malware.exe的過濾器,分析人員執行樣本后根據其引起的事件得到結論。

本例檢查事件之后,分析人員了解了惡意程序試圖做過的惡意行為。在下圖中,可執行程序“malware.exe”正在讀取注冊表項、創建文件和啟動網絡連接。
檢查惡意軟件在主機中的行為,會對研究人員回溯病毒的來源、傳播有重大好處。然后研究人員在進行IDA靜態惡意軟件逆向分析。

當你有多個事件要處理時,合適配置過濾器是非常重要的,微軟官方提供了過濾器Malware.pmf,它預制了基本易懂的過濾選項。

行為分析方法—Strace
strace是一個可用于診斷、調試和教學的Linux用戶空間跟蹤器。我們用它來監控用戶空間進程和內核的交互,比如系統調用、信號傳遞、進程狀態變更等。在運維的日常工作中,故障處理和問題診斷是個主要的內容,也是必備的技能。strace作為一種動態跟蹤工具,能夠幫助運維高效地定位進程和服務故障。它像是一個偵探,通過系統調用的蛛絲馬跡,告訴你異常的真相。

strace可以監控大多數系統調用、參數信息、返回值信息等。研究人員可以通過這種調用獲取到惡意程序中有效的行為信息,并加以判斷。
行為分析方法—Process Explorer
Process Explorer是一個功能強大的進程管理工具,用于監控正在運行的進程。運行的進程以樹狀結構顯示,該結構顯示子進程和父進程的關系等等。進程資源管理器圖形界面和顏色代碼如下所示:

Process Explorer特點:
- 默認的樹視圖顯示進程之間的層次關系;
- 精確的進程CPU使用率;
- 可以添加托盤圖標來監控CPU,磁盤,GPU,網絡等;
- 識別哪個進程加載了DLL文件;
- 識別進程中的窗口信息;
- 識別任何進程中的其他信息,包括線程,內存使用,句柄,對象等等;
- 可以殺死整個進程樹;
- 可以掛起一個進程,凍結它的線程;
為了快速查看系統和正在運行的進程,Process Explorer提供了一個選項,允許分析人員通過比對VirusTotal上的HASH值。例,在下圖中,用戶可以看到進程名“malware.exe”(它是“explorer.exe”的子進程)在70個檢測中存在61個風險,表明該應用程序很有可能是惡意的。
查看屬性窗口(用戶雙擊打開),可以提供另一組有用的信息,例如,進程在哪個用戶下運行的、內存中的字符串、線程、惡意軟件正在發起的活動網絡連接和可執行文件在磁盤上的完整路徑等等。

網絡分析方法—Wireshark
網絡流量分析是惡意軟件分析的關鍵。查看網絡流量,分析人員可以發現哪些文件正在被竊取,C2服務器與惡意軟件是如何通信的,等等。
Wireshark是目前應用最廣泛的網絡協議分析程序之一,它可以從指定的網卡抓取網絡報文,也可以加載之前記錄的抓包文件顯示網絡流量。
在虛擬機上部署Wireshark或其他抓包軟件,帶有檢測機制的惡意軟件(見:動態分析方法-打補丁)能夠檢測到它正在被監視,緊接著隱藏其行為。因此,我們經常選擇在默認網關上運行Wireshark。此外,可以在交換機上設置SPAN端口,以發送在受害虛擬機端口上看到的所有網絡數據包的流量副本。

Wireshark選擇可用的協議列表。惡意軟件通信的協議可以被選擇,流量可以被捕獲。也可以設置協議過濾,以避免大樣本分析時造成的噪點問題。

Wireshark從病毒分析的角度保留有用的統計數據。使用Statistics選項卡列出全部連接會話。終端列表允許使用數據包的傳輸數量對IP進行排序,對話列表可以根據終端之間傳輸的字節數和它們的數據交換持續時間進行排序。這些信息可用于分析異常的網絡行為。

Wireshark中設置顯示過濾器有助于區分數據包。過濾選項種類繁多,有簡單的協議過濾器,如HTTP、DNS、FTP等,有可編程可自定義的過濾器。下圖示例顯示了一組可疑IP地址的HTTP流量,包含字符串’ exe ‘。您只需單擊“File - Export Objects - HTTP”就可以保存這些可疑的文件。通過對象列表,可以導出和保存流量中的所有對象。


Wireshark可以方便地查看有關主機的所有詳細信息、在網絡流量中傳輸的文件、證書等。甚至還有單獨的DNS查詢和會話列表,可以根據需要進行過濾。

網絡分析方法—iNetSim/FakeNet-NG
INetSim是一個基于linux的工具,分析師可以監控惡意軟件樣本的網絡行為,無需將其連接到互聯網上。


運行該工具后,左圖像顯示了INetSim模擬的所有服務,包括它們的默認端口。為了改變工具添加或刪除服務的配置設置,用戶必須修改文件“etc/inetsim/inetsim.conf”。在運行時,INetSim記錄所有入站/出站連接。雖然INetSim目前仍然是許多分析師的首選工具,但隨著FakeNet-NG的興起,分析師又多了一個用于惡意軟件分析的跨平臺工具,FakeNet-NG可以直接與所有在安全領域不斷出現的基于Python的信息工具進行集成。
沙箱分析—Cuckoo
測試的過程中需要限制樣本的影響,研究人員在沙箱解決方案中運行惡意軟件樣本。沙箱工具通常提供內存轉儲分析功能,因此可以更好地了解內存中發生的情況。
黑客知道,如果他們的惡意軟件樣本在虛擬機或沙盒中運行,病毒樣本會被輕易的執行、行為檢測或者自動化的逆向分析出來,黑客會選擇自我保護、偽裝。其實黑客與安全研究人員的沙箱之間的攻防戰爭,從來沒有結束過。
互聯網上有多種免費的沙箱解決方案,研究人員可以在上傳樣本并等待報告。其中最有名的是:
- malwr.com
- hybridanalysis.com
- any.run
- joesandbox.com
- cuckoosandbox.org
- sandbox.anlyz.io
- analyze.intezer.com
- threatbook.cn
Cuckoo沙箱被稱為安全圈領先的開源自動惡意軟件分析系統。研究人員可以自動分析Windows、macOS、Linux或Android下的任何惡意文件。沙箱可以在本地部署,并且需要一臺主機(管理終端)和多個沙箱客戶端(分析用虛擬機),客戶端數量取決于樣本數量以及服務器性能。Cuckoo沙箱的特點:
- 保留已刪除文件、記錄
- 轉儲惡意程序進程的內存
- 在多機器上并發運行分析
- 以PCAP格式存儲生成的網絡流量
- 遞歸監控新生成的進程
- 追蹤相關的API進行行為分析
- 獲取虛擬機的全內存轉儲鏡像
讓我們看一下cuckoo的系統架構:

其模塊化設計,Cuckoo可以作為一個獨立的應用程序使用,也可以集成到更大的框架中。可以通過web控制臺訪問,web控制臺如下圖所示:

在使用web控制臺將文件提交到沙箱之后,樣本會被執行,所有的活動都被記錄下來,并包含在最終的報告中。研究人員可以通過web控制臺訪問報告。Cuckoo沙箱有幾種報告格式,包括普通格式、MAEC(惡意軟件屬性枚舉和特征)格式。
動態分析方法—初識調試器
調試器看起來很像反匯編程序:兩者都以匯編方式顯示已檢查樣本的代碼,并提供類似的函數、字符串等列表。不同之處在于,調試器提供了對惡意代碼動態監視的能力,對內存、寄存器、堆棧進行深入調查。調試的好處是有機會運行代碼、實時中斷,并查看寄存器中的特定值、函數的參數及其返回值,有助于更好地理解代碼。開源調試器:WinDbg, x64dbg,gdb,adb。
當在IDA中分析可疑樣本時,’ internettwritefile ‘ API有’ 0x004010D5 ‘和’ 0x004010E4 ‘兩處調用,該函數通過網絡發送數據。函數的參數定義了目的鏈接(‘ hFile ‘),要發送的數據(‘ lpBuffer ‘),要發送的數據的長度(‘ dwnumberofbyteswrite ‘)。很明顯,地址為’ 0x004010E4 ‘的函數發送了’ \n ‘字符。但是之前的0x004010D5發送了什么我們并不知道。
這時候就需要動態調試。在x64dbg中打開可執行文件后,在地址’ 0x004010D5 ‘(在IDA中找到,函數被調用的地址)設置一個斷點:
- 右鍵單擊代碼區域,選擇“Go to”>“Expression”(或按CTRL+G)。
- 在對話框中填寫地址,然后單擊OK。
- 右鍵單擊> ‘ breakpoint ‘ > ‘ Toggle ‘(或按F2)設置所需地址的斷點。
- 斷點的地址用紅色突出顯示。

然后按F9(或菜單’ Debug ‘ > ‘ run ‘)啟用調試器來運行樣本文件。調試器到達斷點并停止。’ internettwritefile ‘發送的數據現在可以在堆棧區域中看到。在程序執行期間,與網絡和文件操作相關的API函數很有可能被多次調用(一個循環傳輸多個數據包,一個循環處理多個文件,一個文件的一行,等等)。

動態分析方法—符號訪問
在前面的示例中,敏感函數的地址是已知的,這告訴我們必須在哪里設置斷點。如果地址未知,則必須對函數及其交叉引用進行調查,x64dbg為此提供了內置特性:符號和模塊間調用。
要查看符號列表(被導入的外部函數),切換到“symbols”欄,并從所有模塊中選擇有用函數名(或按CTRL+N)。

通過右擊> ‘搜索’ > ‘當前模塊’ > ‘ Intermodular calls ‘會出現一個表,其中包含如何調用(“匯編”列)、在哪里調用(“地址”列)以及調用什么導入函數(“目標”列)的信息。可以通過按F2來中斷調用,在代碼區域中可以通過雙擊它們進行切換。同樣可以分析字符串出現的位置(在’ CPU ‘ > ‘右鍵點擊搜索’ > ‘當前模塊’ > ‘字符串引用’)

動態分析方法—去混淆
調試器還有助于處理混淆的、未編譯的腳本。下面的例子展示了一個模糊的jsp腳本’ malware.js ‘的分析。這個腳本共有10頁長,手動消除混淆是很困難的。

jsp文件需要由腳本解釋器執行。Windows有本地腳本引擎’ wscript.exe ‘,位于’ C:\Windows\System32\ ‘目錄下。這種混淆的惡意javascript腳本基本用于下載病毒并執行它。我們雖然不能確定具體惡意行為,但它最可能的最終目的就是試圖在操作系統中執行任意命令,因此模塊’ shell32.dll ‘(例如,函數’ ShellExecute ‘)需要被監控。
從調試器的角度來看,這意味著加載’ wscript.exe ‘,讓’ wscript.exe ‘來處理惡意的javascript文件,在’ ShellExecute ‘設置斷點,并在觸發時分析其上下文:
- 加載’ wscript.exe ‘ (‘ File ‘ > ‘ Open ‘ > ‘ C:\windows\system32\wscript.exe ‘)。
- 添加’ malware.js ‘作為參數(‘ File ‘ > ‘ Change Command Line ‘并添加惡意文件的路徑;例如”C:\Windows\system32\wscript.exe” C:\malware.js 。
- 切換到Breakpoints (面板>右鍵單擊> ‘ Add dll breakpoint ‘)并填寫 shell32.dll 。
- 執行并等待直到’ shell32.dll ‘斷點被觸發(如果觸發,意味著DLL及其符號被加載)。
- 切換到“Symbols”面板 > 在模塊中選擇“shell32.dll” > 過濾“Execute”函數并斷點。
- 切換回“斷點”面板,并從步驟4禁用DLL斷點(否則所有與DLL連接的操作都將被斷點,而不僅僅是需要手動斷點的功能)。
- 運行并等待一個’ Execute ‘斷點被觸發,以檢查堆棧內存中的參數

其中一個斷點在’ ShellExecuteExA ‘函數中觸發。該函數只有一個參數——指向“SHELLEXECUTEINFOA”結構的指針。要檢查它,右鍵單擊指針值> ‘ Follow DWORD in Dump ‘ > ‘ Dump 1 ‘。結構的第五項是要執行的文件。在’ Dump 1 ‘區域> ‘中右鍵單擊它,在Dump ‘ > ‘ Dump 2 ‘中跟隨DWORD,并通過右鍵單擊> ‘ Text ‘ > ‘ Extended ASCII ‘調整格式。
本例中,js執行了命令,啟動powershell腳本,從http://jblecsywt6925.cc/documents/下載文件‘ spy20.exe ‘,保存為’ temp.exe ‘并執行。

動態分析方法—打補丁
惡意程序使用特別的保護機制來防止被逆向。包括:反調試,虛擬化環境檢測,收集用戶網絡行為,代碼混淆,代碼加解密等。如果惡意軟件檢測到上述情況,它可以自行終止或改變其執行邏輯,以防被研究人員回溯。
研究人員可以通過打補丁來繞過這些檢測機制,并將其保存為一個新的可執行文件,可以在不受檢測機制影響的情況下進行分析。
案例:病毒防調試的一種方法,執行并判斷函數‘ IsDebuggerPresent ’的返回值,惡意軟件測試它是否在調試器存在的情況下運行。關閉防御機制的操作步驟如下:
1)在模塊間調用中確定’ IsDebuggerPresent ‘函數的位置(右鍵單擊> ‘搜索’ > ‘當前模塊’ > ‘模塊間調用’)并雙擊它。
在這個例子中,如果函數’ IsDebuggerPresent ‘(位于’ 0x0040111E ‘地址)返回Boolean型 ‘ true ‘(這意味著可執行文件正在調試器中運行),則函數’ exit ‘(位于’ 0x0040112A ‘地址)被調用,將終止其進程。繞過這個安全檢查,只需將’ exit ‘函數調用和之前的’ PUSH 1 ‘指令重寫為’ nop ‘,如下所示。’ nop ‘指令的目的是CPU不做任何操作(nop = no operation)。
2)在要替換的行上做標記并按空格鍵(或 ‘ Assemble ‘行上右擊)。
3)將出現一個帶有原始指令的窗口。用必需的指令(在本例中是’ nop ‘)重寫原始指令,然后單擊OK。
對所有要修改的行重復步驟3 、4。
4)完成所有修改后,按“CTRL + P”(或右鍵單擊>“Patches”)。
5)將展示一個包含所有被更改的內容的窗口。點擊“Patch File”并將其保存為新文件。

動態分析方法—創建規則(Misp & Yara)
Yara規則基于文本或二進制模式創建。每個規則包含一組字符串描述和一個確邏輯表達式。在某些情況下,字符串描述的部分可以省略,但邏輯表達式條件的部分是必要的。
以下是一個Yara規則的案例:
在左邊的例子中,當所有二進制文件都包含文本字符串’ malwaredomaine.com ‘或以下十六進制字符串’ A2 24 ?? D8 23 FB ‘,將觸發名為’ FirstYaraRule ‘的Yara規則。十六進制字符串內的問號表示通配符(未知且可以匹配任何內容的字節)。用于Yara掃描的測試樣本可以到如下鏈接下載:
https://github.com/virustotal/yara/releases/tag/v4.0.0

執行掃描時使用的語法如下:
https://yara.readthedocs.io/en/v3.4.0/commandline.html
yara [OPTIONS] RULES_FILE TARGET
除了創建自己的一套Yara規則外,研究員還可以從第三方查看以下一個Yara規則資源:
Florian Roth repository:https://github.com/Neo23x0/signature-base/tree/master/yara
GNU-GPLv2:https://github.com/Yara-Rules/rules
awesone-yara:https:https//github.com/InQuest/awesome-yara
所有編寫的Yara規則,都可以上傳、使用,然后在MISP平臺上共享。
MISP是一個開源的威脅情報平臺,被各大組織使用。研究員可以將接觸到的規則添加到他自己的MISP實例中,并根據數據庫中已經存儲的其他事件的數據,得出相關性匹配。下圖根據MISP平臺上傳的事件與數據庫中的其他事件進行了關聯。

通過MISP平臺共享信息的措施非常重要,最重要的是可以排除已被分析的樣本。
關于MISP平臺的更多信息可以在以下網站找到:
https://www.misp-project.org/index.html
總結
本手冊涵蓋了許多工具及其用法。有些工具具有非常相似的功能,還存在手冊中沒有列出的其他替代方案,這就需要讀者的見仁見智了。
靜態代碼分析是一個非常耗時的過程,建議將它與動態代碼分析結合使用,以提高效率。最理想的方法是從基本的靜態和行為分析開始,然后收集前兩個階段的結論繼續進行組合(靜態和動態)代碼分析。進行逆向分析時,研究人員必須建立一個與工作/家庭網絡物理隔離的虛擬化環境,以避免損失。
惡意二進制軟件分析的結果可以作為安全事件進一步調查取證的輸入物,也可以結合自身的沙箱、網絡防火墻等等,補充其薄弱的規則,以防止未來發生相同或類似的攻擊。