rea:基于 Node.js 与 MCP 的编程智能体逆向工程项目

Reverse engineer anything with agents, from app behavior down to native binaries.

分支243Tags40
文件最后提交记录最后更新时间
1 天前
6 天前
6 天前
14 小时前
3 个月前
6 天前
14 小时前
13 小时前
11 天前
3 天前
7 天前
22 小时前
13 小时前
13 小时前
13 小时前
22 天前
14 小时前
21 天前
7 天前
27 天前
10 天前
3 个月前
11 天前
6 天前
9 天前
9 天前
21 小时前
6 天前
21 小时前
22 天前
6 个月前
5 天前
8 天前
22 小时前
11 天前
10 天前
9 天前
5 天前
2 天前
6 天前
9 天前
4 天前
18 天前
25 天前
22 天前
25 天前
18 天前
7 天前
9 天前
18 天前
18 天前

English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Türkçe · Русский · Tiếng Việt · ไทย · Deutsch · Español · Français · Українська · Polski · Português (Brasil) · العربية · فارسی · Bahasa Indonesia · Italiano · Ελληνικά · മലയാളം · Roman Urdu · Română

REA:逆向一切

一个 MCP,横跨二进制文件、应用程序与运行时行为的全方位逆向分析。

看到心仪的功能?深入理解其实现原理,直至二进制层面。

npm version MCP tool catalog Node.js requirements skills.sh MIT license Discord

morluto%2Frea | Trendshift

官网 · 指南 · 实战案例

快速开始 · REA 工作原理 · 可分析的对象 · 实战案例 · 构建 RL 环境 · 常见问题 · 文档

npx rea-agents setup

Important

请从 morluto/rea、 rea.tools 或 rea-agents npm 包 获取 REA。 请遵循上述官方来源中的安装与发布链接。名称相似的 仓库或复制的 README 并不构成下载来源为官方。


REA launching its analysis bridge inside Hopper while inspecting a native binary



Discord
加入逆向工程社区

Discord · 问答 · 经验分享


在某个应用中看到了想要纳入自己产品的功能?让 Agent 借助 REA 来调查它。它可以无需源代码直接检查该应用,解释功能的工作原理,展示证据,并为你的项目构建一个对应版本。

REA 将你的 Agent 连接到一系列工具,用于检查原生二进制文件、JavaScript 和 Electron 应用、.NET 程序集以及网站。你也可以在终端中直接使用这些工具。分析在本地运行,结果包含每个结论背后的证据与局限性说明。

安装会将 REA 注册到你的 Agent 中,并安装对应的工作流指令。原生分析可以使用已有的 Hopper、Ghidra、IDA 或 Kuna 安装;安装过程中可选择在获得批准后安装 Hopper。静态 JavaScript 分析无需原生分析引擎。

访问 REA 官网 获取安装说明、图文指南和真实案例研究。

快速开始

在 Linux 上,启动 Ghidra、JADX、固件工具,以及执行静态 JavaScript/Electron 分析时,都需要 REA 的 PATH 中存在一个兼容 procps 的 ps 命令,用于进程归属检查。修复步骤详见 docs/installation.md 中"Linux 自有进程前置条件"一节。

配置 Agent

确保已安装 Node.js 和 npm,然后运行:

npx rea-agents setup

选择你的 agent,审核建议的变更并予以批准。安装过程会添加 REA 的 MCP server 及对应的工作流指令,同时备份现有配置,完成后请重启你的 agent。安装过程会直接记录所选的运行时和 REA 入口脚本。如果通过包运行器获取,请确保其缓存条目保持可用。请在目标项目之外的可信目录中执行包获取操作。安装与恢复的详细信息请参阅下方的安装指南。

安装支持 Claude Code、Codex、Cursor、Gemini CLI、Grok Build 及其他 agent。参阅安装与配置了解 provider 配置、手动 MCP 注册以及 Claude Code/Codex 插件安装。

MCP 默认使用精简的输入 schema 以降低上下文开销。当你需要完整的字段声明指导和嵌套验证详情时,在 MCP 注册中设置 REA_MCP_INPUT_SCHEMA_PROFILE=full。两种 profile 均保留完整的工具集和规范的服务端验证。参阅 MCP 契约指南中的"Compact input schema profile"。

