REA 與 Ghidra:哪種逆向工程流程更適合?
從任務、輸入、輸出、手動控制、設定要求,以及透過 REA 使用 Ghidra 的方式,比較 REA 和 Ghidra。
本頁更新內容
- — 發布附來源的社群案例、實用指南,並明確證據的侷限。
希望直接探索和編輯原生二進位分析專案時,使用 Ghidra;希望程式設計代理或 CLI 調查軟體並返回附證據的發現時,使用 REA。REA 可以把 Ghidra 作為原生分析提供者,因此兩者可以成為同一流程的一部分。
這是獨立社群比較。REA 儲存庫和 Ghidra 儲存庫是瞭解目前功能和要求的一手來源。
REA 和 Ghidra 有什麼區別?
Ghidra 是軟體逆向工程框架,提供反組譯、反編譯、圖表、腳本,以及互動式或自動化分析。Ghidra 自身的分析環境讓分析者直接控制調查。Ghidra 官方 README介紹了處理器、可執行格式和擴充套件支援。
REA 是涵蓋多類目標的 MCP 伺服器和 CLI,包括原生二進位檔案、JavaScript/Electron 應用、瀏覽器頁面和託管組件。程式設計代理呼叫 REA 工具,獲取發現和侷限,再決定下一步檢查什麼。深度原生分析時,REA 連線到受支援的 Ghidra、Hopper 或 IDA 安裝。REA 原生分析指南解釋了這種提供者關係。
| 你需要什麼? | 更合適的起點 | 輸入 | 輸出或優勢 |
|---|---|---|---|
| 手動追蹤二進位函式和圖表 | 直接使用 Ghidra | 支援的二進位檔案 | 完整互動式分析環境及直接專案控制 |
| 詢問代理某個原生功能為何如此執行 | REA 加受支援的原生提供者 | 二進位檔案及具體問題 | 代理引導的發現、證據和解釋 |
| 長期保留並完善分析專案 | 直接使用 Ghidra | 匯入的程式及分析者的修改 | 自主控制的持久專案流程 |
| 檢查 Electron 模組或 IPC 路徑 | REA 的 JavaScript 流程 | 應用資料夾或 ASAR | 無需原生引擎即可獲得模組、關係和原始程式碼位置 |
| 用腳本執行可重複的原生分析 | 兩者皆可,取決於所需控制程度 | 二進位檔案及分析腳本或 CLI 請求 | Ghidra 腳本或 REA 結構化 CLI 結果 |
什麼時候 Ghidra 更合適?
當工作依賴持續的視覺化探索、細緻的分析者修改、自定義腳本或持久程式資料庫時,直接選擇 Ghidra。Ghidra 原生介面直接呈現分析專案。有經驗的分析者可以檢查指令和圖表,無需將每一步操作轉換為代理請求。
透過 REA 使用 Ghidra,並不會把所有 Ghidra 功能都開放到 MCP。REA 提供者文件介紹了已驗證操作和主機限制。REA 文件中的無介面流程使用臨時專案,不會開啟你已有的使用者專案。如果需要維護已有專案,應優先使用 Ghidra 直接介面。
Ghidra 也有自己的自動化和腳本流程。稱 Ghidra 只能手動使用並不準確。REA 的區別在於跨目標型別共享代理和 CLI 介面,而不是獨佔自動化能力。
什麼時候 REA 是更合適的起點?
當具體問題需要從檢查進一步走向實作時,REA 很有用。例如,代理可以調查某項計算、定位相關指令和參照、解釋規則,再編寫一個小型實作供你測試。代理的結論仍需與原始行為核對。
官方 DX-Ball 案例研究從聲音呼叫追蹤到位置轉聲像輔助函式,並用 C 重建該計算。專案報告了 3,205 個原始 x86 測試使用案例,以及全部 63 個編譯函式位元組一致。這些結果只屬於該具體演示,不能證明 REA 的總體成功率,也不能證明其效能優於 Ghidra。
REA 還提供原生反編譯之外的流程。對於 Electron 應用,靜態 JavaScript 分析無需啟動 Ghidra 即可識別模組和 IPC 關係。當調查涉及應用打包、JavaScript 和部分原生元件時,REA 是方便的入口。REA 目標表列出了各自必要條件。
如何透過 REA 使用 Ghidra?
安裝 REA 提供者文件支援的 Ghidra 版本和 JDK,再設定 REA 使用該安裝。REA 設定可以記錄已核實的現有路徑,但不會替你下載或安裝 Ghidra 或 Java。官方設定指南包含最新設定說明。
不要假設最新 Ghidra 發布版會自動相容已安裝的 REA 包。Ghidra 自身目前版本的要求與 REA 測試過的提供者範圍用途不同。截至本文日期,REA main 分支安裝指南描述了 Ghidra 12.1.x 提供者檢查;選擇版本前應檢視該指南和已安裝伺服器的能力。
設定提供者後,可執行針對性診斷:
npx -y rea-agents@latest doctor --provider ghidra --json
基於 Ghidra 的操作在首次查詢時可能需要匯入和自動分析時間。大型二進位檔案可能需要更長的提供者啟動期限,而 MCP 客戶端可能有自己較短的請求期限。診斷這種情況時,請參考文件中的期限與恢復指南。
哪些侷限會影響選擇?
REA 提供者支援因主機和目標而異。其 Windows Ghidra P0 範圍明確屬於實驗性支援,比 Ghidra 總體平臺和格式支援更窄。請閱讀 Windows 提供者指南,不要僅憑 Ghidra 能手動匯入某個檔案就推斷相容性。
REA main 分支也可能描述比 @latest 安裝的 npm 包更新的功能。某個套件版本能執行,並不代表 main 分支的每項操作都可用。請檢查發布邊界以及已連線工具的 schema。
兩種流程都需要判斷。反編譯虛擬碼不是原始程式碼,間接行為可能仍無法解析,程式設計代理也可能誤讀正確證據。請結合相關指令、參照和受控行為檢查來確認重要結論。
關於 REA 和 Ghidra,大家常問什麼?
REA 能替代 Ghidra 嗎?
REA 可以將 Ghidra 作為引擎使用,並不替代其完整互動式環境。選擇適合任務的介面,也可以組合使用。
哪個工具免費?
REA 自有程式碼採用 MIT 授權條款。Ghidra 是開放原始碼專案,有其公佈的授權條款和第三方宣告。程式設計代理模型存取,以及 Hopper 或 IDA 等可選商業提供者,適用各自條款。參閱 REA 授權條款和 Ghidra 授權條款。
沒有 Ghidra 能檢查 JavaScript 嗎?
可以。REA 的靜態 JavaScript/Electron 流程使用 Node.js 和 npm,不使用原生反編譯器。應用中的原生擴充套件屬於獨立分析目標,有自己的要求。
新手應該先試哪個工具?
學習組合語言和手動二進位分析時,從 Ghidra 自身資料開始。學習以問題為導向的代理調查時,從 REA Notes 範例或我們的 REA 設定指南開始。更小的目標和可查核的問題,能讓兩種方式都更容易評估。