开源项目深度研究 · 源码级分析 · 2026-10

REA:让 AI Agent 拥有二进制级逆向能力的
统一 MCP 操作系统

Reverse Engineer Anything 是一个本地优先的 MCP 服务器与命令行工具, 把 Hopper、Ghidra、IDA、JADX、Frida、浏览器 CDP 等数十种逆向 / 动态分析工具收敛为一套 带「证据溯源」的统一接口,让大模型 Agent 能从应用行为一路追踪到机器码,且每个结论都附带证据、置信度与局限。

仓库 morluto/rea 许可证 MIT 当前版本 v6.5.0 主语言 TypeScript 分析基准 main @ f255899
256,763
GitHub Stars(6 个月)
64,533
Forks
~23.2万
npm 周下载量
69.1万行
TypeScript 代码
7,259
测试用例
207 / 153
MCP 工具 / CLI 命令(实测)
01 / EXECUTIVE SUMMARY

执行摘要

一句话定位:REA 不是又一个反编译器,而是把「逆向工程」整体封装成 AI Agent 可调用的、带证据约束的标准能力层。它在碎片化的逆向工具链与缺乏确定性的大模型之间,插入了一层强调溯源、所有权与失败闭合的工程化中间件。

A

综合判断:工程素养罕见的现象级开源基础设施

一个仅 6 个月历史、靠 AI Agent 大规模协作驱动的项目,却展现出许多成熟商业团队都不具备的严谨——内容寻址的证据模型、防止 PID 复用误杀的进程所有权证明、fail-closed 的能力准入、对「已验证 / 未验证」边界近乎偏执的诚实。它重新定义了「让 AI 做逆向」时,工程上应当如何防止幻觉。代价是:高速迭代带来的代码 churn、陡峭的概念学习曲线,以及对宿主真实工具链的强依赖。

核心创新

Evidence 溯源即一等公民

每条结论都是内容寻址(SHA-256)、防篡改、不可变封存的证据记录,显式区分 observed / derived / inferred 三级置信度与五种权威来源,并把「未知」当作需要被登记和追踪的一等数据,从数据模型层面抑制 Agent 幻觉。

工程广度

24+ 目标类型 × 十余个引擎

原生二进制、JS/Electron、.NET、WASM、EVM、Go/Rust、Flutter、Android、固件、网站、抓包、SQLite、逻辑信号……通过 Hopper/Ghidra/IDA/Kuna/JADX/Frida/GDB 等适配器统一供给,CLI 与 MCP 共享同一套工作流。

生态位

Agent 工具链的「逆向插件」

一条 npx rea-agents setup 即可注册到 Claude Code、Codex、Cursor、Gemini、Grok 等 21 种 AI 编程客户端,并下发配套工作流技能。它卡位的是「Agent 看懂闭源软件」这一新兴刚需。

▍ 五点关键结论
  • 架构是教科书级的分层(DDD):domain 纯逻辑(14.3 万行)→ provider 适配器 → application 工作流 → CLI/MCP 双适配,依赖严格向内,引擎协议不得侵入领域层。
  • 「证据 / 未知 / 所有权」是贯穿全仓的主线:不是写在文档里的口号,而是落在 Zod 严格契约、Result 错误代数、EvidenceLedger、进程令牌等数百个模块中的强类型约束。
  • 测试与验证投入远超同类:7,259 个测试用例、30 个 CI 工作流(含大量真实引擎端到端 lane)、Stryker 变异测试、TypeScript 拉满严格模式。
  • 开发速度与代码 churn 同样极端:10 月单月 2,459 次提交,最近 2000 条提交中 fix 是 feat 的 10 倍,既是高速响应的优势,也意味着稳定性与维护性需要持续观察。
  • 合规姿态主动而清晰:本地分析、明确「非沙箱」威胁模型、能力令牌、私有 DACL、安装包校验、拒绝 DRM 绕过 / 作弊等用途,安全边界表述诚实。
02 / WHAT IT IS

项目概览:它到底解决什么问题

大模型能写代码,却看不了闭源软件——逆向工具碎片化、输出非结构化、结论无法验证、且容易把猜测当事实。REA 把这些工具统一成 Agent 能调用的 MCP 工具,并在返回结果时强制携带证据与局限。

工作方式

Agent 通过 MCP 提出分析师问题(如「Notes 应用的搜索是怎么实现的」),REA 选择并驱动本地引擎、追踪相关代码,返回带证据的伪代码 / 汇编 / 模块图 / 调用关系;Agent 据此追问、解释、再实现与测试。所有分析在本地运行,不上传目标文件。

// 一条命令同时打通 CLI 与 MCP 两条路径 // 静态 JS/Electron 分析无需任何逆向引擎 $ npx rea-agents@latest analyze-javascript-application \ /path/to/app --json // 注册到任意受支持的 AI Agent $ npx rea-agents setup

双形态:一个内核,两个入口

  • MCP 服务器(长驻):基于 stdio,src/main.ts 启动,持有一个不可变的二进制会话(BinarySession),v6.5.0 运行时向 Agent 暴露 207 个工具(经 mcp doctor 内容摘要核验)。
  • CLI(一次性):src/cli.ts 驱动,提供 153 个命令,可脚本化、可导出证据包。
  • 共享工作流:两个适配器复用同一套 application 层与 Evidence 契约,不存在「两套逻辑」。
  • 分发:npm 包 rea-agents,bin 为 rea / rea-agents,另有 install.sh 与 skills.sh 技能。

从 Hopper 专用脚本到「万物可逆向」平台

仓库首个提交(2026-04-14)名为 betterBinaryMCP – Enhanced MCP server for Hopper Disassembler,最初只是一个 Hopper 反编译器的 MCP 封装。半年内它演化为覆盖整个软件栈的分析平台,并在 6 个月内完成 2.x → 6.5.0 共 36 个版本。

