大数跨境

用 REA 让 Claude 逆向分析应用:从 Electron Bundle 到 Native Binary 的完整设置指南

用 REA 让 Claude 逆向分析应用:从 Electron Bundle 到 Native Binary 的完整设置指南 AI大模型观察站
2026-10-23
3
导读:REA 是一个开源 MCP server,可让 Claude 分析二进制文件、Electron bundle、JavaScript 和网站,并通过 Evidence 记录证据与未解决问题。本文介绍其安

REA一个开源 MCP server,可让 Claude 深入分析二进制文件、Electron bundle 和网站,并明确指出它无法确定的内容。

你可能在别人的应用中看到一项功能,并想知道它是如何实现的。也许是 Notion 处理富文本粘贴的方式,或者某款老 DOS 游戏如何让一圈子弹瞄准玩家。

答案通常藏在编译后的二进制文件或经过 minify 的 Electron bundle 中。要找到它,往往得花一个下午使用 Ghidra,还要眯着眼睛盯着伪代码看半天。

REA 是 Reverse Engineer Anything 的缩写。它能把这项工作交给你的 coding agent。你只需用普通语言询问 Claude 有关你电脑上某个应用的问题。

Claude 会调用 REA 的工具。REA 会返回代码、文件和行号引用,以及一份列出尚未解决问题的清单。

该项目采用 MIT license,通过 npm 以 rea-agents 发布,并在本地进行分析。

这就是它的宣传点,而且确实很吸引人。不过,REA 最有用的地方,是演示 GIF 中看不到的那部分。

稍后再说。先来了解它是什么,以及如何将它接入 Claude。



看看这些!

想把这些想法付诸实践吗?我准备了三项资源,帮助你开始:

  • AI 工程师的 Python - 学习如何使用 Python 构建 AI 软件。

  • 真正可用的 RAG - 构建、测试和排查与文档协同工作的 AI 系统。

  • 10 天掌握 Claude:面向开发者的实用课程

  • 原来 Claude 还能这么用30 个实用技巧,包含可复制的 prompts、37 页指南、练习文件和示例工具。

这些是我的产品。选择最符合你构建目标的一项即可。


REA 到底是什么

在底层,REA 是一个 MCP server。MCP,即 Model Context Protocol,是一种接口,让 Claude Code、Claude Desktop、Cursor、Codex 以及许多其他 agents 能够调用外部工具。

注册 REA 后,Claude 就能像使用常见的文件和 shell 工具一样,调用 open_binary 和 close_binary 等工具。

设置过程还会安装一个 skill,其中包含调查步骤,帮助 agent 确定工作顺序。

而且,agent 能做的所有事情,你也都可以通过终端里的 rea 命令自行完成。工作流相同,输出格式也相同。

**值得注意的是这项设计决策:**REA 不是 decompiler。对于 native code,它会调用逆向工程师已经信赖的工具,例如 Hopper、Ghidra 或 IDA。

对于 JavaScript 和 Electron,它会自行进行静态分析。对于网站,它会通过 DevTools protocol 驱动 Chrome 系浏览器。它本身负责的是编排和记录。

项目将这些记录称为 Evidence。每项结果都会记录发现的来源、直接观察到的内容、推断出的内容,以及仍未解决的问题。

Claude 会读取完整记录,包括其中的缺口。这会影响你对它接下来给出的结论的信任程度。


它可以检查哪些内容

README 列出了二十多种目标类型。以下是大多数开发者最常用的几种:

此外还有不少较少见的类型:WASM modules、EVM bytecode、SQLite databases、firmware images(通过 Binwalk 或 Unblob)、packet captures(通过 TShark)、HAR files、录制的 Linux crashes、Flutter apps,以及通过 adb 连接的 Android 设备。

其中有几种仅支持 Linux,因此在据此规划之前,请先查看仓库 docs 文件夹中对应的指南。

还要记住一个区别:静态检查 JavaScript 和 .NET 时只会读取文件。

而 runtime capture 会以你的用户权限实际运行目标程序。对待这类工作流时,应当像对待运行任何未知可执行文件一样谨慎。


