REA 實測:讓 AI 代理深入逆向分析 JavaScript 應用與原生二進位
REA 實測:成功分析 Express 原始碼並產出 131594284 位元組證據 JSON,但分析大型套件時遭遇記憶體限制。
本文重點
- REA 實測成功分析 Express 原始碼,產出 131594284 位元組證據 JSON。
- 分析大型套件時因 parent result budget 耗盡而失敗,需調整記憶體。
- 分析大型專案前,建議先手動設定 NODE_OPTIONS 環境變數。
- 本站上線
- 2026/10/26 下午07:03

morluto/rea 是 GitHub 上的開源專案,本站記錄時 385,368 星;一天內新增約 54,679 顆星。我們在一台 RTX A6000 48 GB 工作站 上,從安裝到跑出結果整段錄下終端機;測的是 2026-10-25 的版本(commit 1173c0a9dc1b)。實測影片公開後會嵌在本文最下方。
背景
開發者常遇到「看到別家 App 有個很棒的功能,想知道怎麼實作」卻沒有原始碼的困境。傳統逆向工程需要熟練使用 Ghidra、IDA 或 Hopper 等工具,門檻極高。REA (Reverse Engineer Anything) 是一個 MCP (Model Context Protocol) 伺服器與 CLI 工具,旨在讓 AI 代理(如 Claude、Cursor)能直接調用逆向分析工具,檢查原生二進位、JavaScript/Electron 應用、.NET 組件等,將黑盒行為轉化為可理解的程式邏輯與證據。
它解決的核心問題是「AI 缺乏對閉源軟體的感知能力」。透過 REA,AI 不再只能猜測 API 行為,而是能靜態分析程式碼結構、追蹤呼叫鏈,甚至結合動態分析(需配合 Hopper/Ghidra),讓 AI 能基於實際的二進位或腳本證據來解釋功能運作方式。
運作方式與使用方式
REA 的運作核心是作為一個中介層,將複雜的逆向分析指令封裝成 AI 可理解的 MCP 工具。我們首先透過 npm install -g rea-agents 安裝全域套件,接著執行 rea --help 確認指令清單。REA 提供了豐富的子命令,例如 analyze-javascript-application 用於靜態分析 JS 專案,trace 用於追蹤功能呼叫鏈,以及 xrefs 用於查看交叉引用。
在實際使用中,我們嘗試了兩種場景。第一種是分析 REA 自身安裝後的 node_modules 目錄,指令為 rea analyze-javascript-application <path> --json。第二種是分析一個標準的開源框架 Express,指令相同。REA 會啟動後端分析引擎,遍歷檔案系統,解析 JavaScript 語法樹,並產出包含節點、邊、證據哈希的 JSON 結構。這些 JSON 輸出設計給 AI 代理閱讀,包含 evidence_id、sha256 完整性驗證以及詳細的 observations。
與未使用時的差異
| 情境 | 不用 REA | 用 REA |
|---|---|---|
| 理解閉源 JS 應用邏輯 | 需手動反編譯或閱讀混淆後的程式碼,耗時且易出錯 | AI 代理自動解析 AST,產出結構化的函數呼叫圖與證據 |
| AI 代理缺乏程式碼上下文 | AI 只能根據公開文件猜測 API 行為,容易幻覺 | AI 可查詢實際的二進位或腳本符號表,獲得精確的函數簽名與引用 |
| 大型專案分析資源管理 | 手動調整分析工具記憶體設定,容易崩潰或無提示失敗 | REA 提供明確的 resource_constraint 錯誤訊息與調整建議 |
| 跨平台逆向工具整合 | 需分別安裝 Ghidra、JADX 等並撰寫腳本串接 | 透過 MCP 協議統一介面,AI 可直接調用不同後端分析引擎 |
安裝與執行過程
| 步驟 | 指令 | 結果 |
|---|---|---|
| 環境檢查 | uname -a; node --version; nvidia-smi ... | 結束碼 0,0.1 秒。確認 Ubuntu 24.04, Node v22.23.4, RTX A6000 GPU 可用。 |
| 取得 REA 原始碼 | git clone ... && git checkout 1173c0a9dc1b | 結束碼 0,3.4 秒。成功 checkout commit 1173c0a9dc1b,專案大小 120M。 |
| 全域安裝 rea-agents | npm install -g --prefix "$LAB/npm" rea-agents | 結束碼 0,14.0 秒。安裝 176 個套件,出現 prebuild-install 棄用警告但不影響安裝。 |
| 驗證版本 | rea --version | 結束碼 0,1.1 秒。輸出版本號 6.8.0。 |
| 檢視指令清單 | rea --help | 結束碼 0,1.1 秒。顯示大量子命令,包括 analyze-javascript-application, trace, xrefs 等。 |
| 分析 REA 自身套件 (失敗) | rea analyze-javascript-application "$LAB/npm/lib/node_modules/rea-agents" --json | 結束碼 0 (但內容為錯誤),601.2 秒。產出 380836047 位元組 JSON,包含 resource_constraint 錯誤,因 parent result budget 耗盡。 |
| 分析 Express 原始碼 (成功) | rea analyze-javascript-application "$LAB/express" --json | 結束碼 0,48.4 秒。成功產出 131594284 位元組 JSON,包含完整的 JavaScriptApplicationGraph 與證據 ID。 |
結果驗證
在分析 Express 原始碼的測試中,REA 表現穩定。它在 48.4 秒內完成了整個專案的靜態分析,產出了一個 131594284 位元組的 JSON 檔案。這個檔案並非普通的程式碼摘要,而是包含了 evidence_id、sha256 完整性校驗、每個檔案的 parse_status 以及詳細的 observations。這符合 README 中關於「結果包含證據與限制」的說法,每個節點都綁定了具體的檔案路徑與哈希值,確保 AI 引用的資訊是可驗證的。
然而,在嘗試分析 REA 自身安裝後的 node_modules 目錄時,我們遭遇了資源限制。雖然指令執行結束碼為 0,但輸出的 JSON 中明確標示 "error":"JavaScript application analysis failed" 與 "code":"resource_constraint"。錯誤訊息指出:「The parent's result capacity was exhausted after retaining static facts for node_modules/playwright-core/lib/utilsBundleImpl/index.js」。這顯示當分析對象包含大量依賴(如 Playwright 這種大型套件)時,REA 預設的記憶體預算(parent_result_budget_bytes 為 1848662468 bytes)會耗盡。REA 提供了明確的补救建議:透過設定 NODE_OPTIONS 環境變數來增加 V8 堆記憶體,而非簡單地崩潰,這對於自動化腳本非常友善。