2026-04
betterBinaryMCP 诞生
首个提交,仅作为 Hopper Disassembler 的 MCP 增强封装,奠定「引擎 + 桥接 + MCP」雏形。
2026-07
以 rea-agents 发布 npm,架构大扩张
7 月 12 日发布到 npm,当月 697 次提交;Ghidra、JavaScript/Electron、浏览器等能力陆续接入。
2026-08 / 09
打磨期:证据模型与契约收敛
提交节奏放缓(8 月 21、9 月 100),重点转向 Evidence 体系、契约严格化与测试体系夯实。
2026-10
现象级爆发,能力全面铺开
单月 2,459 次提交,达到 v6.5.0;新增 Kuna、Frida、SQLite、WASM、信号、QUIC 等大量能力;GitHub Star 突破 25 万。
03 / BY THE NUMBERS

用数据刻画这个项目

下面所有数字均由仓库实算或官方接口抓取,不做估算凑整。它们共同勾勒出一个「体量中大型、测试密度极高、迭代速度异常」的代码库。

3,918
Git 跟踪文件
3,278
总提交数
230
贡献者
36
发布版本(tag)
1,932
src 下 TS 文件
962
tests 下 TS 文件
40
运行时依赖(精简)
35,773
Markdown 文档行数

月度提交节奏:10 月的爆发

数据:git log 按月份聚合(5–6 月无提交);2026-10 为截至 15 日的不完整月份

最近 2000 条提交的类型分布

fix 数量约为 feat 的 10 倍——高速迭代下以缺陷修复与边界收紧为主

源码模块规模(TS 行数):领域层是绝对核心

domain(纯逻辑、无副作用)与 application(工作流)合计 21.8 万行,占 src 近一半;逆向引擎适配器紧随其后
! 解读高速迭代的两面性

10 月单月 2,459 次提交、fix:feat ≈ 10:1,加上仓库中大量以 codex/、cursor/、chatgpt/、agent/ 命名的分支,表明这是一个由 AI Agent 大规模并行驱动的项目。其优势是能力与边界修复推进极快;潜在代价是高代码 churn、issue 数高达 932、以及对人工评审把关的强依赖(项目专门用 PR readiness 流程要求「人类必须对最终 diff 负责」)。

04 / ARCHITECTURE

架构剖析:依赖严格向内的分层内核

REA 采用清晰的领域驱动分层(DDD)+ 端口适配器(Hexagonal)架构。核心约束写在 AGENTS.md 第一条:依赖只能向内流动——领域语义与契约在最内,引擎专属代码绝不允许侵入领域 / 应用层。

① 入口层 · ENTRY POINTS同一分发器 scripts/rea.mjs 路由到两个对等适配器
src/cli.ts 一次性 CLI(setup / 诊断 / 分析 / 反编译) src/main.ts MCP stdio 服务器(config / session / 生命周期) MCP 工具 207 个 · CLI 命令 153 个(v6.5.0 实测)
▼ 依赖向内 ▼
② 装配层 · COMPOSITION ROOTsrc/composition/ 33 个工厂;类型化的 provider / session 工厂,独立可选加载
createBinarySessionoptionalObservationProviders(懒加载)独立生命周期 / 可重试
▼
③ 服务器适配 · MCP TRANSLATIONsrc/server/ 93 个文件;契约校验、工具注册、会话证据记录、准入与进度
registerXxxTools(45 个注册模块)contractToolHandleranalysisAdmissionEvidenceMcpServer
▼
④ 应用层 · APPLICATION WORKFLOWSCLI/MCP 共享工作流;会话路由、调查记录、证据账本、快照缓存
SessionProviderRouter / BinarySession(每个目标一个不可变深度绑定) AnalysisProviderRegistry(确定性选择,无静默回退) InvestigationRecords / EvidenceLedger / Unknown 归属 JavaScript 语义图与 Electron 边界重建
▼
⑤ 提供者适配层 · PROVIDER ADAPTERS把异构引擎隔离在边界外;每个适配器拥有自己的进程、协议与归一化
Hopper(Unix socket · Python 桥) Ghidra(HeadlessScript · 4892 行 Java 桥) IDA(只读 GUI / headless · ida-pro-mcp) Kuna Cutter / Rizin objdump JADX(Android) JEB Apktool Frida GDB / LLDB tracer Browser CDP / Playwright .NET / WASM / EVM / Go / Rust / Flutter Binwalk / Unblob / WABT / evmole tshark / sigrok / mitmproxy / adb
▼
⑥ 进程基座 · PROCESS FOUNDATION进程组所有权、私有运行根、截止时间、有界读取、清理与诊断
src/process/ 78 文件(所有权令牌 / 进程树 / 私有根 / 资源上限) src/windows/ + native/windows Node-API(NTFS 准入 / DACL / Job Object)
▼
⑦ 内核 · DOMAIN + CONTRACTS纯函数、无副作用的领域语义(14.3 万行)与对外 Zod 契约(88 文件)
Evidence / 证据账本 / 残余未知 Result 错误代数 / 标签化错误 二进制目标 / 覆盖度 / 摘要与比较 Zod 严格契约 · 内容寻址摘要

会话路由:一个目标,一个不可变绑定

  • BinarySession:每个分析目标建立一次「深度绑定」(deep binding),选定唯一深度引擎,生命周期内不可变。
  • 确定性选择:AnalysisProviderRegistry 对候选排序,明确指定或唯一候选才绑定;多个候选同时可用时返回 ambiguous,绝不静默 fallback。
  • 辅助路由分离:轻量能力(清单、格式读取)与深度引擎走 disjoint routing,避免误用。

桥接器:在宿主进程内说引擎的语言

