 Provider 驗(yàn)證:Hopper、Ghidra 與 IDA 三條泳道如何跑端到端測試(完整指南))
REA 真實(shí) Provider 驗(yàn)證Hopper、Ghidra 與 IDA 三條泳道如何跑端到端測試完整指南【免費(fèi)下載鏈接】reaReverse engineer anything with agents, from app behavior down to native binaries.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/rea2/rea用逆向工具分析過別人程序的人大概都懷疑過同一件事反編譯結(jié)果到底可不可信函數(shù)列表是不是完整的偽代碼是不是真的由引擎生成會話關(guān)掉之后有沒有偷偷留下后臺進(jìn)程這些問題光看單元測試回答不了——mock 再漂亮也只是在對著一張紙考卷子。REA 的真實(shí) Provider 驗(yàn)證real provider verification就是為了解決這件事讓測試直接跑在已安裝的 Hopper、Ghidra、IDA 上用真實(shí)引擎的輸出來斷言把能啟動升級為結(jié)果可信。先說 REA 是什么一套面向 AI Agent 的逆向工程 MCP 工具集把應(yīng)用行為到原生二進(jìn)制的分析能力統(tǒng)一暴露給 Agent 使用。本文只講它的驗(yàn)證側(cè)——三條核心泳道各自查什么、跑之前要備什么、跑完之后報(bào)告里的字段怎么讀。三條泳道的分工與前置條件驗(yàn)證入口都集中在 package.json 的verify:*腳本里每條泳道先執(zhí)行build:cached構(gòu)建產(chǎn)物再啟動對應(yīng)的驗(yàn)證腳本最后落一份 JSON 報(bào)告報(bào)告只有清理動作全部完成后才會標(biāo)記為成功。命令驗(yàn)證對象前置條件入口腳本npm run verify:hopper已安裝的 Hopper 全流程Hopper 測試夾具verify:fixturesscripts/verify-real-hopper.mjsnpm run verify:ghidra解包好的 Ghidra 12.1.4GHIDRA_INSTALL_DIR 64 位 JDK 21JAVA_HOME或 PATHscripts/verify-real-ghidra.mjsnpm run verify:ida已有的 IDA Pro 與ida-pro-mcpREA_IDA_MCP_CONFIG指向注冊 JSON --targetscripts/verify-real-ida.mjs為什么不用 mockRE A 的測試分層是明確的證據(jù)強(qiáng)度從高到低依次是真實(shí) CLI/MCP 端到端工作流、生產(chǎn)邊界集成測試、真實(shí)生產(chǎn)方捕獲的黃金回歸。真實(shí) Provider 的聲明被強(qiáng)制歸入各自獨(dú)立的泳道不允許混進(jìn)普通單元測試?yán)锍鋽?shù)依據(jù)見 官方測試文檔。Hopper 泳道從夾具加載到干凈關(guān)閉的全程檢查這是三條泳道中覆蓋面最廣的一條驗(yàn)證過程覆蓋以下幾類行為夾具與目標(biāo)準(zhǔn)備。腳本加載三個(gè)夾具目標(biāo)——主目標(biāo)、次目標(biāo)、一個(gè)大型符號目標(biāo)——每個(gè)都帶 SHA-256 校驗(yàn)確保分析的是你以為的那個(gè)文件。工具目錄核對。MCP 會話里聲明的可用工具必須與服務(wù)端實(shí)際工具清單一一對應(yīng)多一個(gè)少一個(gè)都不放行。真實(shí)分析結(jié)果比對。list_procedures、read_bytes、xrefs、batch_decompile、analyze_function等操作逐個(gè)執(zhí)行輸出與帶標(biāo)準(zhǔn)答案oracle的 C 夾具逐條比對。注意這里比的不是格式對不對而是內(nèi)容是否和已知正確的引擎結(jié)果一致。目標(biāo)切換語義。從目標(biāo) A 切到目標(biāo) B 時(shí)文檔要被正確替換重復(fù)打開同一目標(biāo)不能產(chǎn)生重復(fù)文檔。這是會話狀態(tài)管理的常見翻車點(diǎn)。干凈關(guān)閉證明。結(jié)束后檢查四件事Hopper 自帶的 MCP 服務(wù)沒有在跑、與驗(yàn)證無關(guān)的 Hopper 實(shí)例沒被打擾、臨時(shí)會話目錄全部清掉、子進(jìn)程譜系歸零。任何一項(xiàng)不滿足腳本會先寫出帶失敗上下文的報(bào)告再退出方便你定位卡在哪一步。Ghidra 泳道現(xiàn)場編譯預(yù)言機(jī)25 個(gè)操作全部過一遍Ghidra 泳道的門檻在環(huán)境GHIDRA_INSTALL_DIR必須指向解包完成的Ghidra 12.1.4并提供 64 位 JDK 21。環(huán)境就緒后驗(yàn)證器會現(xiàn)場調(diào)用cc把一份版本化的 C 語言預(yù)言機(jī)源碼編譯成debug 版和stripped 版兩個(gè)原生目標(biāo)——標(biāo)準(zhǔn)答案和目標(biāo)同場生成不存在版本漂移的問題。驗(yàn)證內(nèi)容可以分為四層只讀操作全集共 25 個(gè)操作覆蓋清單、搜索、反編譯、匯編、調(diào)用/被調(diào)用、引用、CFG、類型恢復(fù)符號與邊界行為外部函數(shù)、解析后的 thunk、導(dǎo)出符號以及符號被 strip 之后引擎應(yīng)有的表現(xiàn)復(fù)雜控制流間接調(diào)用含無法靜態(tài)確定目標(biāo)的計(jì)算跳轉(zhuǎn)、多塊 CFG、有界的 P-code def-use 圖失敗路徑與資源管理取消請求、啟動超時(shí)、序列化并發(fā)、畸形目標(biāo)拒絕、進(jìn)程與項(xiàng)目清理。主力泳道之外還有一組擴(kuò)展開關(guān)verify:ghidra:cross-format覆蓋 AArch64 ELF / x86-64 PE / x86-64 Mach-O 三種跨格式目標(biāo)需要clang、LLD、lld-link另有verify:ghidra:switch、verify:ghidra:dos、verify:ghidra:nativeaot等各自獨(dú)立的場景。完整邊界與語義契約寫在 Ghidra Provider 文檔 里。IDA 泳道零安裝的三段式校驗(yàn)IDA 這條泳道有個(gè)鮮明特點(diǎn)它不裝任何東西。它復(fù)用的是你機(jī)器上已有的 IDA 和上游ida-pro-mcp服務(wù)REA 只負(fù)責(zé)把上游注冊 JSON 接進(jìn)自己的工具鏈。你需要做的準(zhǔn)備就兩步按 IDA 接入指南 寫好上游 MCP 注冊 JSON然后把路徑寫進(jìn)REA_IDA_MCP_CONFIG再帶--target 二進(jìn)制路徑運(yùn)行。之后驗(yàn)證器按三個(gè)階段推進(jìn)CLI 階段——用生產(chǎn) CLI 執(zhí)行rea function target procedure --provider ida --json斷言偽代碼與匯編非空、Evidence 結(jié)構(gòu)完整MCP 階段——在同一條 MCP 連接里完成open_binary、analyze_function、xrefs、字符串搜索等操作并確認(rèn) CLI 與 MCP 拿到的函數(shù)身份、偽代碼、匯編完全一致parity清理階段——attached 模式下驗(yàn)證 GUI 里打開的仍是原始輸入headless 模式下驗(yàn)證自建數(shù)據(jù)庫已從上游會話消失、私有工作區(qū)已被刪除。最后用 SHA-256 對比前后兩次摘要證明原始二進(jìn)制全程未被修改、也從未被執(zhí)行這一條會直接寫進(jìn)報(bào)告的checks里。驗(yàn)證報(bào)告四個(gè)字段讀懂結(jié)果每條泳道跑完都會打印 JSON 摘要建議養(yǎng)成先看這四個(gè)字段的習(xí)慣passed/cleanShutdown總體結(jié)論以及資源是否干凈釋放。Hopper 泳道里只要有一項(xiàng)資源沒清干凈這里會直接報(bào)錯(cuò)而不是靜默通過checks逐條列出已經(jīng)證實(shí)通過的項(xiàng)目例如 original binary unchanged and never executed每一條都對應(yīng)一次真實(shí)的 Provider 調(diào)用targets/targetHashes本次被分析的目標(biāo)路徑及其 SHA-256保證事后可以回溯當(dāng)時(shí)分析的到底是哪個(gè)文件verifier_run.process_lineage驗(yàn)證器自身的子進(jìn)程譜系觀測狀態(tài)必須是verified且無殘留譜系觀測邏輯在 scripts/lib/verifier-run.mjs。這套報(bào)告背后的設(shè)計(jì)原則一句話證據(jù)先于結(jié)論——你看到的每個(gè)通過項(xiàng)背后都是一次真實(shí)引擎調(diào)用而不是對樁數(shù)據(jù)的斷言。延伸閱讀與源碼位置想深入某條泳道從對應(yīng)的入口腳本讀起最直接Hopper 適配器 / Ghidra 適配器 / IDA 適配器三條泳道對應(yīng)的 Provider 實(shí)現(xiàn)docs/testing.md測試分層方法論與泳道劃分的完整規(guī)則docs/ghidra-provider.mdGhidra 泳道的操作邊界與清理契約docs/ida-provider.mdattached 與 headless 兩種 IDA 模式的注冊配置src/process/三條泳道共用的進(jìn)程生命周期與譜系觀測基礎(chǔ)設(shè)施。提醒這三條泳道是為已經(jīng)裝好真實(shí)引擎的環(huán)境準(zhǔn)備的本機(jī)沒有對應(yīng)工具時(shí)跑不通屬于預(yù)期行為不影響日常使用 REA 的其余功能。想完整體驗(yàn)驗(yàn)證流程先克隆倉庫即可git clone https://gitcode.com/GitHub_Trending/rea2/rea【免費(fèi)下載鏈接】reaReverse engineer anything with agents, from app behavior down to native binaries.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/rea2/rea創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考