Reverse Engineer Anything 是一个本地优先的 MCP 服务器与命令行工具, 把 Hopper、Ghidra、IDA、JADX、Frida、浏览器 CDP 等数十种逆向 / 动态分析工具收敛为一套 带「证据溯源」的统一接口,让大模型 Agent 能从应用行为一路追踪到机器码,且每个结论都附带证据、置信度与局限。
一句话定位:REA 不是又一个反编译器,而是把「逆向工程」整体封装成 AI Agent 可调用的、带证据约束的标准能力层。它在碎片化的逆向工具链与缺乏确定性的大模型之间,插入了一层强调溯源、所有权与失败闭合的工程化中间件。
一个仅 6 个月历史、靠 AI Agent 大规模协作驱动的项目,却展现出许多成熟商业团队都不具备的严谨——内容寻址的证据模型、防止 PID 复用误杀的进程所有权证明、fail-closed 的能力准入、对「已验证 / 未验证」边界近乎偏执的诚实。它重新定义了「让 AI 做逆向」时,工程上应当如何防止幻觉。代价是:高速迭代带来的代码 churn、陡峭的概念学习曲线,以及对宿主真实工具链的强依赖。
每条结论都是内容寻址(SHA-256)、防篡改、不可变封存的证据记录,显式区分 observed / derived / inferred 三级置信度与五种权威来源,并把「未知」当作需要被登记和追踪的一等数据,从数据模型层面抑制 Agent 幻觉。
原生二进制、JS/Electron、.NET、WASM、EVM、Go/Rust、Flutter、Android、固件、网站、抓包、SQLite、逻辑信号……通过 Hopper/Ghidra/IDA/Kuna/JADX/Frida/GDB 等适配器统一供给,CLI 与 MCP 共享同一套工作流。
一条 npx rea-agents setup 即可注册到 Claude Code、Codex、Cursor、Gemini、Grok 等 21 种 AI 编程客户端,并下发配套工作流技能。它卡位的是「Agent 看懂闭源软件」这一新兴刚需。
大模型能写代码,却看不了闭源软件——逆向工具碎片化、输出非结构化、结论无法验证、且容易把猜测当事实。REA 把这些工具统一成 Agent 能调用的 MCP 工具,并在返回结果时强制携带证据与局限。
Agent 通过 MCP 提出分析师问题(如「Notes 应用的搜索是怎么实现的」),REA 选择并驱动本地引擎、追踪相关代码,返回带证据的伪代码 / 汇编 / 模块图 / 调用关系;Agent 据此追问、解释、再实现与测试。所有分析在本地运行,不上传目标文件。
仓库首个提交(2026-04-14)名为 betterBinaryMCP – Enhanced MCP server for Hopper Disassembler,最初只是一个 Hopper 反编译器的 MCP 封装。半年内它演化为覆盖整个软件栈的分析平台,并在 6 个月内完成 2.x → 6.5.0 共 36 个版本。
下面所有数字均由仓库实算或官方接口抓取,不做估算凑整。它们共同勾勒出一个「体量中大型、测试密度极高、迭代速度异常」的代码库。
10 月单月 2,459 次提交、fix:feat ≈ 10:1,加上仓库中大量以 codex/、cursor/、chatgpt/、agent/ 命名的分支,表明这是一个由 AI Agent 大规模并行驱动的项目。其优势是能力与边界修复推进极快;潜在代价是高代码 churn、issue 数高达 932、以及对人工评审把关的强依赖(项目专门用 PR readiness 流程要求「人类必须对最终 diff 负责」)。
REA 采用清晰的领域驱动分层(DDD)+ 端口适配器(Hexagonal)架构。核心约束写在 AGENTS.md 第一条:依赖只能向内流动——领域语义与契约在最内,引擎专属代码绝不允许侵入领域 / 应用层。
桥接器 | 语言/规模 | 职责 |
|---|---|---|
| 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 原子分配 |
这是整个项目最值得研究的设计。逆向分析最大的风险不是「算错」,而是 Agent 把推断当事实、把缺失当不存在、并把不可追溯的结论写进实现。REA 的答案是:让每一条观察都成为一条可验证、可引用、不可篡改的「证据」。
证据 ID = 对其全部语义内容(含 raw_result、provider、置信度、局限)做规范化 SHA-256。解析时重算哈希,任何对已认证记录的篡改都会被立即拒绝。规范化哈希与显示路径解耦,换路径不破坏证据身份。
证据入库时 Object.freeze 递归冻结并记入 WeakMap;「已认证不可变」成为可识别的运行时事实,跨进程传递时用哈希而非引用判断一致性。
「观察到」与「推导」与「推断」严格分层;「来自出厂制品」与「分析师推断」权威不同。Agent 无法把一句猜测包装成与实测同等可信的结论。
EvidenceLedger 是会话级的不可变证据集合,幂等记录、冲突内容拒绝、整个证据包(bundle)先校验再原子合并。与此同时,无法确定的事实以 ResidualUnknown 记录,带状态机与修订历史(提出 / 证据补全 / 关闭)。
工具契约反复强调一条原则:「缺失的覆盖度是 unknown,不是 absence」——没扫到某个调用方,不等于调用方不存在;空的 facet 必须由生产者显式声明「已观察到为空」才可用于等价性比较。
Evidence 模型本质上是把学术论文的「引用 + 证据等级 + 局限性」传统,以及安全取证的「证据链(chain of custody)」思想,编码成了强类型的运行时对象。对于一个会被 LLM 自主编排、且结论会直接驱动代码生成的系统,这种「认识论卫生(epistemic hygiene)」是稀缺而正确的设计——它把「模型可能编造」这一不可消除的风险,用工程手段约束在可控范围内。
除了 Evidence,REA 在「与外部进程和操作系统打交道」这件高风险的事情上,沉淀了一套值得称道的安全原语。
逆向引擎要派生大量子进程,清理时必须能安全地终止自己派生的进程组。仅凭 PID + 可执行路径在进程退出 / PID 被复用后不足以证明所有权。REA 引入 Run Token(运行令牌):启动子进程前注入令牌,清理时扫描全表验证令牌、启动者身份、父 PID、进程组,只有令牌证明通过才发信号。「观察到的候选」不自动授权 kill。
每个提供者运行在私有 runtime root(POSIX 临时目录 / Windows 私有 NTFS),Ghidra 用临时项目 + 私有 home/cache,会话结束即删。所有外部进程有启动截止时间、消息大小上限、CPU/内存上限、有界文件读取(Linux prlimit、Windows Job Object),防止恶意 / 畸形文件拖垮宿主。
边界值用 {ok,value}|{ok:false,error} 显式建模,无法识别的身份/适用性必须保持 unknown,而不是当成「缺失 / 外来 / 已对齐」。能力集成遵循 fail-closed:只要作用域、授权、副作用、验证方式存在未决问题,就拒绝接入。Zod 严格契约(strictObject)拒绝任何未声明字段。
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 的实际覆盖度」精确回报。
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 检查只读取文件不运行应用;运行时捕获以用户权限运行或交互目标,每个指南单独说明其副作用。
一个会反编译、会启动引擎、会附加进程的工具,安全表述极易夸大。REA 罕见地反复强调「这不是沙箱」,并把可信边界落到具体机制上。
项目明确不支持:绕过 DRM / 授权校验 / 反作弊;开发游戏作弊或篡改在线服务;绕过认证与访问控制;复制专有软件与受保护资产;规避 AI 模型提供商的安全策略;倒卖 / 共享 AI 账号。
同时诚实声明:REA 不防御「已经以同一系统用户运行的恶意进程」;打开不可信二进制,等于以该用户权限把解析委托给所选引擎——这是用户必须自行承担的风险,工具不做虚假承诺。
在「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 桥接器的契约测试。
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/远程均标注未验证。模拟提供者不被承认为真实行为证据。
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 增量编排。
运行时仅 40 个直接依赖,没有重型框架,几乎全是「单一职责」的专用解析与基础库:Babel(JS AST)、zod(校验)、playwright-core(浏览器)、@modelcontextprotocol(MCP)、node-pty(终端)、@electron/asar、evmole、openpgp(签名校验)、流式 JSON 解析等。第三方引擎代码以 third_party(git submodule)方式引入并保留各自许可与上游不变性,避免 fork 后漂移。
REA 的爆发不是偶然:它把「逆向能力」做成了 AI 编程客户端的通用插件,又用多语言文档降低了全球采纳门槛。
setup 自动注册并下发配套工作流技能(含备份与 dry-run):
未列出的客户端可用手动 stdio MCP 注册;同一份能力也可纯 CLI 使用,不依赖任何 Agent。
这一节不是复述文档,而是在本机真实跑通后的操作手册。下列命令均在 macOS arm64(Darwin 24.6)、Node v22.23.2、npm 10.9.8 上实测;标注 已验证 的步骤附带真实输出。
需要 Node 22.19+ / 24.11+ / 26+ 与 npm。无需 clone 仓库、无需编译。本机 v22.23.2 通过
静态 JS/Electron、.NET、Go/Rust 元数据、SQLite 零引擎即可跑;原生二进制反汇编才需自备 Hopper / Ghidra / IDA / Kuna。setup 不会代装这些引擎。
所有分析在本地进行,目标字节不出机器。仅 npx 首次拉包与 setup 联网;Linux 上部分能力需 procps 兼容的 ps。
CLI 与 MCP 服务器共享同一批 application workflow 与 Evidence 契约:命令行能拿到的证据,Agent 也能拿到,反之亦然。
以 stdio 子进程方式把 REA 注册进你的 AI 编程客户端;之后用自然语言描述目标,Agent 自行选择工具、追溯证据、在失败处闭环。
每次调用是独立进程,结果落盘即可复用;--json 输出给 jq / 脚本,默认 TOON 格式给人看。适合一次性侦察与自动化流水线。
多选列表里勾选要配置的 Agent(已检测到的新客户端默认不勾选,检测≠授权)。setup 会同时给出 MCP 注册与工作流技能的安装计划;Hopper 是单独的可选项,需另批。
非交互或脚本里,用 --dry-run --json 拿到只读计划(状态 planned、退出码 0)。下面是对 Codex 干跑的真实结果——只计划一个 configure_client 动作,写配置前自动备份,命令版本锁定为 6.5.0。
交互模式下确认计划后回车;自动化里用 --yes 配合明确的 --client(或 --all-detected)。写文件时保留无关配置与注释、创建备份、原子替换并回读校验;发现既有配置损坏会整体中止(fail-closed)。
按完成提示重启对应 Agent(Claude Desktop 需完全退出再开,否则运行中的应用会覆盖注册)。随后 npx -y rea-agents@latest doctor --json 检查注册、技能与引擎就绪状态。
本质就是一条 stdio 服务器启动命令:npx -y rea-agents@6.5.0 mcp。setup 帮你把它写进各客户端的 MCP 配置并锁定版本;你也可以在支持自定义 MCP 的客户端里手动添加这一行。本机实测该服务器启动后 healthy=true,实出 207 个工具 / 6 个 prompt,与目录 SHA-256 摘要完全一致。
最能快速验证 REA 价值、且不需要任何逆向引擎的路径,是对一个解压后的 JS/Electron 目录或 .asar 做静态应用图重建。我们用仓库自带的示例应用 notes-electron(6 个文件、4 个 JS:main / preload / renderer / csv)实跑。
关键在于它自动把跨进程 IPC 边界串成了一条可追溯的链——renderer 的调用经 preload 的 contextBridge 桥,精确配对到 main 进程的 handler,而不是孤立地报出字符串:
返回的图边带 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)。标准做法是落盘后按需投影:
分析原生可执行文件需要 Hopper / Ghidra / IDA / Kuna 之一(BYO:setup 不代装、不升级)。先看自己有哪些可用能力,再开始分析:
当只有一个可用 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。
你手上的目标 | 首选命令 / 工具 | 是否需要引擎 |
|---|---|---|
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-resources | JADX/APKTOOL + adb |
固件镜像 | inspect-firmware-regions · extract-firmware | Binwalk/Unblob |
WASM / EVM 字节码 | inspect-wasm-* · inspect-evm-interface | 内置 (WABT/evmole) |
抓包 / 流量文件 | inspect-web-network-capture(HAR/SAZ) | 无需 / 可选 tshark |
已开浏览器 / 网页运行时 | list-browser-targets · capture-browser-scenario | CDP / Playwright |
动态运行 / 插桩 | capture-process · Frida 系列 · debug-with-gdb | 会执行,需隔离 |
环境:macOS arm64 / Node v22.23.2 / npm 10.9.8,包版本 rea-agents@6.5.0。时间 2026-10-15。
说明:未实际安装/反编译的能力(Hopper/Ghidra/IDA 原生反汇编、Frida 动态插桩、真机 adb 等)未在本环境验证——它们需要额外的商业/外部引擎或设备;本清单仅对“本机真实执行过”的项标“通过”。
现象 | 处理方式 |
|---|---|
提示 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 自身不隔离不可信程序:动态分析(capture-process / Frida / GDB / 浏览器场景)会以你的用户权限真实启动目标。处理可疑样本请在隔离 VM 或一次性环境中进行。setup 也绝不安装 Homebrew、Node、Java、Ghidra/IDA 等任何系统依赖——只配置它自己。
优势与风险都来自同一个根源:它用前所未有的速度,把一个高风险领域(逆向 + 自主 Agent)工程化。
评分为分析者基于公开材料的定性判断,非客观测量;稳定性一项已显著反映项目仅 6 个月、迭代极快的事实。
角色 / 场景 | 建议 | 注意 |
|---|---|---|
| 安全研究员 / 恶意软件分析 | 强烈推荐;证据溯源 + 多引擎 + 离线静态分析贴合取证工作流 | 不可信样本放入隔离 VM;REA 非沙箱 |
| 想用 Agent 复刻闭源功能的开发者 | 推荐;JS/Electron 零引擎门槛,原生配合 Hopper/Ghidra | 尊重知识产权与许可,仅在授权范围内 |
| CTF / 教学 / 软件保存 | 非常适合;Ghidra 免费、DOS/旧架构支持、案例完整 | 部分能力需 Linux 工具链 |
| 企业做供应链 / 遗留系统审计 | 值得评估;统一接口与证据包便于团队留痕 | 项目年轻,建议锁定版本、自担维护风险 |
| 仅想看懂开源仓库 | 不必要;Skill 明确提示此类场景用普通代码工具即可 | 不要为了用而用 |
REA 是 2026 年「Agent 原生开发工具」浪潮中一个兼具技术野心与工程纪律的标杆项目。它真正的护城河不是「接了多少反编译器」,而是把证据、未知、所有权与失败闭合做成了不可绕过的内核契约——这为「如何让会犯错的 AI 安全地操作高风险工具」提供了一份可直接借鉴的参考实现。若能在高速扩张中守住稳定与验证质量,它有潜力成为 Agent 时代理解软件世界的基础设施。当下的建议是:积极学习与采用、锁定版本使用、对动态能力保持隔离、对其长期稳定性保持合理审慎。