REA:让 Claude 逆向工程几乎任何应用,完整配置指南

REA 是一个开源 MCP 服务器,让 Claude 调用 Hopper、Ghidra、IDA 等工具分析二进制、Electron、网站和固件,并以证据与未知项约束结论。

Share
REA 连接 Claude 与逆向工程工具,分析应用二进制、代码、网站和证据链

编者说明:本文根据 Faisal Haque 发表于 Artificial Intelligence in Plain English 的文章 《REA Lets Claude Reverse Engineer Almost Any App. Here’s How to Set It Up》翻译整理。原文发表于 2026 年 10 月 17 日。逆向工程可能受到软件许可、版权与当地法律限制,请只分析自己拥有或已获授权研究的目标。

快速结论:REA(Reverse Engineer Anything)是一个开源 MCP 服务器,让 Claude Code、Claude Desktop、Cursor、Codex 等 Agent 调用成熟的逆向工具,分析原生二进制、Electron、JavaScript、.NET、网站、固件等目标。它最有价值的不是“自动反编译”,而是把证据、文件与行号、推断过程以及尚未解决的问题一起交给 Agent。

REA 让 Claude 分析二进制、Electron 应用与网站
REA 把逆向分析工具连接到 Claude 等编码 Agent。图片来源:原文(AI 生成)

你可能见过别人应用里的某个功能,并好奇它究竟如何工作。也许是 Notion 处理富文本粘贴的方式,也许是一款老 DOS 游戏如何让一圈子弹瞄准玩家。

答案通常藏在编译后的二进制文件或压缩混淆的 Electron 包里。过去,要找出答案往往意味着在 Ghidra 中泡一下午,对着伪代码眯眼研究。

REA 是 Reverse Engineer Anything 的缩写,它把这一个下午的工作交给你的编码 Agent。你只需用自然语言向 Claude 询问本机某个应用的问题,Claude 就会调用 REA 的工具;REA 返回代码、文件与行号引用,以及无法解析的内容清单。

项目采用 MIT 许可证,通过 npm 以 rea-agents 发布,并在本地完成分析。

这是一个很有吸引力的卖点,但 REA 最实用的部分其实不是演示 GIF 里出现的那些内容。后面会讲到这一点。先来看看它究竟是什么,以及如何接入 Claude。

作者的配套资源

原作者还提供了几项用于实践这些想法的资源:

以上是原作者自己的产品,可根据你的学习目标选择。

REA 到底是什么

从底层看,REA 是一个 MCP 服务器。MCP(Model Context Protocol,模型上下文协议)就像一个插头,让 Claude Code、Claude Desktop、Cursor、Codex 以及许多其他 Agent 能够调用外部工具。

注册 REA 后,Claude 会在常用的文件与 Shell 工具旁看到 open_binary、close_binary 等新工具。

安装过程还会加入一个 Skill,也就是一套调查指令,让 Agent 知道应该按什么顺序工作。Agent 能做的所有事情,你也可以在终端中通过 rea 命令亲自执行,工作流和输出格式完全相同。

这里有一个值得注意的设计决定:REA 本身不是反编译器。处理原生代码时,它驱动逆向工程师已经信任的工具,包括 Hopper、Ghidra 或 IDA;处理 JavaScript 与 Electron 时,它自己进行静态分析;处理网站时,它通过 DevTools 协议驱动 Chrome 家族浏览器。REA 的核心职责是编排与记录。

REA 通过 MCP 编排 Claude 与多种逆向分析工具
REA 负责连接 Agent、目标文件和成熟分析引擎。图片来源:原文(AI 生成)

这种记录机制被项目称为 Evidence(证据)。每一项结果都会说明发现来自哪里、哪些内容是直接观察到的、哪些是推断出来的,以及哪些问题仍未解决。

Claude 会读取完整记录,包括其中的空白与未知项。这会直接改变你对后续答案可以信任到什么程度。

REA Evidence 记录观察、推断、来源和未知项
REA 的 Evidence 结构让结论可以追溯,也明确保留未解决的问题。图片来源:原文(AI 生成)