桥接器
语言/规模
职责
Ghidra Bridge
Java · 4,892 行
HeadlessScript:清单、反编译、引用、CFG、软浮点 / Raw 预处理
Hopper Bridge
Python · 1,173 行
在 Hopper 内运行,适配其 Python API
LLDB Tracer
Python · 873 行
macOS 原生追踪 / 进程运行令牌读取
Cutter Bridge
Python · 816 行
Rizin/Cutter 适配
Native UI
Swift · 339 行
macOS UI 场景与进程令牌读取(无签名 API 依赖)
Windows Addon
C++ · 1,634 行
Node-API:NTFS 准入、受保护 DACL、Job Object 原子分配
05 / THE CORE INNOVATION

Evidence 体系:从数据模型层面防止 AI 幻觉

这是整个项目最值得研究的设计。逆向分析最大的风险不是「算错」,而是 Agent 把推断当事实、把缺失当不存在、并把不可追溯的结论写进实现。REA 的答案是:让每一条观察都成为一条可验证、可引用、不可篡改的「证据」。

一条 Evidence 记录的解剖(src/domain/evidence.ts)

interface Evidence { evidence_id: "ev_<sha256 semantic-content hash>" // ① 内容寻址:改一个字节,ID 就变,等于自证篡改 subject: { name, digest.sha256, format, architecture, local_path } // ② 被分析对象的身份 provider: { id, name, version } // ③ 哪个引擎、什么版本产出的 analysis_profile: 承诺的分析配置 | null // 缺失也必须显式为 null,参与身份计算 operation / parameters: 调用了什么操作、传入什么参数 raw_result: 引擎原始表示 | null // 保留上游原貌,不丢信息 normalized_result: 归一化后的事实(Agent 真正读的) confidence: "observed" | "derived" | "inferred" // ④ 三级置信度 authority: "shipped-artifact" | "controlled-replay" | "historical-reference" | "external-service" | "analyst-inference" // ⑤ 五种权威来源 environment: { id, platform, architecture, isolation } limitations: string[] // ⑥ 这条证据不能说明什么 relationship_coverage: 关系覆盖度(完整 / 截断 / 未知) locations: 地址 / 地址范围 / 文件偏移 / 制品路径 evidence_links: "ev_..."[] // 证据之间的溯源图 }
防篡改

内容寻址 + 身份自洽

证据 ID = 对其全部语义内容(含 raw_result、provider、置信度、局限)做规范化 SHA-256。解析时重算哈希,任何对已认证记录的篡改都会被立即拒绝。规范化哈希与显示路径解耦,换路径不破坏证据身份。

不可变

深度冻结 + WeakMap 封存

证据入库时 Object.freeze 递归冻结并记入 WeakMap;「已认证不可变」成为可识别的运行时事实,跨进程传递时用哈希而非引用判断一致性。

认识论

置信度 × 权威度

「观察到」与「推导」与「推断」严格分层;「来自出厂制品」与「分析师推断」权威不同。Agent 无法把一句猜测包装成与实测同等可信的结论。

「未知」不是空值,而是需要登记的资产

残余未知(Residual Unknown)与证据账本

EvidenceLedger 是会话级的不可变证据集合,幂等记录、冲突内容拒绝、整个证据包(bundle)先校验再原子合并。与此同时,无法确定的事实以 ResidualUnknown 记录,带状态机与修订历史(提出 / 证据补全 / 关闭)。

工具契约反复强调一条原则:「缺失的覆盖度是 unknown,不是 absence」——没扫到某个调用方,不等于调用方不存在;空的 facet 必须由生产者显式声明「已观察到为空」才可用于等价性比较。

这套机制如何改变 Agent 行为