默认声明完整的输出 schema。如果你的客户端对完整的 tools/list 帧存在大小限制,可设置 REA_MCP_OUTPUT_SCHEMA_PROFILE=compact 以限制每个声明的输出 schema,或设置为 off 以完全省略输出 schema。两种设置均保留规范的服务端验证和完整的结构化结果。参阅 MCP 契约指南中的"Output schemas"。

向你的 agent 提问

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

将 Notes 替换为你要分析的目标应用及你希望了解的功能。

使用终端

查看已解包的 JavaScript/Electron 应用目录或 ASAR 文件:

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

结果包含模块、导入项、Electron 边界及其相关证据。 将路径替换为你的目标路径,例如 Windows 上的 "D:/apps/example"。

要安装 rea 命令以便日常使用:

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

对于原生分析,请先配置一个 provider。有关原生命令、provider 选择、快照及脚本的详细说明,请参阅 CLI 和证据指南。

更新 REA

REA 迭代迅速,新版本包含大量 bug 修复。请保持安装为最新版本。

对于通过 npm install --global 或 bun add --global 安装的 CLI:

rea update

rea --update 是该已验证工作流的别名,接受相同的全局输出标志。在与其他命令控制选项组合使用时,请使用 rea update。

更新器命令最多保留 4 MiB 的 stdout 和 stderr 合计输出。超出限制的元数据响应将在命令退出后被拒绝;详细安装模式将继续执行,并输出有界诊断信息。面向用户的进度输出会遵循终端背压机制,等待已提交的写入完成后才继续。

Bun 全局更新要求 Bun 1.2.17 或更高版本。如果当前使用的是较早的 Bun 版本,请在运行 rea update 之前手动升级 Bun。

要刷新你的 agent 注册信息和 skill,请运行更新后打印出的 setup 命令。

如果你使用 npx,请通过以下方式更新你的 agent 配置:

npx rea-agents@latest setup

检查设置变更并重启你的 agent。对于一次性的 CLI 命令,使用 npx rea-agents@latest 后接具体命令即可。如果使用 Bun,则用 bunx rea-agents@latest 替代 npx rea-agents@latest。

REA 的工作原理

你的 agent 通过 MCP 调用 REA 来检查目标并追踪相关代码。REA 返回发现结果及其证据。agent 利用这些信息来追问、解释行为,或编写并测试实现。CLI 命令采用相同的工作流。

REA 调查流程:你的 agent 询问关于本地目标的问题,REA 使用分析工具进行检查和追踪,agent 利用返回的代码、引用和未知项来解释、实现和测试。

查看完整尺寸的图片。

可分析的对象

REA 要求 Node.js 22.x(>=22.23.4)、24.x(>=24.22.1)或 26.12.1+,以及 npm。 其他工具和宿主环境支持取决于目标类型:

目标 REA 返回的内容 要求与指南
桌面安装程序 运行时候选项、支持文件、组件标识和后续探测方向 内置的有限目录/头部检查;桌面应用
原生二进制文件 伪代码、汇编、字符串、符号、调用和引用 Hopper、Ghidra、IDA 或 Kuna;原生分析
离线 ELF 布局 段、节、原始符号/重定位和静态缓解候选项 调用方提供的 pwntools(Linux x64);二进制诊断
Go 二进制文件 内嵌编译器版本、模块、替换和构建设置 内置静态 ELF/PE/thin Mach-O 检查;无需安装 Go
GPU 代码对象 CUDA/HIP 目标、选定的内核参数和资源、保留的 PTX 文本 内置静态 ELF/PE/fatbin/CUBIN/PTX 检查;GPU 代码对象
模型文件 GGUF / safetensors 元数据、张量声明和派生总计 内置头部检查;可选整文件哈希;模型文件
IL2CPP 元数据 Unity global-metadata.dat 程序集映像、类型和方法名称及索引范围 内置静态解码,支持版本 24、27、29、31 和 39;无需 Unity
Godot PCK 归档清单和提取、原始头部/目录事实及选定内容标识 内置静态格式 2、3 和 4;无需 Godot
Rust 二进制文件 内嵌的 cargo-auditable crate 名称、版本、来源和依赖边 内置静态 ELF/PE/thin Mach-O 检查;Rust 二进制文件
PE 证书 Authenticode WIN_CERTIFICATE 条目和 PKCS#7 签名者/X.509 身份字段 内置静态 PE 检查;PE 证书
PE 导入 导入和延迟加载 DLL 名称、序号、IAT RVA 和 pefile 导入哈希 内置静态 PE 检查;PE 导入
ELF notes PT_NOTE/SHT_NOTE 所有者、类型、GNU build-id 和 ABI-tag 字段 内置静态 ELF 检查;ELF notes
Apple IPS 崩溃 .ips 元数据、线程、映像、寄存器和已记录的崩溃分类 内置静态 JSON 检查;Apple IPS
Linux 内核模块 .modinfo 键、__versions CRC、this_module 存在性,以及签名尾部 内置静态 ELF 检查;内核模块
Erlang BEAM IFF 块、原子、导出、导入、lambda 和 Code 头部 内置静态 BEAM 检查;Erlang BEAM
WASM 文件 验证结果、节、精确的导入/导出 WAT 形式和已解码的 WAT 调用方提供的 WABT 1.0.42;inspect_wasm_artifact
EVM 字节码 分发选择器、字节偏移、推断参数和可变性 Linux x64 上的本地 raw/hex 载体;离线 EVM 指南
SQLite 数据库 表、列、索引、视图、触发器及选定的普通表行 本地数据库/WAL 快照;Node.js 24.x >=24.15 或 26+(带原生 SQLite 限制)
已记录的 Linux 崩溃 原始 notes、每个已记录线程的寄存器/信号及可选的映射候选项 调用方提供的 pwntools(Linux x64);可选 GDB/pwndbg;已记录的崩溃
JavaScript / Electron 模块、导入、source map、路由、IPC 和原生插件关系 Node.js 和 npm;Linux:兼容 procps 的 ps;应用分析
网站 页面结构、脚本、网络观测和请求的截图 基于 Chrome 内核的浏览器;浏览器分析
已保存的网络抓包 请求、响应、暴露的载荷和来源位置 HAR 或 Fiddler Everywhere SAZ;Linux 上使用 mitmdump 配合原生 mitmproxy;抓包指南
.NET 程序集 元数据、CIL 指令、声明的原生依赖和构建比较 无(仅静态);托管代码指南
Android APK Manifest 声明、类、反编译方法和引用 Linux/macOS/Windows x64 上的无头 JADX 和完整 JDK;Android 指南
APK 签名 v1/v2/v3/v3.1 签名者、证书指纹、密钥轮换和摘要自洽性 无(仅静态);inspect_apk_signature
Android 设备 设备、包、进程、日志、dump、屏幕截图及 APK/文件传输 调用方提供的 adb(模拟器或硬件);ADB 指南
JEB 项目 引擎驱动的项目单元、文件摘要和类型/方法伪代码 由调用方启动并提供 MCP 服务的 JEB 客户端,通过 REA_JEB_MCP_URL 选择;JEB 指南
Android 资源 已解码的 manifest、字符串表、语言区域和版本事实 调用方提供的 Apktool 启动器;资源指南
Flutter 应用 Dart 快照哈希、各 ABI 的库摘要和引擎构建来源 无(静态 APK 解析);Flutter 指南
固件 区域、提取结果和原生分析交接 Linux 上的 Binwalk / Unblob;固件指南
已记录的数据包 选定字段、重复值、过滤器和按指定格式解码规则 Linux:TShark 4.x + prlimit;抓包指南
数据包摘要 端点、DNS、TLS SNI、协议分布和 HTTP 请求 调用方提供的 tshark 和 capinfos(已在 Linux 上验证);pcap 指南
已记录的逻辑信号 解码器注释、采样范围和诊断信息 Linux:sigrok-cli 0.7.2 + prlimit;信号录制
包和资源 文件清单、摘要、plist、Apple bundle 结构和提取的资源 文件与 JavaScript 指南、Apple 应用
进程行为 终端输出、交互、退出和文件系统观测,以及运行比较 Linux/macOS(带原生 PTY);进程捕获
PyInstaller 可执行文件 CArchive 成员、Python 版本、入口脚本和提取的字节码 无(仅静态);Python 打包应用

