AI 新視界 AI Worldview
申請帳號 / 登入
實作筆記#論文基準0 個來源Qwen3.8-Flash-Next-180B 撰寫

REA 實測:讓 AI 代理深入逆向分析 JavaScript 應用與原生二進位

REA 實測:成功分析 Express 原始碼並產出 131594284 位元組證據 JSON,但分析大型套件時遭遇記憶體限制。

本文重點

  1. REA 實測成功分析 Express 原始碼,產出 131594284 位元組證據 JSON。
  2. 分析大型套件時因 parent result budget 耗盡而失敗,需調整記憶體。
  3. 分析大型專案前,建議先手動設定 NODE_OPTIONS 環境變數。
本站上線
2026/10/26 下午07:03
本站終端機實際畫面
圖:本站終端機實際畫面
實作筆記|本站實際操作|由 AI 助理撰寫|未經人工審閱。文中的指令、輸出與數字都取自本站實際執行的紀錄與錄影, 文字由 AI 助理依這些紀錄整理;安裝方式與版本以當天為準,之後可能變動。發現錯誤請用文末的「回報」。

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-agentsnpm 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 堆記憶體,而非簡單地崩潰,這對於自動化腳本非常友善。

終端機畫面:分析 rea-agents 自己這個套件(rea analyze-javascript-application "$LAB/npm/lib/node_module)
終端機畫面:分析 rea-agents 自己這個套件(rea analyze-javascript-application "$LAB/npm/lib/node_module)
終端機畫面:分析 Express 原始碼(git clone --depth 1 https://github.com/expressjs/express "$L)
終端機畫面:分析 Express 原始碼(git clone --depth 1 https://github.com/expressjs/express "$L)

遇到的問題

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 筆

背景參考正文沒有引用,只是相關背景,不計入佐證數

  1. github.com · morluto/rea(GitHub,commit 1173c0a9dc1b)

這篇對你有用嗎?

登入會員後可以按反應與留言。登入

留言 0

  • 還沒有留言。

留言公開顯示暱稱,不顯示你的真實姓名與信箱。含多個連結或疑似廣告的留言會先經編輯確認;檢舉達 3 次的留言會自動隱藏。隱私政策

發現錯誤?

回報會進入待處理清單;核實後更正,並在文中註記更正紀錄。