  • 结论必须可追溯:比较类工具(compare_functions / compare_artifacts)直接吃 Evidence,只有覆盖度可比、图成员完整才允许判定「相同」。
  • 静态 ≠ 运行时:制品静态一致也明确「不能证明运行时行为不变」。
  • 部分失败可恢复:分析或清理失败时,已完成的证据与部分观察仍然保留,不丢结论。
  • 溯源闭环:investigate_feature / trace_* 产出证据图,配合 verify_reconstruction 校验重构覆盖率。
▍ 研究者视角

Evidence 模型本质上是把学术论文的「引用 + 证据等级 + 局限性」传统,以及安全取证的「证据链(chain of custody)」思想,编码成了强类型的运行时对象。对于一个会被 LLM 自主编排、且结论会直接驱动代码生成的系统,这种「认识论卫生(epistemic hygiene)」是稀缺而正确的设计——它把「模型可能编造」这一不可消除的风险,用工程手段约束在可控范围内。

06 / KEY ENGINEERING MECHANISMS

三个体现工程深度的关键机制

除了 Evidence,REA 在「与外部进程和操作系统打交道」这件高风险的事情上,沉淀了一套值得称道的安全原语。

安全 · 进程

所有权令牌:防 PID 复用误杀

逆向引擎要派生大量子进程,清理时必须能安全地终止自己派生的进程组。仅凭 PID + 可执行路径在进程退出 / PID 被复用后不足以证明所有权。REA 引入 Run Token(运行令牌):启动子进程前注入令牌,清理时扫描全表验证令牌、启动者身份、父 PID、进程组,只有令牌证明通过才发信号。「观察到的候选」不自动授权 kill。

隔离 · 资源

私有运行根 + 有界资源

每个提供者运行在私有 runtime root(POSIX 临时目录 / Windows 私有 NTFS),Ghidra 用临时项目 + 私有 home/cache,会话结束即删。所有外部进程有启动截止时间、消息大小上限、CPU/内存上限、有界文件读取(Linux prlimit、Windows Job Object),防止恶意 / 畸形文件拖垮宿主。

契约 · 错误

Result 错误代数 + fail-closed

边界值用 {ok,value}|{ok:false,error} 显式建模,无法识别的身份/适用性必须保持 unknown,而不是当成「缺失 / 外来 / 已对齐」。能力集成遵循 fail-closed:只要作用域、授权、副作用、验证方式存在未决问题,就拒绝接入。Zod 严格契约(strictObject)拒绝任何未声明字段。

性能优先级:先省 Agent 的 Token

AGENTS.md 把优化顺序写得很明确:① Agent token 与上下文(返回最小充分答案,用任务选择 / 摘要 / 分页 / 留存 Evidence);② 分析时间(复用已验证结果、缓存键覆盖所有影响因素、上报前校验新鲜度);③ CPU 与内存。这与传统工具优先考虑「跑得快」截然不同——它优化的是整个 LLM 任务的总成本。

工具设计:从分析师问题出发的动词体系

207 个工具(v6.5.0 运行时目录,见第 11 节实测)按 inspect / list·search / trace / compare / workflow / observe·capture 六类形态组织,不堆无关执行模式。源码动词分布印证了这一取向:inspect 35 个、list 13、compare 11、trace 8、project 7,生命周期 start/close 成对出现。命名保持 provider 中立,能力差异通过「每个 provider 的实际覆盖度」精确回报。

07 / CAPABILITY MATRIX

能力矩阵:能分析什么、依赖什么

REA 覆盖从硬件信号到网页行为的广阔谱系。下表整理自 README 的能力表与源码契约;「要求」列体现了 BYO(Bring Your Own)原则——REA 自身不盗版、不捆绑商业工具。

目标类型
返回内容
引擎 / 宿主要求
原生二进制
伪代码、汇编、字符串、符号、调用与引用
Hopper / Ghidra / IDA / Kuna
JavaScript / Electron
模块、导入、source map、路由、IPC、原生插件关系、边界图
仅 Node.js(无需逆向引擎,Babel AST 静态投影)
网站
页面结构、脚本、网络观察、按需截图 / 场景录制
Chrome 系浏览器(CDP / Playwright)
.NET 程序集
元数据、CIL 指令、原生依赖声明、构建对比
无(纯静态,内置 PE/CLI 解析)
Android APK
Manifest、类、反编译方法、引用追踪;设备日志/截图/传文件
Headless JADX + JDK;设备用 adb
Android 资源 / Flutter / HarmonyOS
解码 manifest/字符串表;Dart 快照哈希与引擎溯源;HAP/HSP 清单
Apktool;Flutter/Harmony 为静态解析
WASM
校验、段、精确 import/export WAT、解码 WAT、接口对比
自带 WABT(不执行)
EVM 字节码
dispatch 选择器、字节偏移、推断参数、可变性
内置 evmole(受限 worker)
Go / Rust 二进制
Go 构建信息 / module;Rust cargo-auditable crate 与依赖边
内置 ELF/PE/Mach-O 静态检查
固件
区域、抽取结果、并可交接原生分析
Binwalk / Unblob(Linux)
抓包 / 网络
HAR / SAZ / mitmproxy / qlog 的请求响应、暴露载荷、API 面推断
离线文件;mitmproxy/tshark 按需
数据包 / 逻辑信号
字段、重复值、过滤器、解码注释;信号解码器标注
tshark / capinfos;sigrok-cli
SQLite 数据库
表/列/索引/视图/触发器与选定行
本地快照;Node 24.15+ 原生 SQLite
进程行为 / 崩溃
终端输出、交互、退出、文件系统观察、运行对比;寄存器/信号/映射候选
macOS/Linux 原生 PTY;pwntools、可选 GDB/pwndbg
动态插桩
Frida 会话、调用者脚本、留存消息;GDB/Rizin 持久调试会话
Frida(执行外部代码,破坏性,非只读)

注:静态 JS / .NET 检查只读取文件不运行应用;运行时捕获以用户权限运行或交互目标,每个指南单独说明其副作用。

08 / SECURITY & RESPONSIBLE USE

安全模型:边界清晰,且诚实承认局限

一个会反编译、会启动引擎、会附加进程的工具,安全表述极易夸大。REA 罕见地反复强调「这不是沙箱」,并把可信边界落到具体机制上。

通道与传输安全

  • 每会话随机能力令牌认证 Hopper / Ghidra 桥接,令牌通过私有会话描述符传递,不走命令行参数或环境变量。
  • POSIX 用当前用户 Unix domain socket;Windows Ghidra 用认证过的 loopback TCP + 私有 NTFS 运行时,DACL 仅放行当前用户与 SYSTEM。
  • Ghidra 用打包的 HeadlessScript、隔离临时项目、私有 home/cache,只导入目标、限制消息与资源,关闭即删。

安装与供应链安全

