xAnalyzer是 @mrexodia 的 x86/x64 x64dbg 偵錯器的插件。該插件基於 @mrfearless 的 APIInfo Plugin,但進行了一些改進和添加。 xAnalyzer能夠對偵錯應用程式的靜態程式碼進行各種類型的分析,為使用者提供更多額外資訊。該插件將進行廣泛的 API 函數調用檢測,以添加函數定義、參數和數據類型以及任何其他補充信息,這些信息與您使用 OllyDbg 分析引擎獲得的信息非常接近,以便使其更易於理解用戶正在開始調試任務之前。
一些主要功能和改進包括:
擴充函數呼叫分析(來自近 200 個 DLL 的超過 13,000 個 API 定義)
定義和通用函數、參數、資料類型和附加偵錯資訊識別。
自動循環檢測。
使用者維護的定義文件
在 xAnalyzer 之前
xAnalyzer之後
在此下載最新版本的二進位文件
下載最新版本的x64dbg
解壓縮apis_def.zip
將xAnalyzer.dp32/xAnalyzer.dp64和apis_def資料夾複製到x64dbg中各自的插件目錄中
在 x64dbg 主視窗中的「 Plugins 」功能表下或 Disasm 視窗的二級選單中尋找「 xAnalyzer 」項目
xAnalyzer 有一些選項可供選擇,以便更個性化使用它的體驗,以便在您需要時以您想要的方式使用它。外掛選項如下:
自動分析:當此選項開啟時,外掛程式將在每次載入到偵錯器時到達入口點時對可執行程式碼啟動全自動分析。透過使用此選項,您可以在 x64dbg 上獲得更接近 OllyDbg 初始分析行為。
擴充分析:此選項將強制 xAnalyzer 對偵錯的可執行檔的整個程式碼部分進行擴充分析。警告!透過啟用此選項,分析過程可能需要更多的時間和資源才能完成,x64dbg 也可能會使用大量 RAM 內存,具體取決於部分的大小以及添加到調試的可執行靜態反彙編的額外數據量
分析未定義的函數:透過選擇此選項,xAnalyzer 將對 api 定義檔中未定義的所有 API 呼叫/函數使用通用分析和參數類型,並且還會呼叫如下內容:
CALL {REGISTER}
CALL {REGISTER + DISPLACEMENT}
CALL {DYNAMIC_POINTER}
使用可執行檔時,xAnalyzer 有一些指令和選單選項可供選擇:
透過在 x64dbg 的反彙編視窗中選擇幾個指令並選擇此選單,將對所選行進行快速分析。您也可以使用指令xanal 選擇來啟動此選項,甚至可以在 x64dbg gui 中為其設定自己的熱鍵。
如果您正處於某個函數的中間,您可以使用此選單項目來分析整個函數並且僅分析該函數。以您選擇的單一指令作為參考,xAnalyzer 將從那裡處理程式碼區塊內的所有行。您也可以使用指令xanal 函數來啟動此類分析,甚至可以在 x64dbg gui 中為其設定自己的熱鍵。
該命令將對整個模組啟動全面分析。此功能考慮了擴展分析選項來確定要使用的分析深度。您也可以使用指令xanal 模組來執行它,甚至可以在 x64dbg gui 中為其設定自己的熱鍵。
在這些情況下,所有這些選單都會做出與先前命令相反的操作。如果您想刪除程式碼某些部分或整個執行檔中的分析額外資訊(如果需要)。您也可以使用以下命令: xanalremove選擇/功能/模組
xAnalyzer 有一個可擴展的 API 定義檔案系統,這些檔案位於資料夾「api_def」和「api_def/headers」中,其中應包含具有 .ini 結構和規範的所有檔案:
「 filename 」:這是 API 函數所在模組的名稱。
「 filename.h 」:這是包含類型資料(標誌和枚舉)相關資訊的標頭
「 .api 」副檔名:指定它是一個定義文件,不會辨識其他副檔名(kernel32.api、shell32.api 等)
所有這些 ini 檔案都包含插件的重要訊息,例如函數原型、參數類型等。這些文件中的單一條目將類似於:
文件 user32.api
[MessageBox]
1=HANDLE hWnd
2=LPCTSTR lpText
3=LPCTSTR lpCaption
4=[MessageBoxType] uType
ParamCount=4
Header=shell.h.api;
@=MessageBox
文件 shell.h.api
[MessageBoxType]
TypeDisplay=UINT
Base=UINT
Type=Flag
Const1=MB_ABORTRETRYIGNORE
Value1=0x00000002
Const2=MB_CANCELTRYCONTINUE
Value2=0x00000006
Const3=MB_HELP
Value3=0x00004000
Const4=MB_OK
Value4=0x00000000
Const5=MB_OKCANCEL
...
括號之間的任何參數都意味著這是一個特定的資料類型(枚舉或二進位標誌),並且這將在鍵“ Header ”中指定的正確 .h 頭檔中定義。
至於頭文件,方案幾乎相同,只是有幾個按鍵,例如「 TypeDisplay 」。這指定了要在 dbg 註釋中顯示的正確資料類型,然後它是“ Base ”,它將指向主條目使用的基本資料類型,如果有連結的資料類型,這可能位於括號之間,如下所示出色地。 「 Type 」鍵是資料結構的類型,它可以是「Flag」或「Enum」。最後所有的變數名稱和值都出現了。
如果您發現 xAnalyzer 未偵測到或未正確偵測到某個 API 呼叫定義,則可能表示它不存在於定義檔中或定義不正確,因此在這種情況下,可以進行新增或修改以包含任何缺失的函數或參數,只要遵循相同的結構,就可以100% 可自訂。
函數中第一個帶有泛型參數的未定義呼叫將不會被處理,除非它之前有一個跳轉,因為沒有辦法知道要使用多少個參數而不非法使用函數序言指令。只有記錄在案的呼叫才會在函數開頭或由跳到主持的未定義函數中處理。
一些「不常見」函數在跳轉之間有參數,因此根據插件的實際設計(函數參數之間沒有跳轉)這些呼叫將不會被處理,因為每次發現跳轉時堆疊中的指令都會被清理。
僅當滿足以下條件時,巢狀呼叫才能正常運作:
1-) 內部呼叫已定義
2-) 如果內部未定義呼叫所採用的堆疊參數不超過外部呼叫所需的參數
它僅偵測函數內部的循環(函數邊界 Prolog/RET)。如果函數的程式碼中間包含 RET,它將被偵測為函數結束,並且循環堆疊將被清除。
如果正在偵錯的可執行檔的名稱中有多個點,分析可能會失敗
內部有非條件跳轉的部分的循環檢測不正確(參見#7)
巢狀參數行(xAnalyzer 支援巢狀參數,但 x64dbg 目前不支援)
新增熵分析
流分析掃描代替線性(跡線模擬)
案例開關檢測
x分析器2.5.4
- 專案更新至VS2017
- 修正了處理涉及堆疊指標的參數指令時的問題(x64 版本)。
- 修正了涉及堆疊指標的不正確參數順序(x64 版本)。
- 修正了未定義函數參數識別的錯誤,該錯誤將重複暫存器作為不同的參數(x64 版本)
- 更改了未定義呼叫參數識別,預設最多只能預測 4 個未定義參數(x86 版本)
- 一些程式碼重構
x分析器2.5.3
-修正了較新版本的 x64dbg 中函數名稱的檢測
x分析器2.5.2
-使用目前選擇的 disasm 線代替 cip 進行模組分析
- 修改了一些插件條目的輸入
- 一些程式碼重構
-修改指令“xanal/xanalremove exe”為“xanal/xanalremove module”
x分析器2.5.1
- 修正了 mov 指令變更時的崩潰問題
x分析器2.5.0
- 刪除了 [EBP+/-] 指令作為可能的函數呼叫者參數
- 刪除了所有函數參數值的前綴“0x”,因為推斷的是十六進制
-修正了指標變數無法正確顯示為指標而是顯示為基本資料類型的參數
-新增了對堆疊指標使用(ESP)的識別作為函數呼叫的可能參數(x86)
- 在參數中新增了使用準確的資料類型名稱,而不是通用/基本資料類型名稱
- 新增函數智慧追蹤功能(智慧預測和識別間接函數調用,如:CALL {REGISTER}、CALL {POINTER})
-新增了函數指標的名稱作為參數(如果偵測到,將使用整個函數名稱,而不僅僅是位址)
x分析器2.4.3
- 新增了對 x86 上 MOV 指令的識別
- 添加了對帶有“Stub”後綴的函數的識別
- 修正了「自動分析」的錯誤(增加了更多EP檢查條件)
- 清除自動評論/自動標籤選項,現在預設選中
x分析器2.4.2
- 修正了 BoF 當參數標記註解超過 MAX_COMMENT_SIZE 時的問題
- 修正了定義位於第二個 .api 檔案中時的函數名稱搜尋錯誤
x分析器2.4.1
- 新增了新的熱鍵方案
- 新增了新選項來控制應刪除哪些先前的分析資料。 (這使得可以與 SwissArmyKnife 等地圖載入器外掛程式無縫協作)。
- 新增了新指令(舊指令已被棄用)
xanal Selection :執行選擇分析
xanal 函數:執行函數分析
xanal exe :執行整個執行檔分析
xanalremove Selection :刪除先前的選擇分析
xanalremove function : 刪除先前的函數分析
xanalremove exe :刪除先前的整個可執行分析
xanal help : 在日誌視窗中顯示一些幫助文本
- 修正了啟動時未啟動的自動分析(關閉 #18)
- 修復了各種 api 定義檔(關閉 #17)
x分析器2.4
- 新的和改進的 API 定義文件,方案略有修改(來自近 200 個 DLL 的 13,000 個 API)
- 使用的每個 API 定義參數的符號識別系統(1000 多個枚舉資料類型和 800 多個標誌)
- 識別參數資料類型(BOOL、NUMERIC、NON-NUMERIC)
- VB“DllFunctionCall”存根檢測
- 作為參數傳遞的字串現在更乾淨(調試器註釋現在已刪除地址部分)
- 執行摘要新增至日誌視窗
- 由於與 x64dbg 存在一些衝突,熱鍵功能被刪除(將合併到未來的版本)
- 修復了各種錯誤
x分析器2.3.1
- 修正了啟動「分析選擇」功能表並選擇單行時導致突然 dbg 異常的錯誤(感謝@blaquee)
- 在載入外掛程式之前檢查定義資料夾「apis_def」和定義檔案是否存在於其中
- 將熱鍵變更為用於選取的 Ctrl+Shift+X 和用於功能的 Ctrl+X
x分析器2.3
- 新增了選項「分析未定義的函數」。 (預設關閉,不分析定義檔中沒有的任何內容)
- 新增了選項「自動分析」(預設為關閉,在偵錯可執行檔案的 EP 上啟動時進行分析)
- 新增「分析選擇」功能(對選定的指令進行分析,支援多個選定的呼叫)
- 新增了「分析函數」功能(從所選位址自動發現和分析目前函數)
- 從選擇/函數/可執行檔中新增了「刪除分析」功能
- 新增了命令快捷方式
- 新增了新圖標
- 新增了將配置儲存到 .ini 文件
- 新增了十六進位參數值的大寫
- 重組功能「分析可執行檔」(對目前可執行檔進行全面分析)
- 重組菜單
- 新的「關於」對話方塊現在顯示版本號碼以追蹤更新
- 一些小錯誤修復
- 修復並合併了一些API定義文件
- 速度和穩定性改進
x分析器2.2
- 新增了分析進度指示器
- 新增了新的分析深度模式
-現在僅在沒有備份資料庫的情況下才執行自動分析
- 錯誤已修復
x分析器2.1
- 未定義函數和內部子函數的通用參數
- 智慧函數註解和參數(僅處理堆疊上帶有參數的函數)。這允許 xAnalyzer 透過僅使用實際參數處理和註釋這些函數來更清晰地查看程式碼
- 使用方案 CALL -> DYNAMIC_MEMORY -> API 偵測間接函式呼叫
- 使用方案 CALL -> REGISTER/REGISTER + DISPLACMENT -> API 偵測間接函數調用
- 使用方案 CALL -> JMP -> JMP -> API 偵測間接函數調用
- 自動循環檢測
- 修復了未成年人的錯誤
- 代碼重新排列
x分析器2.0
- 支援 x64 位
- 支援 x64 位元中的 API 呼叫參數順序更改
- 支援API呼叫中的PDB檔案額外訊息
- 支援直接/間接API調用
- 支援靜態API函數呼叫主模組程式碼
- 修正了定義檔中幾個錯誤的 API 呼叫參數順序。現在可以正確檢測和評論更多呼叫
- 一些改進和更好的編寫程式碼
- 解決了各種錯誤
x分析器1.2
- 更新了API的定義文件
- 新增了對 vc6+ 可執行檔的支持
x分析器1.1
- 修正了因為在迴圈中使用 BASIC_INSTRUCTION_INFO 結構之前/之後未正確清理 BASIC_INSTRUCTION_INFO 結構而未在 VC++ 執行檔上顯示 API 資訊的問題
- 新增/更新了 API 的定義文件
- 錯誤已修復
x分析器1.0
- 初始版本
歡迎各種形式的貢獻,不僅可以作為 PR,還可以作為錯誤報告、文件等。
請記住以下幾點:
感謝您使用 xAnalyzer 外掛...祝大家逆向快樂!