idapython讓生活變得更美好 第五部分

2022-07-30 12:24:12 字數 2050 閱讀 6109

我們繼續idapython讓生活更美好序列,這一部分我們解決逆向工程師日常遇到的問題:提取執行的內嵌**。 惡意軟體會用各種方式儲存內嵌可執行**。 有些惡意軟體將內嵌**加到檔案附加段,包括pe資源區段,或者存放在惡意軟體的緩衝區中。

當遇到這個情況,惡意軟體分析者可以有幾個選擇。可以動態執行樣本在寫入和提取的後面下斷點。或者,如果檔案儲存在資源段,可以使用一些工具比如cffexplorer 提取資源資料。在ida中可以高亮選取可疑的二進位制資料,然後右鍵儲存想要的提取的資料。

雖然這幾個方法都可以行,但是都有一些限制。自動化提取內嵌**可以節省分析者大量的時間。為了實現這個目的,我們會用到idapython的第三方鏈結庫元件'pefile'。這個特殊的新增會帶來一些挑戰:

我們必須在ida環境中用pip安裝第三方python鏈結庫

已經標識出了內嵌**

需要計算要提取的可執行**的大小

讓我們一次性的解決這些問題吧。

在ida中用pip安裝第三方python鏈結庫之後,如何讓其生效是乙個有趣的挑戰。如果不修改的話是沒有辦法載入第三方鏈結庫的,比如pefile中idapython解釋中會出現如下錯誤。

為了修正這個錯誤,我們必須將pip的'site-packages'目錄加到python的環境變數中。可以使用如下**實現:

為了找到惡意軟體包含的所有內嵌**,我們基於mz頭的已知字串對二進位制進行搜尋。分析者請確認已經勾選了'load resources'選項這樣才能夠讀取到作為資源儲存的所有資料。另外的,如果內嵌檔案包含在附加段中,為了在ida中能夠看到資料一定要勾選'manual load'選項。

現在我們已經有了ida中載入的必要資訊了,現在我們可以開始在pe32檔案中搜尋資料了。我們有好幾種方法可以實現,但我選擇搜尋所有mz頭中都會包含的靜態資訊,如下所示:

為了找到ida中所有的字串事件,我們可以使用迴圈呼叫findbinary()函式來尋找二進位制字串的每一次例項。**如下:

當在pe32檔案中尋找mz頭字串標識時,我們需要驗證'mz'字元存在於mz頭的開始處。由於我們之前找的字串在靜態偏移是固定的,我們只需要簡單的確定'mz'的已知偏移。

將上面的**組合到一起,來找到ida中所有的內嵌**。

為了確定找到的內嵌**的大小,我們將使用前面提到的python第三方pefile鏈結庫。這個鏈結庫可以解析各種可執行檔案頭,這樣我們就能夠計算pe檔案的大小了。為了實現這個目的,我們會在可選頭中加入'sizeofheaders'引數,連同每個段的'sizeofrawdata'字段。下面的**會讀出標識出的內嵌**的前1024位元組,用pefile解析這些資料,計算各個段的大小。

最後,我們可以使用這些大小值來提取可執行**資料然後寫入我們選擇的檔案中。

將這些組合到一起,我們將會得到下面的指令碼。

在惡意樣本中執行這個例子,將會得到下面的結果:

正如我們看到的,我們能夠在ida中自動提取pe檔案了。通過一些小修改,這個實現能夠應用到其他型別的檔案中。我希望這個教程能夠讓逆向工程師知道idapython能夠實現很多難以置信的功能。

讓管理變得更簡單(17)

首先簡單的統計一下,手工時代的各個流程環節需要用到哪些票據或者報表。一是採購用到訂單 採購執行單 入庫單 台賬樣本 記賬憑證 盤賬對賬單 二是財務需要做各類記賬憑證 總分類賬本 三大報表等 三是銷售流程中有訂單 銷售執行單 出貨單 記賬憑證 退貨憑證 盤賬對賬單等等。光是憑證單據都已經讓人感到眼花繚...

讓管理變得更簡單(5)

二.資訊化與現代管理 淺述企業的管理活動 價值活動是乙個企業所進行的在物質形態上和技術上都界限分明的活動,是企業賴以創造出價值的基石。把企業創造價值的過程分解為一系列互不相同又相互關聯的價值活動,其總和即構成企業的 價值鏈 價值鏈企業的價值鏈可以分為基本價值活動和輔助價值活動兩大部分。企業的基本價值...

Github 讓交友變得更簡單

文章同步到個人部落格,歡迎指導 前言github毫無疑問是乙個大型同 友 一般來說,github個人主頁無非是這樣 資訊量完全不夠,有木有 所以自己改造了一下自己的個人主頁 效果演示github 教程建立 github 同名倉庫 統計卡片github readme stats,統計語言 github...