  • 配置变更必须幂等、可加、带备份,setup 先展示计划、获批后才写入。
  • Hopper 安装仅信任其 HTTPS 端点、限定下载源、限制包大小、比对官方校验和;依赖安装直接调 apt/dnf/pacman,无 shell 求值、从不 sudo。
  • 绝不安装 / 升级无关软件(Homebrew、Node、Java、Ghidra 等);商业引擎一律 BYO。
  • install.sh 内置截断保护:curl|bash 下载不完整时直接语法报错,绝不执行半截脚本。
! 明确划定的红线(DISCLAIMER)

项目明确不支持:绕过 DRM / 授权校验 / 反作弊;开发游戏作弊或篡改在线服务;绕过认证与访问控制;复制专有软件与受保护资产;规避 AI 模型提供商的安全策略;倒卖 / 共享 AI 账号。

同时诚实声明:REA 不防御「已经以同一系统用户运行的恶意进程」;打开不可信二进制,等于以该用户权限把解析委托给所选引擎——这是用户必须自行承担的风险,工具不做虚假承诺。

09 / ENGINEERING QUALITY

工程质量评估

在「AI 大量生成代码」的背景下,REA 用一套近乎严苛的质量门把不确定性挡在主干之外。下面是来自配置与 CI 的客观证据。

多层测试金字塔

测试层
文件 / 行数
职责
boundary(生产边界)
691 / 19.5万
CLI / MCP / 进程边界的真实契约,数量最大
acceptance(验收)
92 / 2.2万
编译后完整 CLI + MCP 工作流端到端
conformance(一致性)
22 / 3.4k
就绪状态、契约方言一致性
composition / evaluation
22+15
装配校验;Agent 会话转录评分
src 内联测试
481 个文件
领域语义单测,与源码同位置

合计 7,259 个 it/test 用例;另有 Python/Java/Swift 桥接器的契约测试。

真实引擎验证 lane(CI)

30 个 GitHub Actions 工作流中,有一整套 real-* 任务在真实工具链上跑:real-ghidra(含 Windows)、real-hopper(macOS/Linux)、real-cutter、real-browser、real-go-binary、real-evm、real-packet-capture、real-signal、real-javascript-recovery、real-termux(Android) 等。

Changelog 中每条能力都标注「已在哪个平台 / 哪个版本验证」「哪些仍未验证」,例如 Frida 仅记录了 Linux 本地标记工作流,macOS/Windows/远程均标注未验证。模拟提供者不被承认为真实行为证据。

TypeScript 拉满

strict + exactOptionalPropertyTypes + noUncheckedIndexedAccess + noImplicitReturns + verbatimModuleSyntax,配合 oxlint 限制圈复杂度(≤20)、嵌套深度(≤4)、函数行数(≤100)、参数数(≤4)。

变异测试

用 Stryker 对 reverse-tools 做变异测试(perTest 覆盖分析、TS checker),不仅验证「测试能过」,还验证「测试是否真能抓住缺陷」。

其他质量门

knip 死代码检测、jscpd 重复代码检测、JSON Schema 方言校验、架构守卫、元数据校验、PR readiness 人工归属、PR 标题 Conventional Commits、Turborepo 增量编排。

测试代码 vs 生产代码

src 44.5 万行 vs 测试 25.9 万行,测试/生产比 ≈ 0.58(高度密集)

多语言桥接代码(含宿主进程内脚本)

除 TS 外,还包含 Python / Java / Swift / C++ 等贴近不同引擎与 OS 的代码

依赖哲学:克制且专注

运行时仅 40 个直接依赖,没有重型框架,几乎全是「单一职责」的专用解析与基础库:Babel(JS AST)、zod(校验)、playwright-core(浏览器)、@modelcontextprotocol(MCP)、node-pty(终端)、@electron/asar、evmole、openpgp(签名校验)、流式 JSON 解析等。第三方引擎代码以 third_party(git submodule)方式引入并保留各自许可与上游不变性,避免 fork 后漂移。

10 / ECOSYSTEM & COMMUNITY

生态与社区:卡在 Agent 浪潮的咽喉位

REA 的爆发不是偶然:它把「逆向能力」做成了 AI 编程客户端的通用插件,又用多语言文档降低了全球采纳门槛。

21
受支持的 AI Agent 客户端
21
网站语言版本
19
README 翻译
856
Watch 订阅者

Agent 客户端覆盖

setup 自动注册并下发配套工作流技能(含备份与 dry-run):

Claude CodeClaude DesktopCodexCursorGemini CLIWindsurfDevinOpenCodeAntigravityCopilot CLIVS CodeGrok BuildGrok BotQoderTraeZCodeDeepSeek HarnessKimi CodeFactory DroidWorkBuddyCommandCode

未列出的客户端可用手动 stdio MCP 注册;同一份能力也可纯 CLI 使用,不依赖任何 Agent。

社区与分发数据