静态 JavaScript 和 .NET 检查读取提供的文件而无需运行应用。运行时捕获会以你的用户权限运行或交互选定的目标;每个运行时指南都会说明其具体影响。

对于离线原生二进制检查,REA 还支持调用方提供的 GNU objdump 和 Rizin。有关提供商配置、CLI 命令和 Evidence 限制,请参阅逆向工程工具指南。REA 不会安装或更新这两个提供商。

原生格式和宿主环境支持因提供商而异。请参阅 Hopper 和 Ghidra 设置、 IDA 指南(包含可选的原生 MCP 桥接)、 Kuna 反编译器指南,以及 实验性 Windows Ghidra 支持。 Ghidra 还支持16 位 DOS 分析。 对于大型二进制文件,可通过 REA_GHIDRA_STARTUP_TIMEOUT_MS 或 REA_HOPPER_STARTUP_TIMEOUT_MS 提高提供商的启动超时时间。 关于提供商选择,请参阅CLI 指南。 有关最新 npm 发布后新增的功能,请查看版本可用性。

案例展示

Illustrations of the DX-Ball sound-pan, Notion clipboard-bridge, and TH04 bullet-ring showcases

DX-Ball:重建声像定位计算

从一个声音调用出发,追踪到其位置转声像的辅助函数,逐条检查指令,将不完整的伪代码转化为 C 代码。重建结果通过了 3,205 个原始 x86 测试用例,并完整复现了全部 63 个编译后的函数字节。

阅读案例分析 · 重建仓库

Notion:追踪 Electron 剪贴板桥接

找到渲染进程中的剪贴板 API,沿预加载脚本和 IPC 一路追踪至主进程,检查富文本剪贴板格式。

阅读案例分析

TH04:恢复 DOS 弹幕角度计算

检查原版 PC-98 游戏的 16 位指令,恢复固定角度和瞄准角度的计算逻辑,并将重建的 C++ 代码与历史编译器的输出进行对比。

阅读案例分析 · 重建仓库

使用 REA 构建强化学习环境

录制一段 Web 应用的交互会话,将其 API 转化为工具,导出一个可供 AI agent 使用的环境。配合 AgentEnv 运行,再添加任务和奖励检查,即可用于强化学习(RL)训练或评估。

阅读指南 · 观看视频

如果你曾用 REA 分析过有趣的目标,我们非常期待看到你的成果。欢迎通过 issue 或 pull request 分享你的案例,附上目标、你的问题、REA 如何帮助你,以及你发现了什么。

构建强化学习环境

为 AI agent 提供一个本地环境,让它练习查找问题或创建文件夹等任务,而无需运行原始应用。可用于强化学习(RL),也可用来测试 agent 完成任务的能力。

REA 将录制的 API 请求和响应转化为 agent 可调用的工具。环境基于录制数据运行,仅当录制数据确认变更有效时才支持相应操作。

在 agent 中配置好 REA 后,将下方示例中的 URL 和文件夹任务替换为你自己的:

Use REA to build an RL environment from my test web app at
http://127.0.0.1:3000.
Cover listing, creating, renaming, and deleting folders. You may create and
remove test folders. Leave existing data unchanged.
Save it in a folder named my-env. Check which operations work and tell me
how to run it.
改用命令行

若你已有包含该应用浏览器请求与响应记录的文件,可使用以下命令。运行结果同样需要 AgentEnv 和 Docker 支持。

rea environment-build ./session.har ./my-env --name my-env --json
agent-env run ./my-env

REA 会导出一个可运行的环境,并附带一个基础测试来验证环境能否正常启动并响应。你可以将其与你的强化学习框架配合使用,以定义任务目标、添加奖励检查并执行训练。