REA 可以分析什么

README 列出了 20 多种目标类型。大多数开发者最常用的包括:

  • 原生二进制程序,以及由 Hopper、Ghidra 或 IDA 支持的库文件;
  • JavaScript、Node.js 和 Electron 应用;
  • .NET 程序;
  • Go 与 Rust 二进制;
  • 网站和浏览器运行时;
  • Android APK 与 iOS 应用包。
REA 支持的应用、二进制、网站与数据目标
REA 支持多种静态与运行时分析目标。图片来源:原文(AI 生成)

此外还有一长串较少见的目标:WASM 模块、EVM 字节码、SQLite 数据库、固件镜像(通过 Binwalk 或 Unblob)、网络数据包(通过 TShark)、HAR 文件、已记录的 Linux 崩溃、Flutter 应用,以及通过 adb 连接的 Android 真机。

其中一些功能只支持 Linux,所以在围绕某项能力制定计划前,应先查看仓库 docs 文件夹中的对应指南。

还要记住一个重要区别:JavaScript 与 .NET 的静态检查只读取文件;运行时捕获会用你的用户权限真正启动目标。对待这些工作流,应像对待任何未知可执行文件一样谨慎。

开始前的准备

你需要 Node.js 22.19 或更高版本、24.11 或更高版本,或者 26 及以上版本。npm 会随 Node.js 一起安装。先检查当前版本:

node -v
npm -v

如果版本过旧,REA 官网建议使用 Node 24 LTS。

Windows:

winget install --exact --id OpenJS.NodeJS.LTS

macOS 可以使用官方 .pkg 安装包,或运行:

brew install node

Linux 建议通过 fnm 安装,因为发行版软件源通常落后于 22.19:

curl -fsSL https://fnm.vercel.app/install | bash
# 重新打开终端,然后运行:
fnm install 24
fnm use 24
fnm default 24

Linux 注意事项:Ghidra、JADX、固件工具与静态 JavaScript 分析,都要求 REA 的 PATH 中存在兼容 procps 的 ps 命令,以便检查进程归属。桌面 Linux 一般自带,精简 Docker 镜像则经常缺失。

最后创建一个工作目录,并在其中操作:

mkdir rea-work
cd rea-work

在 Claude Code 中配置 REA

Claude Code 是 REA 最合适的使用环境,因为 Claude 理解目标功能后,还能读取你的项目、运行构建并编写重新实现。

如果尚未安装 Claude Code:

# macOS / Linux
curl -fsSL https://claude.ai/install.sh | bash

# Windows PowerShell
irm https://claude.ai/install.ps1 | iex

重新打开终端,回到 rea-work,运行 claude,然后使用 Claude 订阅或 API 账户登录。接下来有两条路线。

路线 A:让 Claude 帮你安装

把下面的提示词粘贴到 Claude Code。这是 REA 官方入门页推荐的方式,而且会让你始终保留审批权:

使用 npx rea-agents@latest setup 安装 REA,并将它连接到这个编码 Agent。先向我展示安装计划并等待批准,然后验证安装结果。

路线 B:自己运行安装向导

在另一个终端中运行:

npx rea-agents@latest setup --client claude_code

如果省略 --client,向导会检测机器上所有支持的 Agent,并默认选中全部。使用方向键移动、空格切换、回车继续。如果 npm 询问是否下载软件包,输入 y。

向导会先打印计划,再对系统进行任何修改:它会列出要编辑的配置文件、Skill 的安装位置,以及是否希望安装 Hopper。只有在你确认后才会真正更改。

它会备份现有配置,保留无关的 MCP 项,以原子方式写入,并把注册项固定到执行安装的 REA 精确版本,避免后续更新在你不知情时改变行为。

第一次练习可以先跳过 Hopper。只想查看计划而不执行,可添加 --dry-run。自动化脚本中,--json 会输出计划;当同时明确指定 --client 时,--yes 才会自动应用。

重启并验证

退出 Claude Code 并重新启动,让它加载新的服务器。然后在终端检查:

npx -y rea-agents@latest doctor --client claude_code --json

你要寻找的是 "healthy": true。在 Claude Code 中,/mcp 会列出已连接服务器;也可以直接问:

检查 REA 是否已经连接,并列出你可以使用的 REA 工具。

手动注册

如果想跳过向导,REA 文档给出的服务器命令是:

npx -y rea-agents@latest mcp

在 Claude Code 中注册:

claude mcp add rea -- npx -y rea-agents@latest mcp

需要注意两点。第一,手动注册不会安装配套 Skill,因此 Claude 拥有工具,却没有调查流程。第二,对任何需要可复现的环境,应把 @latest 换成精确版本,例如 rea-agents@6.4.0。

在 Claude Desktop 中配置

Claude Desktop 也可以使用 REA,但有一个容易踩的坑:必须先彻底退出应用,关闭窗口并不够。macOS 按 Cmd+Q;Windows 还要从系统托盘退出。然后在 Claude 之外打开终端并运行:

npx rea-agents@latest setup --client claude_desktop

批准计划,重新打开 Claude,然后让它列出 REA 工具。如果手动配置,claude_desktop_config.json 中的 MCP 条目如下:

{
  "mcpServers": {
    "rea": {
      "command": "npx",
      "args": ["-y", "rea-agents@latest", "mcp"]
    }
  }
}

Desktop 很适合询问某个应用如何工作。若要完成“理解功能,然后在自己的代码库中重新实现”的完整闭环,Claude Code 更有优势。

添加原生分析引擎

JavaScript、Electron、.NET、Go 与 Rust 目标不需要额外组件。编译后的原生代码则需要一个分析提供商。

Hopper、Ghidra 与 IDA 原生分析引擎对比
REA 可连接 Hopper、Ghidra 或 IDA 处理原生二进制。图片来源:原文(AI 生成)

Hopper:最省事的路线

重新运行安装程序并勾选 Hopper。REA 会寻找已有安装,或提出下载官方安装包;在你批准后,它会检查文件大小与摘要,再执行安装。

Linux 支持 Ubuntu 24.04+、Fedora 41+、Nobara 44+、Arch、CachyOS 与 Omarchy。演示版会在私有虚拟显示器中运行,不会接管桌面。

Hopper 是商业软件,演示版受供应商限制。在 macOS 上,首次打开时必须在 REA 将使用的同一用户会话中选择演示模式或激活许可证。如果 macOS 请求 Automation 权限,需要在“系统设置 → 隐私与安全性 → 自动化”中授权。检查命令:

npx -y rea-agents@latest doctor --provider hopper --json

Ghidra:免费,但要求严格

REA 要求精确使用 Ghidra 12.1.4,以及包含 javac 的 64 位 JDK 21 或更高版本。

它不会替你下载 Ghidra 或 Java。请从 Ghidra Releases 页面下载发行压缩包,而不是“Source code”,解压后设置路径:

export GHIDRA_INSTALL_DIR="/absolute/path/to/ghidra_12.1.4_PUBLIC"
export JAVA_HOME="/absolute/path/to/jdk-21"
npx -y rea-agents@latest doctor --provider ghidra --json
npx rea-agents@latest setup

设置环境变量后,要在同一个终端中重新运行 setup,这样路径才会写入 Claude 配置。GUI 客户端不会继承你的 Shell 环境,因此这一步很重要。完成后重启 Claude。

不知道 Java 在哪里,可以运行:

java -XshowSettings:properties -version

输出中的 java.home 就是路径。在 Apple Silicon 或 Linux arm64 上,还要先编译 Ghidra 的原生反编译器;REA 安装文档提供了步骤。Windows 支持目前仍属实验性,并且只读。

一个不错的安全设计是:每个 REA 会话都会把二进制放进临时 Ghidra 项目,使用隔离的缓存与配置路径,传入 -readOnly,并在完成后删除项目。它不会打开你自己的 Ghidra 项目。

IDA:使用你自己的许可证