开始之前

你需要 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
# reopen the terminal, then:
fnm install 24
fnm use 24
fnm default 24

**Linux 注意事项:**Ghidra、JADX、firmware tools 和静态 JavaScript 分析都需要 REA 的 PATH 中存在与 procps 兼容的 ps,REA 会用它检查进程所有权。桌面发行版通常已包含它,但精简版 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 入门页面建议使用的 prompt,也能让你在整个过程中审核并批准操作:


   
   
   
   
    
   
   
   
   Install REA and connect it to this coding agent using npx rea-agents@latest setup.
Show me the setup plan for approval, then verify the installation.

方式 B:自己运行安装向导

在另一个终端中运行:


   
   
   
   
    
   
   
   
   npx rea-agents@latest setup --client claude_code

省略 --client 后,向导会检测这台机器上所有受支持的 agent,并默认选中它们。

使用方向键移动,按 Space 切换选项,按 Enter 继续。如果 npm 询问是否下载软件包,输入 y。

这个向导刻意设计得很谨慎。在修改任何内容之前,它会先显示计划:将编辑哪个配置文件、skill 将安装到哪里,以及是否需要安装 Hopper。

只有在你确认后,才会进行修改。它会备份现有配置,不会触碰无关的 MCP 条目,以原子方式写入,并将注册信息固定到当前运行 setup 的确切 REA 版本,避免更新时悄悄改变行为。

先跳过 Hopper;第一次练习不需要它。

想查看计划但不应用?添加 --dry-run。要用脚本执行?--json 会输出计划;与显式指定的 --client 一起使用时,--yes 会应用计划。


重启并验证

退出 Claude Code,再重新启动,让它加载新的 server。然后在终端中检查:


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

你需要看到 "healthy": true。在 Claude Code 中,/mcp 会列出已连接的 servers;也可以直接询问:


   
   
   
   
    
   
   
   
   Check that REA is connected and show me which REA tools you can use.

手动注册

如果你更愿意跳过向导,REA 也记录了它所需的 server 命令: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 中设置 REA

**Desktop 也能用,但有一个注意事项:**必须先彻底退出应用。只关闭窗口还不够。

在 macOS 上按 Cmd+Q;在 Windows 上,还要通过系统托盘图标退出。然后在 Claude 之外打开终端,运行:


   
   
   
   
    
   
   
   
   npx rea-agents@latest setup --client claude_desktop

批准计划,重新打开 Claude,然后让它列出 REA 的工具。如果你手动配置,claude_desktop_config.json 中的条目应遵循 REA 为所有 MCP client 发布的配置格式:


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

Desktop 适合用来询问有关某个应用的问题。

如果你想完成从理解功能到实际构建的完整流程,Claude Code 更合适,因为它可以直接操作你的代码库。


添加 native 分析引擎

JavaScript、Electron、.NET、Go 和 Rust 目标不需要额外配置。编译后的 native code 则需要一个 provider。

各 provider 的运行平台如下:


Hopper:简单的选择

重新运行 setup 并勾选 Hopper。REA 会查找你已有的安装,或者建议下载官方软件包;它会检查软件包的大小和 digest,并在你批准后安装。

在 Linux 上,它支持 Ubuntu 24.04+、Fedora 41+、Nobara 44+、Arch、CachyOS 和 Omarchy,并会在私有虚拟显示器中运行演示,不会占用你的桌面。

Hopper 是商业软件,演示版存在供应商设定的限制。在 macOS 上,首次打开时,你必须选择演示模式或激活 license;这必须在 REA 将要使用的同一用户会话中完成。

如果 macOS 询问是否授予 Automation 权限,请在 System Settings、Privacy & Security、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”),解压后,将两个路径都提供给 REA:


   
   
   
   
    
   
   
   
   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 clients 不会继承你的 shell 环境变量,因此这一步很重要。之后重新启动 Claude。

不确定 Java 安装在哪里?运行 java -XshowSettings:properties -version,它会输出 java.home。