构建环境 · 环境参考 · 在 X 上观看演示

常见问题

哪些 Agent 可以使用 REA?

任何支持本地 MCP 服务器的 Agent 都可以使用。Setup 会配置 受支持的 Agent;其他客户端可以通过 手动注册 MCP 来使用。

我需要使用原生分析引擎吗?

深度原生分析会根据目标和分析操作的不同,使用 Hopper、Ghidra、IDA 或 Kuna。静态 JavaScript 和 .NET 检查无需原生分析引擎即可运行。Setup 可以在你批准后安装 Hopper;Ghidra、IDA 和 Kuna 则使用你已有的安装。请参阅提供商设置了解各选项及其支持的目标。

我需要先启动 Hopper 吗?

当操作需要时,REA 会自动启动 Hopper。在 macOS 上,首次运行时可能会弹出一个对话框,要求你选择演示模式或激活许可证。请在首次 CLI/MCP 操作或无人值守任务之前,在同一用户会话中完成该提示。如有需要,也可以手动打开 Hopper。请参阅 Hopper 启动与故障排除。

从 skills.sh 安装 Skill 会做什么?

该 Skill 为你的 Agent 提供调查指令。使用 npx rea-agents setup 注册 REA 的 MCP 服务器并安装对应的指令,然后重启 你的 Agent。请参阅仅安装 Skill。

REA 会返回什么代码?

原生分析返回伪代码和汇编代码。JavaScript/Electron 分析 会恢复模块及其相互关系。你的 Agent 会利用这些发现来 编写和测试实现;展示案例 提供了完整的示例。

REA 会上传我的应用吗?

REA 在本地分析目标。你的 Agent 会接收工具返回的结果,而其 模型提供商有各自的数据政策。

如果我遇到了 Bug 该怎么办?

先更新版本;近期的发布版本可能已经修复了该问题。

对于通过 npm install --global 或 bun add --global 安装的 CLI:

rea update

通过 npx 配置智能体:

npx rea-agents@latest setup

如果你正在使用 agent,请先完成配置刷新并重启它。然后重试同一任务。如果问题仍然存在,请携带你的 REA 版本、目标类型、复现步骤和错误输出提交 issue。

文档

建议从网站的实战指南入手。 如需了解精确的选项、前置条件和结果契约:

安全漏洞请通过SECURITY.md报告。

Star 历史

🎉 400,000 GitHub stars — 感谢大家!

感谢每一位使用 REA、报告 bug、提交功能请求、测试构建以及贡献修复的朋友。

REA GitHub star history

免责声明

有关负责任使用的指引,请参阅DISCLAIMER.md。

本项目对非法或未经授权使用的立场适用于所有 REA 版本、分发渠道和平台;每个副本均保留其适用的许可证。

REA 仅用于合法研究、教育、互操作性、软件保存,以及对你拥有或获得授权检查的软件进行分析。

参与贡献

我们非常欢迎你对 REA 的贡献!提交 issue 来报告缺陷或建议新功能,或发送 pull request 来改进代码或文档。

请参阅 CONTRIBUTING.md 了解开发环境搭建与检查流程,testing 了解验证通道,以及架构地图 了解关键层次与依赖路径。

许可证

MIT

REA 自研代码采用 MIT 许可证。第三方材料保留其自身的许可证与版权声明;请参阅 Third-party notices 了解依赖清单、保留的许可证文本及外部工具条款。

你必须合法获取并已获得授权方可使用商业工具,包括 IDA Pro / Hex-Rays 反编译器、Hopper 和 JEB,且须在其适用许可证的范围内使用。REA 不提供任何工具许可证、密钥或激活权限。试用版和演示版仍受供应商条款约束,包括用户、功能、自动化及输出共享方面的限制。破解副本、盗用密钥、未经授权的密钥共享以及绕过许可证限制的行为均不受认可。本说明不修改 MIT 或第三方许可证。

项目介绍

借助智能体,逆向分析一切:从应用行为到原生二进制。【此简介由AI生成】

定制我的领域
1.62 K425.84 K106.06 K访问 GitHub