IDA 通过上游 IDA MCP 服务器接入。用一个小型 JSON 文件描述该服务器,再把 REA 指向它:

export REA_IDA_MCP_CONFIG="/absolute/path/to/ida-mcp.json"
export REA_ANALYSIS_PROVIDER="ida"
npx -y rea-agents@latest doctor --provider ida --json
npx rea-agents@latest setup

如果多个提供商都能处理同一目标,可以通过 CLI 的 --provider ghidra、MCP 参数 provider_id,或长期默认值 REA_ANALYSIS_PROVIDER 明确指定。

处理非常大的二进制时,可以提高 REA_GHIDRA_STARTUP_TIMEOUT_MS 或 REA_HOPPER_STARTUP_TIMEOUT_MS。

第一次调查

REA 官网提供了一个只有六个文件的迷你 Electron 应用,里面有一个“Export notes”按键。它很适合作为第一个目标,因为每个结论都可以自行核对。

把下面的任务交给 Claude:

将 https://rea.tools/examples/notes-example.zip 下载到新的 example 文件夹并解压。使用 REA 找出点击 Export notes 后会发生什么。说明 notes.csv 写到哪里、包含哪些字段,并给出相关文件与行号。

不需要安装 Electron。REA 会读取文件,映射入口点、模块与进程边界,然后 Claude 沿着点击事件继续追踪:

  • renderer.js 调用 window.notes.exportCsv();
  • preload.js 把它转换成 notes:export 通道上的 IPC 调用;
  • main.js 中的处理器通过 csv.js 格式化笔记;
  • 最后把包含 id 与 title 两列的 notes.csv 写入下载文件夹。

REA 返回的 IPC 摘要如下:

{
  "literal_channels": 1,
  "renderer_transmissions": 1,
  "main_handlers": 1,
  "paired_renderer_transmissions": 1,
  "ambiguous_renderer_transmissions": 0
}

注意最后一行。如果通道名称是在运行时通过变量拼接出来,REA 会把它标记为 ambiguous,而不是猜一个匹配结果。

REA 指南甚至会说明:文件路径只是根据代码推断的;如果想确认实际执行情况,应该增加一次运行时捕获。“我无法完成配对”的计数器,往往比“我找到了”的计数器更有价值。

如果你想自己解压,只需告诉 Claude:

使用 REA 检查 /absolute/path/to/notes-example 中的应用。找出它如何导出数据,并展示相关文件与行号。

如何配合 REA 提示 Claude

README 中最重要的工作流是:先理解,再构建。

理解 Notes 应用中的搜索功能如何工作,展示证据,然后为我的项目构建类似功能。

把 Notes 换成机器上的任何已获授权应用即可。分析编译程序时,要明确提供商与路径:

使用 REA 和 Ghidra 检查 /absolute/path/to/program。列出函数与字符串,然后解释处理用户输入的部分,并引用相关代码。

对于打包后的 Electron 应用,应指向它的 app.asar:

  • Windows:通常位于 AppData\Local\Programs\<App>\resources;
  • macOS:右键应用,选择“显示包内容”,然后查看 Contents/Resources;
  • Linux:尝试 /opt/<App>/resources。

继续追踪时,可以这样追问:

沿着 notes:export 追踪到处理器。哪些输入到达 CSV 写入器?如果写文件失败,会发生什么?

以下习惯能明显改善结果:

  1. 始终提供绝对路径;路径包含空格时要加引号。
  2. 明确要求列出证据与未知项,否则 Claude 可能在总结时略过它们。
  3. 安装了多个提供商时要指定名称,避免 provider 选择歧义。
  4. 长时间调查中,关闭二进制时让 Claude 传入 snapshot_path,以便后续会话复用已完成的分析。
  5. 静态分析仍留有未知项时,切换到浏览器、Electron 或进程捕获等运行时观察。

不使用 Agent,也能直接使用 REA

有时你只需要原始输出。全局安装 CLI:

npm install --global rea-agents
rea --help

普通的 npm install rea-agents 没有 --global,只会把命令放到项目的 node_modules/.bin。一次性运行则完全不必安装:

npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

配置好 provider 后,原生分析常用命令包括:

rea analyze   /path/to/program --provider ghidra --json
rea search    /path/to/program "search" --provider ghidra --json
rea function  /path/to/program main --provider ghidra --json
rea decompile /path/to/program 0x1000 --provider ghidra --json
rea xrefs     /path/to/program 0x1000 --provider ghidra --json
rea trace     /path/to/program "search" --provider ghidra --json

rea providers --json 与 rea capabilities --json 会列出当前机器可用能力。每次 CLI 调用都是独立进程,因此需要保留的结果应写入 snapshot:

rea analyze /path/to/program --provider ghidra --snapshot /path/to/analysis/program.json

再次运行同一查询时,只要目标字节、操作、参数、provider 和设置都相同,REA 会先读取缓存结果,甚至不必启动 Ghidra。

Evidence bundle 可以通过 rea evidence-import、rea evidence-export 与 rea compare 验证、导出和比较,适合检查应用两个版本之间发生了什么变化。

默认终端输出使用紧凑的 TOON 格式;需要管道处理时传入 --json。退出码 0 只表示操作完成,不代表结果没有部分证据或未解决问题,所以必须阅读结果本身。与 jq 配合时,开启 set -o pipefail,避免错误被管道吞掉。

更新与故障排查

REA 发布节奏很快,许多版本都是 Bug 修复,因此排查前先更新:

# 全局安装
rea update

# npx 用户:刷新 Agent 注册,然后重启 Claude
npx rea-agents@latest setup

更新后重试同一任务。如果问题仍然存在,提交 GitHub Issue,并附上 REA 版本、目标类型、复现步骤和错误输出。

常见问题包括:

  1. Claude 看不到 REA:彻底重启 Claude,再运行 doctor --client claude_code。
  2. Provider 失败:运行 npx -y rea-agents@latest doctor --provider ghidra --json,查看失败检查与修复方法。
  3. PowerShell 提示禁止运行脚本:把 npx 换成 npx.cmd。
  4. Claude 运行在 WSL 中:在 WSL 内安装 Node 与 REA,并使用 Linux 路径。

卸载命令 npx rea-agents@latest uninstall 只删除 REA 自己的注册项与 Skill 文件;加上 --purge-data 才会清理缓存与状态。rea doctor 本身严格只读。

REA 不会替你做什么

这正是前面提到的关键部分。REA 的 README 对限制异常坦率,而这些限制其实才是产品真正的价值。

法律层面:项目把使用范围限定为合法研究、教育、互操作性、软件保存,以及你拥有或已获授权检查的软件。它不会替 Hopper、IDA 或 JEB 授权;破解版本与共享密钥被明确排除。如果雇主的法务团队对逆向竞争对手应用有意见,那么即使现在是 Claude 在提问,那些规定仍然有效。

隐私层面:REA 在本地分析目标,不会上传应用本身;但 Claude 会收到工具返回的结果,这些内容将按照模型提供商的数据政策处理。如果二进制包含不能分享的信息,在把 Agent 指向它之前必须认真评估。

供应链层面:只从官方仓库、rea.tools 或 npm 的 rea-agents 软件包安装。名字相似、README 被复制的仓库并不能证明任何事情;一个要求控制反编译器的工具,恰好也是攻击者最值得克隆的目标。

技术层面:REA 不会交付完美重建。Ghidra 的伪代码不是原始源码,REA 自己的文档也明确承认这一点。无法解析的计算调用仍会被标记为 unknown。

REA 给 Claude 的,是足以编写重新实现并进行测试的、落在证据上的信息。rea.tools 的 DX-Ball 案例展示了正确的做法:重建后的声音声像函数与原始 x86 代码进行了 3,205 组测试,并复现了全部 63 个已编译函数字节。

这不是一个提示词就能得到的结果,而是把 REA 的每一个答案都当作需要验证的主张。

让 Claude 负责挖掘,但每次都要阅读 unknown 清单,并把测试 Harness 放在手边。

来源