  • GitHub:256,763 stars / 64,533 forks / 932 open issues(截至 2026-10-15)。
  • npm:rea-agents 周下载约 23.2 万;32 次发布。
  • 贡献者:git 统计约 230 人(GitHub API 219 页),核心维护者 morluto 主导(1638 提交),另有 Kaoru0822、N0zoM1z0、Ysopwnable 等高频贡献者。
  • 治理:5 类 issue 模板、PR 模板、Trendshift 徽章、Discord 社区、官网 rea.tools(含指南与三个标杆案例)。
▍ 标杆案例(Showcase)体现的真实工作流
  • DX-Ball:跟随声音调用定位到「位移→声像」辅助函数,把不完整伪代码重构成 C,通过 3,205 个原始 x86 用例并复现全部 63 个编译字节。
  • Notion:追踪 Electron 剪贴板桥,从 renderer → preload → IPC → 主进程,解析富剪贴板格式。
  • TH04(东方旧作):在 PC-98 16 位指令中还原弹道环计算,并与历史编译器输出比对。
11 / HOW TO USE

快速上手:从安装到跑通第一次分析

这一节不是复述文档,而是在本机真实跑通后的操作手册。下列命令均在 macOS arm64(Darwin 24.6)、Node v22.23.2、npm 10.9.8 上实测;标注 已验证 的步骤附带真实输出。

01 · 先看清三个前提:运行时、引擎、目标

运行时

Node 版本是硬门槛

需要 Node 22.19+ / 24.11+ / 26+ 与 npm。无需 clone 仓库、无需编译。本机 v22.23.2 通过

引擎 BYO

分析引擎分层供给

静态 JS/Electron、.NET、Go/Rust 元数据、SQLite 零引擎即可跑;原生二进制反汇编才需自备 Hopper / Ghidra / IDA / Kuna。setup 不会代装这些引擎。

本地与网络

目标不上传,首次需联网

所有分析在本地进行,目标字节不出机器。仅 npx 首次拉包与 setup 联网;Linux 上部分能力需 procps 兼容的 ps。

02 · 三种获取方式,按需选一种

▌方式 A · 免安装 npx(最快试用,版本始终最新)已验证
$npx -y rea-agents@latest --version # 实测输出:6.5.0 $npx -y rea-agents@latest --help # 列出 153 个命令
▌方式 B · 全局安装(命令更短,便于长期使用)
$npm install --global rea-agents # 或 bun add --global rea-agents $rea --version $rea update # 全局安装用它更新;npx 用户每次 @latest 即最新
▌方式 C · 接入 AI Agent(推荐,一次性注册 MCP + 工作流技能)
$npx rea-agents setup # 交互式:勾选客户端 → 预览改动 → 审批 → 写入

03 · 两个入口,同一套内核

CLI 与 MCP 服务器共享同一批 application workflow 与 Evidence 契约:命令行能拿到的证据,Agent 也能拿到,反之亦然。

MCP · 给 AI Agent

让 Agent 自主调用 207 个工具

以 stdio 子进程方式把 REA 注册进你的 AI 编程客户端;之后用自然语言描述目标,Agent 自行选择工具、追溯证据、在失败处闭环。

npx -y rea-agents@6.5.0 mcp
  • setup 自动写入并精确锁定版本,避免隐式升级
  • 支持 21 种客户端:Claude Code / Codex / Cursor / Gemini / Grok / VS Code 等
  • 顺带安装配套 reverse-engineer-anything 工作流技能
CLI · 给人和脚本

直接检查、可管道化、可复现

每次调用是独立进程,结果落盘即可复用;--json 输出给 jq / 脚本,默认 TOON 格式给人看。适合一次性侦察与自动化流水线。

rea <command> <target> [--provider id] --json
  • 153 个命令,退出码可脚本化(0 成功 / 1 失败 / 130·143 信号)
  • 证据包可 import / export / compare,跨命令传递
  • 结果可缓存为 snapshot,相同查询命中即复用

04 · 路径 A:接入 AI Agent(setup 四步)

1

启动 setup 并勾选客户端

多选列表里勾选要配置的 Agent(已检测到的新客户端默认不勾选,检测≠授权)。setup 会同时给出 MCP 注册与工作流技能的安装计划;Hopper 是单独的可选项,需另批。

2

先干跑,只看计划不落盘

非交互或脚本里,用 --dry-run --json 拿到只读计划(状态 planned、退出码 0)。下面是对 Codex 干跑的真实结果——只计划一个 configure_client 动作,写配置前自动备份,命令版本锁定为 6.5.0。

▌zsh · setup --dry-run(不改动任何文件)已验证
$rea setup --client codex --skill=false --dry-run --json { "status": "planned", "plannedActions": [ { "kind": "configure_client", "label": "Codex", "target": "~/.codex/config.toml", "backupPath": "~/.codex/config.toml.rea.backup", "detail": "…preserve unrelated configuration. Command: \"npx\" \"-y\" \"rea-agents@6.5.0\" \"mcp\"" } ] } # 退出码 0,原配置零改动
3

审批后才写入

交互模式下确认计划后回车;自动化里用 --yes 配合明确的 --client(或 --all-detected)。写文件时保留无关配置与注释、创建备份、原子替换并回读校验;发现既有配置损坏会整体中止(fail-closed)。

4

重启客户端,用 doctor 验收

按完成提示重启对应 Agent(Claude Desktop 需完全退出再开,否则运行中的应用会覆盖注册)。随后 npx -y rea-agents@latest doctor --json 检查注册、技能与引擎就绪状态。

MCP 注册长什么样(也可手动写入)

本质就是一条 stdio 服务器启动命令:npx -y rea-agents@6.5.0 mcp。setup 帮你把它写进各客户端的 MCP 配置并锁定版本;你也可以在支持自定义 MCP 的客户端里手动添加这一行。本机实测该服务器启动后 healthy=true,实出 207 个工具 / 6 个 prompt,与目录 SHA-256 摘要完全一致。

05 · 路径 B:零引擎静态分析一个 Electron 应用(本机实测)

最能快速验证 REA 价值、且不需要任何逆向引擎的路径,是对一个解压后的 JS/Electron 目录或 .asar 做静态应用图重建。我们用仓库自带的示例应用 notes-electron(6 个文件、4 个 JS:main / preload / renderer / csv)实跑。

▌zsh · analyze-javascript-application(6.5 秒 / 410 KB Evidence)已验证
$npx -y rea-agents@latest analyze-javascript-application ./notes-electron --json … { rea_progress: 解析 4 个 JS · 遍历 241 个 AST 节点 · 构建应用图 … } "terminal": "Application graph and Electron boundaries reconstructed" $echo $? → 0 # 结果落盘:evidence_id ev_28b6ffd6…

关键在于它自动把跨进程 IPC 边界串成了一条可追溯的链——renderer 的调用经 preload 的 contextBridge 桥,精确配对到 main 进程的 handler,而不是孤立地报出字符串:

RENDERER · 渲染进程
ipcRenderer.invoke("notes:export")
side = renderer · operation = invoke · resolution = literal
→
PRELOAD · 桥接层
contextBridge.exposeInMainWorld("notes", { exportCsv })
exposed member = notes.exportCsv · world = main
→
MAIN · 主进程
ipcMain.handle("notes:export", …)
handler_path = main.js · 位置 main.js:8 · operation = handle
实测:配对靠的是证据,不是猜测

返回的图边带 pairing_basis = "unique-exact-literal-channel",summary 里 paired_renderer_transmissions = 1、ambiguous = 0、unpaired = 0;integrity_contradictions = [](无完整性矛盾),统计为 6 文件 / 4 JS / 241 AST 节点 / 21 findings / 0 解析失败。这正是第 05 节 Evidence 机制的可观测落地。

真实应用的完整 Evidence 可达数百 MB(文档示例:334 MB 的 Obsidian 证据包,摘要视图仅约 10 KB)。标准做法是落盘后按需投影:

▌zsh · 保存证据 + 投影摘要视图(本机实测)已验证
$rea analyze-javascript-application /path/to/app --json > app-evidence.json $jq -c '{source:{kind:"inline",evidence:.},view:{kind:"summary"}}' app-evidence.json > app-view.json $rea inspect-analysis-view app-view.json "coverage": { "status": "complete-within-view", "examined": 17, "total": 32, "exhausted": true } # 同时显式列出 18 条 limitations 与 20 项 unknowns——「未知」被登记而非隐藏

06 · 原生二进制:先配置引擎,再显式选择 provider

分析原生可执行文件需要 Hopper / Ghidra / IDA / Kuna 之一(BYO:setup 不代装、不升级)。先看自己有哪些可用能力,再开始分析:

▌zsh · 列出 provider 与能力
$rea providers --json # 按 open / capabilities / provider_binding 等操作返回可用矩阵 $rea doctor --provider ghidra --json # 单独诊断某个引擎;本机实测 GHIDRA_INSTALL_DIR 未设置即明确报缺
▌zsh · 原生分析(以 Ghidra 为例)
$rea analyze /path/to/program --provider ghidra --json $rea search /path/to/program "license" --provider ghidra --json $rea decompile /path/to/program 0x1000 --provider ghidra --json $rea xrefs /path/to/program 0x1000 --provider ghidra --json $rea analyze /path/to/program --provider ghidra --snapshot ./program.json # 结果缓存,相同查询命中即复用
没有静默 fallback:多候选时必须显式选

当只有一个可用 provider 支持目标时 REA 自动选;多个都支持时返回 ambiguous 并在 details.candidate_ids 给出候选,不替你猜。选择优先级:命令行 --provider <id> > 环境变量 REA_ANALYSIS_PROVIDER > MCP 的 open_binary.provider_id。常见 id:hopper / ghidra / ida / kuna / cutter / rizin / objdump / jeb / jadx。

07 · 拿到目标怎么选工具:一张路由表

你手上的目标
首选命令 / 工具
是否需要引擎
JS / Electron 目录或 .asar
analyze-javascript-application无需
(Rabin AST 静态重建)
Go / Rust 二进制(元数据)
inspect-go-binary · inspect-rust-binary无需
(读内嵌 section)
.NET PE/CLI 程序集
inspect-managed-artifact · inspect-managed-members无需
(不加载执行)
SQLite 数据库快照
inspect-sqlite-database无需
原生二进制 / .app 包
analyze · function · decompile · xrefs需 Hopper/Ghidra/IDA/Kuna
Android APK
inspect-android-package · decode-android-resourcesJADX/APKTOOL + adb
固件镜像
inspect-firmware-regions · extract-firmwareBinwalk/Unblob
WASM / EVM 字节码
inspect-wasm-* · inspect-evm-interface内置
(WABT/evmole)
抓包 / 流量文件
inspect-web-network-capture(HAR/SAZ)无需 / 可选 tshark
已开浏览器 / 网页运行时
list-browser-targets · capture-browser-scenarioCDP / Playwright
动态运行 / 插桩
capture-process · Frida 系列 · debug-with-gdb会执行,需隔离

08 · 本机实测清单(每条都真实跑过)

环境:macOS arm64 / Node v22.23.2 / npm 10.9.8,包版本 rea-agents@6.5.0。时间 2026-10-15。

包可直接运行
npx -y rea-agents@latest --version
输出 6.5.0,退出码 0。
通过
命令清单完整
npx -y rea-agents@latest --help
列出 153 个 CLI 命令。
通过
就绪诊断 doctor
npx -y rea-agents@latest doctor --json
Node 22.23.2 满足要求;ghidra / ida / jadx 未配置、15 个客户端未注册(退出码 1,符合“必需项缺失即失败”的 fail-closed 契约)。
通过
MCP 服务器真实启动
npx -y rea-agents@latest mcp doctor --json
healthy=true、production-stdio、协议 2025-11-25;实出 207 工具 / 6 prompt,与目录 SHA-256 摘要完全一致(无缺失、无多余)。
通过
setup 干跑(不改动配置)
rea setup --client codex --skill=false --dry-run --json
status=planned,仅 1 个 configure_client 动作,给出备份路径、命令锁定 rea-agents@6.5.0,原配置零改动。
通过
零引擎静态 JS 分析
rea analyze-javascript-application ./notes-electron --json
6.5 秒 / 410 KB Evidence,完整重建 IPC 桥(renderer→preload→main),integrity_contradictions=[],0 解析失败。
通过
证据视图投影
rea inspect-analysis-view app-view.json
生成链接父记录的新 Evidence,coverage=complete-within-view,并显式列出 18 条 limitations + 20 项 unknowns。
通过

说明:未实际安装/反编译的能力(Hopper/Ghidra/IDA 原生反汇编、Frida 动态插桩、真机 adb 等)未在本环境验证——它们需要额外的商业/外部引擎或设备;本清单仅对“本机真实执行过”的项标“通过”。

09 · 维护、配置与常见问题

更新与卸载