遇到的問題
1. 分析大型 node_modules 目錄時遭遇記憶體限制:REA 預設的 parent result budget 為 1848662468 bytes,在處理包含 Playwright 等大型依賴的專案時會耗盡,導致分析中斷。解決方式需手動設定 NODE_OPTIONS 環境變數增加記憶體,或減少分析範圍。
2. npm 安裝警告:安裝過程中出現 prebuild-install@7.1.3 已棄用的警告,雖然不影響功能,但可能讓使用者擔心相容性問題。
結論
REA 是一個強大的工具,特別適合需要讓 AI 代理理解閉源 JavaScript/Electron 應用邏輯的開發者。它成功將複雜的靜態分析轉化為結構化、可驗證的 JSON 證據,讓 AI 能基於事實而非猜測進行回答。對於中小型專案或單一模組的分析,體驗流暢且速度快(如 Express 僅需 48.4 秒)。然而,對於包含大量第三方依賴的大型專案,預設的記憶體限制可能成為瓶頸,需要使用者具備一定的 Node.js 環境調優知識。我們建議在分析大型專案前,先手動設定 NODE_OPTIONS 環境變數。對於不熟悉逆向工程但希望 AI 能「看懂」App 內部機制的團隊,REA 值得納入工作流。
來源:佐證 0 筆,另有背景參考 1 筆
背景參考正文沒有引用,只是相關背景,不計入佐證數
- github.com · morluto/rea(GitHub,commit 1173c0a9dc1b)
這篇對你有用嗎?
登入會員後可以按反應與留言。登入
留言 0
- 還沒有留言。
留言公開顯示暱稱,不顯示你的真實姓名與信箱。含多個連結或疑似廣告的留言會先經編輯確認;檢舉達 3 次的留言會自動隱藏。隱私政策
發現錯誤?
回報會進入待處理清單;核實後更正,並在文中註記更正紀錄。