REA:让 Claude 逆向工程几乎任何应用,完整配置指南
REA 是一个开源 MCP 服务器,让 Claude 调用 Hopper、Ghidra、IDA 等工具分析二进制、Electron、网站和固件,并以证据与未知项约束结论。
编者说明:本文根据 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。

你可能见过别人应用里的某个功能,并好奇它究竟如何工作。也许是 Notion 处理富文本粘贴的方式,也许是一款老 DOS 游戏如何让一圈子弹瞄准玩家。
答案通常藏在编译后的二进制文件或压缩混淆的 Electron 包里。过去,要找出答案往往意味着在 Ghidra 中泡一下午,对着伪代码眯眼研究。
REA 是 Reverse Engineer Anything 的缩写,它把这一个下午的工作交给你的编码 Agent。你只需用自然语言向 Claude 询问本机某个应用的问题,Claude 就会调用 REA 的工具;REA 返回代码、文件与行号引用,以及无法解析的内容清单。
项目采用 MIT 许可证,通过 npm 以 rea-agents 发布,并在本地完成分析。
这是一个很有吸引力的卖点,但 REA 最实用的部分其实不是演示 GIF 里出现的那些内容。后面会讲到这一点。先来看看它究竟是什么,以及如何接入 Claude。
作者的配套资源
原作者还提供了几项用于实践这些想法的资源:
- Python for AI Engineers:学习使用 Python 构建 AI 软件。
- RAG That Works:构建、测试并排查能处理文档的 AI 系统。
- Python Office Automation Kit:练习五种常见办公自动化工作流。
- I Didn’t Know Claude Could Do That:30 个可复制提示词、37 页指南、练习文件与示例工具。
以上是原作者自己的产品,可根据你的学习目标选择。
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 的核心职责是编排与记录。

这种记录机制被项目称为 Evidence(证据)。每一项结果都会说明发现来自哪里、哪些内容是直接观察到的、哪些是推断出来的,以及哪些问题仍未解决。
Claude 会读取完整记录,包括其中的空白与未知项。这会直接改变你对后续答案可以信任到什么程度。

REA 可以分析什么
README 列出了 20 多种目标类型。大多数开发者最常用的包括:
- 原生二进制程序,以及由 Hopper、Ghidra 或 IDA 支持的库文件;
- JavaScript、Node.js 和 Electron 应用;
- .NET 程序;
- Go 与 Rust 二进制;
- 网站和浏览器运行时;
- Android APK 与 iOS 应用包。

此外还有一长串较少见的目标: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.LTSmacOS 可以使用官方 .pkg 安装包,或运行:
brew install nodeLinux 建议通过 fnm 安装,因为发行版软件源通常落后于 22.19:
curl -fsSL https://fnm.vercel.app/install | bash
# 重新打开终端,然后运行:
fnm install 24
fnm use 24
fnm default 24Linux 注意事项: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:最省事的路线
重新运行安装程序并勾选 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 --jsonGhidra:免费,但要求严格
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 写入器?如果写文件失败,会发生什么?以下习惯能明显改善结果:
- 始终提供绝对路径;路径包含空格时要加引号。
- 明确要求列出证据与未知项,否则 Claude 可能在总结时略过它们。
- 安装了多个提供商时要指定名称,避免 provider 选择歧义。
- 长时间调查中,关闭二进制时让 Claude 传入
snapshot_path,以便后续会话复用已完成的分析。 - 静态分析仍留有未知项时,切换到浏览器、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 --jsonrea 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 版本、目标类型、复现步骤和错误输出。
常见问题包括:
- Claude 看不到 REA:彻底重启 Claude,再运行
doctor --client claude_code。 - Provider 失败:运行
npx -y rea-agents@latest doctor --provider ghidra --json,查看失败检查与修复方法。 - PowerShell 提示禁止运行脚本:把
npx换成npx.cmd。 - 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 放在手边。