  • npx 用户:始终用 @latest 即最新;重跑 setup 可刷新已注册版本与技能。
  • 全局用户:用 rea update 更新。
  • 卸载:setup 提供卸载流程,会保留无法安全删除的文件并报告归属清单;首个 .rea.backup 备份不被覆盖。

常用环境变量

  • REA_ANALYSIS_PROVIDER:常驻 provider 偏好(被 --provider 覆盖)。
  • REA_GHIDRA_STARTUP_TIMEOUT_MS / REA_HOPPER_STARTUP_TIMEOUT_MS:大二进制导入慢时调大启动超时。
  • REA_KUNA_COMMAND、REA_JADX_MCP_JAR:指定 Kuna 可执行文件 / jadx-headless-mcp 的 JAR。
  • REA_MCP_MAX_RESPONSE_BYTES、NO_COLOR=1、--accessible:限响应体、关色、无障碍提示。
现象
处理方式
提示 ambiguous / 多个 provider
不自动选;按 details.candidate_ids 用 --provider 显式指定。
provider_unavailable 或引擎找不到
跑 rea doctor --provider <id> --json,按 message / remediation / rejections 安装或配置引擎(Ghidra 设 GHIDRA_INSTALL_DIR)。
大二进制首次导入超时
调大对应的 REA_*_STARTUP_TIMEOUT_MS;客户端超时后 provider 仍在后台分析,可稍后经 analysis_activity 续查。
退出码含义
0=完成(结果可含部分证据/未知);1=未完成;130=SIGINT、143=SIGTERM;管道被 head 提前关闭返回 141。setup 取消返回 0,needs_confirmation 返回 1。
结果太大读不动
先 --json > file 落盘,再用 inspect-analysis-view 按 summary / page / module 分页投影。
想让结论可复现 / 可对比
用 evidence-export 导出规范包、compare 对比两个版本;--snapshot 缓存成功分析。
安全前提:REA 不是沙箱

分析全程在本地、目标不上传,但 REA 自身不隔离不可信程序:动态分析(capture-process / Frida / GDB / 浏览器场景)会以你的用户权限真实启动目标。处理可疑样本请在隔离 VM 或一次性环境中进行。setup 也绝不安装 Homebrew、Node、Java、Ghidra/IDA 等任何系统依赖——只配置它自己。

12 / STRENGTHS · RISKS · FIT

综合评估与适用建议

优势与风险都来自同一个根源:它用前所未有的速度,把一个高风险领域(逆向 + 自主 Agent)工程化。

● 优势 Strengths