在 Apple Silicon 或 Linux arm64 上,你还需要先构建 Ghidra 的 native decompiler;REA 的安装文档中提供了相关步骤。Windows 支持目前仍属实验性,而且仅支持只读操作。

**一个不错的安全细节:**每个 REA session 都会在临时 Ghidra project 中打开二进制文件,使用隔离的 cache 和 config 路径,传入 -readOnly,并在之后删除该 project。

你的 Ghidra projects 不会被打开。


IDA:自备 license

IDA 通过上游 IDA MCP server 接入。你需要在一个小型 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

如果有多个 provider 可以处理目标,请显式指定:在 CLI 中使用 --provider ghidra,在 MCP 中使用 provider_id,或者将 REA_ANALYSIS_PROVIDER 设为默认值。

对于非常大的二进制文件,可以调高 REA_GHIDRA_STARTUP_TIMEOUT_MS 或 REA_HOPPER_STARTUP_TIMEOUT_MS。


第一次调查

REA 网站提供了一个很小的 Electron app 示例,只有六个文件,并带有一个 Export notes 按钮。它很适合作为第一个目标,因为你可以自行核实每项结论。

给 Claude 发送以下内容:


   
   
   
   
    
   
   
   
   Download https://rea.tools/examples/notes-example.zip into a new example folder and unpack it.
Use REA to find what happens when I click Export notes. Show where notes.csv is written,
which fields it contains, and the relevant files and lines.

不需要安装 Electron。REA 会读取文件、映射 entrypoints、modules 和进程边界,然后由 Claude 追踪点击操作。renderer.js 调用 window.notes.exportCsv()。preload.js 会将其转换为 notes:export channel 上的 IPC 调用。

main.js 中的 handler 会通过 csv.js 格式化 notes,并将 notes.csv 写入 Downloads 文件夹,列名为 id 和 title。

REA 结果中的 IPC 部分如下:


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

看最后一行。如果 channel 名称是在运行时通过变量拼接而成的,REA 就会将其标记为 ambiguous,而不是猜测对应关系。

REA 指南还特别指出,文件路径是从代码推断得出的;如果你想确认实际执行的内容,可以进行 runtime capture。

“无法将此项配对”的计数,比“找到了”的计数更有价值。

想自己解压?下载 ZIP,然后告诉 Claude:Use REA to inspect the app at /absolute/path/to/notes-example. Find how it exports data and show the relevant files and lines.


如何使用 REA 编写 Claude prompt

README 中的核心工作流是先理解,再构建:


   
   
   
   
    
   
   
   
   Understand how search works in the Notes app, show me the evidence,
and build a similar feature for my project.

把 Notes 换成你电脑上的任意应用即可。

对于编译后的程序,请指定 provider 和路径:


   
   
   
   
    
   
   
   
   Use REA with Ghidra to inspect /absolute/path/to/program. List its functions and
strings, then explain the part that handles user input with references to the code.

对于打包后的 Electron app,将其 app.asar 提供给 Claude。在 Windows 上,它通常位于 AppData\Local\Programs\<App>\resources。

在 macOS 上,右键点击应用,选择“显示包内容”,然后在 Contents/Resources 中查找。

在 Linux 上,可以尝试 /opt/<App>/resources。

之后可以继续追问,例如:Follow notes:export to its handler. Which inputs reach the CSV writer, and what happens if writing the file fails?

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

  1. 始终提供绝对路径;如果路径包含空格,请加上引号。

  2. 明确要求 Claude 提供证据和未解决的问题,否则它可能会在总结时省略这些内容。

  3. 如果安装了多个 provider,请指定名称,以免遇到选择不明确的错误。

  4. 对于耗时较长的调查,请让 Claude 在关闭二进制文件时传入 snapshot_path,以便后续 session 复用已完成的分析。

  5. 如果静态分析留下了未解决的问题,请改用 runtime observation:browser、Electron 或 process capture 工作流。


不通过 agent 使用 REA

有时你只需要原始输出。

全局安装 CLI:


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

注意,不带 --global 的普通 npm install rea-agents 只会将 binary 安装到项目的 node_modules/.bin 中。对于一次性运行,可以完全跳过安装:


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

配置好 provider 后可使用的 native 命令:


   
   
   
   
    
   
   
   
   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 调用都会启动独立进程,因此请保存需要复用的结果。Snapshots 可以帮你完成这件事:


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

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

可以使用 rea evidence-import、rea evidence-export 和 rea compare 来验证、导出和比较 Evidence bundles,便于发现应用两个版本之间的变化。

默认终端输出格式是 TOON,这是一种紧凑格式。通过管道传输时,请传入 --json。

退出代码 0 表示操作已完成,即使结果中包含部分证据或未解决的问题也一样。因此请阅读结果,不要只依赖状态码。通过管道传给 jq 时,请启用 set -o pipefail,避免错误被吞掉。


更新和排查问题

REA 发布很快,许多版本都包含 bug fixes,因此排查问题前先更新:


   
   
   
   
    
   
   
   
   # global install
rea update

   
   
   
   
    
   
   
   
   # npx users: refresh the agent registration, then restart 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.cmd 代替 npx。

  4. Claude 在 WSL 中运行:在 WSL 内安装 Node 和 REA,并在其中使用 Linux 路径。

要卸载 REA,请运行 npx rea-agents@latest uninstall。它只会删除 REA 自己的注册信息和 skill 文件。添加 --purge-data 还会清除缓存和状态数据。rea doctor 本身严格为只读操作。


REA 无法替你完成的事

现在来谈我之前承诺的部分。REA 的 README 对其限制说明得格外直白,而这些限制恰恰体现了这个产品的实际边界。

在法律方面,该项目将自身用途限定为合法研究、教育、互操作性、软件保存,以及检查你拥有或获准检查的软件。

它不会授予 Hopper、IDA 或 JEB 的 license。破解副本和共享密钥也明确不在允许范围内。

如果你雇主的法律团队对逆向分析竞争对手的应用有规定,那么即使是 Claude 在发起分析,这些规定依然适用。

隐私方面,情况分两部分。REA 在本地分析目标,不会上传你的应用。

但 Claude 会收到工具结果,并根据模型 provider 自己的数据政策处理这些结果。如果二进制文件中包含你不能分享的内容,在让 agent 检查它之前,请记住这一点。

README 中还有一条值得重申的供应链警告:只从官方仓库、rea.tools 或 rea-agents npm package 安装 REA。

一个名字相似且复制了 README 的仓库,并不能证明它可信。而一个请求控制你的 disassembler 的工具,正是攻击者最可能仿造的目标。

还有一个技术限制,也是最值得关注的地方:REA 不会为你生成完美的重建结果。

Ghidra 生成的伪代码不是原始源代码,REA 在自己的文档中也明确说明了这一点。无法解析的计算调用仍会标记为未知。

REA 提供给 Claude 的,是足够可靠的证据,让它能够编写重新实现并进行测试。

rea.tools 上的 DX‑Ball 案例研究展示了规范的做法。重建出的声音 pan 函数经过了原始 x86 代码中 3,205 个用例的验证,并且能够复现全部 63 个编译后的函数字节。

这不是靠一个 prompt 就能做到的。他们将 REA 的每个回答都当作需要验证的主张,才得到了这个结果。

这才是你应该带走的习惯。

让 Claude 负责挖掘,每次都仔细阅读未知项清单,并随手准备好测试 harness。


【声明】内容源于网络
0
0
AI大模型观察站
专注于人工智能大模型的最新进展,涵盖Transformer架构、LLM训练优化、推理加速、多模态应用等核心技术领域。通过深度解析论文、开源项目和行业动态,揭示大模型技术的演进趋势,助力开发者、研究者和AI爱好者把握前沿创新。
内容 440
粉丝 0
AI大模型观察站 专注于人工智能大模型的最新进展,涵盖Transformer架构、LLM训练优化、推理加速、多模态应用等核心技术领域。通过深度解析论文、开源项目和行业动态,揭示大模型技术的演进趋势,助力开发者、研究者和AI爱好者把握前沿创新。
总阅读16.8k
粉丝0
内容440