  • Evidence 溯源 + 未知建模 + 内容寻址,是同类工具中独有的「防幻觉」数据层
  • 架构清晰、依赖向内、契约严格,7259 测试 + 真实引擎 CI + 变异测试
  • 能力覆盖极广,CLI/MCP 双入口,本地优先、隐私友好
  • 安全表述诚实、合规姿态主动、安装链克制
  • 生态卡位精准,21 个 Agent 客户端 + 21 语言,采纳门槛低

● 风险 / 局限 Weaknesses & Risks

  • 项目仅 6 个月,单月数千提交、fix 占比极高,稳定性与长期维护节奏待观察
  • 深度原生分析强依赖 Hopper/Ghidra/IDA 等外部重型工具,环境配置复杂
  • 能力矩阵中大量 lane 标注「单平台 / 单版本已验证」,跨平台成熟度不均
  • 概念密度高(证据、覆盖度、所有权、profile、准入),对普通用户有学习曲线
  • Frida 等动态能力会执行外部代码,仍需用户自行承担安全后果

● 机会 Opportunities

  • Agent 从「写代码」走向「理解并改造现有软件」,逆向是刚需且早期
  • Evidence 模型有潜力成为 Agent 可信工具调用的通用事实层 / 互操作标准
  • 可向企业安全、供应链审计、遗留系统理解、软件保存等场景延伸
  • 更多引擎(Kuna 等开源反编译器)与更多目标架构的持续接入

● 威胁 Threats

  • 商业引擎(Hopper/IDA/JEB)许可与 API 政策变化可能影响适配
  • 逆向 / 动态分析天然处于法律灰色地带,平台政策与合规风险
  • AI 工具链(MCP、各家 Agent)仍在快速变动,注册接口可能频繁变化
  • 高关注度下可能被滥用(绕过保护 / 作弊),反噬项目声誉
  • 同类 MCP 工具与 IDE 厂商原生能力的竞争

成熟度定性评分(基于代码与流程证据,0–10)

架构设计与分层9.5
测试与验证严谨度9.0
安全设计与合规9.0
文档与可学习性9.0
生态与集成广度9.0
成熟度 / 稳定性(考虑年龄与 churn)7.0

评分为分析者基于公开材料的定性判断,非客观测量;稳定性一项已显著反映项目仅 6 个月、迭代极快的事实。

谁应该用、怎么用

角色 / 场景
建议
注意
安全研究员 / 恶意软件分析
强烈推荐;证据溯源 + 多引擎 + 离线静态分析贴合取证工作流
不可信样本放入隔离 VM;REA 非沙箱
想用 Agent 复刻闭源功能的开发者
推荐;JS/Electron 零引擎门槛,原生配合 Hopper/Ghidra
尊重知识产权与许可,仅在授权范围内
CTF / 教学 / 软件保存
非常适合;Ghidra 免费、DOS/旧架构支持、案例完整
部分能力需 Linux 工具链
企业做供应链 / 遗留系统审计
值得评估;统一接口与证据包便于团队留痕
项目年轻,建议锁定版本、自担维护风险
仅想看懂开源仓库
不必要;Skill 明确提示此类场景用普通代码工具即可
不要为了用而用
A

最终结论

REA 是 2026 年「Agent 原生开发工具」浪潮中一个兼具技术野心与工程纪律的标杆项目。它真正的护城河不是「接了多少反编译器」,而是把证据、未知、所有权与失败闭合做成了不可绕过的内核契约——这为「如何让会犯错的 AI 安全地操作高风险工具」提供了一份可直接借鉴的参考实现。若能在高速扩张中守住稳定与验证质量,它有潜力成为 Agent 时代理解软件世界的基础设施。当下的建议是:积极学习与采用、锁定版本使用、对动态能力保持隔离、对其长期稳定性保持合理审慎。