morluto/rea

GitHub: morluto/rea

REA 是一个为编程代理设计的逆向工程 CLI 和 MCP 服务器,让 AI 在无源代码条件下分析应用二进制、理解功能原理并辅助构建类似实现。

Stars: 93 | Forks: 15

**English** · [简体中文](README_zh.md) · [日本語](README_ja.md) · [한국어](README_ko.md) · [العربية](README_ar.md) # REA: 逆向工程 Anything ### 一个供编程代理对任何事物进行逆向工程的 CLI 和 MCP 服务器 **发现你想要的功能。理解它的工作原理。用你自己的方式构建它。** [![npm version](https://img.shields.io/npm/v/%40morluto%2Frea?style=flat-square&color=cb3837)](https://www.npmjs.com/package/@morluto/rea) [![CI](https://img.shields.io/github/actions/workflow/status/morluto/rea/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/morluto/rea/actions/workflows/ci.yml) [![42 MCP tools](https://img.shields.io/badge/MCP_tools-42-5c4ee5?style=flat-square)](#42-工具工作台) [![Node.js 22+](https://img.shields.io/badge/Node.js-22%2B-339933?style=flat-square&logo=nodedotjs&logoColor=white)](https://nodejs.org/) [![MIT license](https://img.shields.io/badge/license-MIT-f4c430?style=flat-square)](LICENSE) [快速开始](#quick-start) · [查看工作流](#one-prompt-a-full-investigation) · [从二进制到行为](#from-binary-to-behavior) · [42 个工具](#the-42-tool-workbench) · [工作原理](#how-it-works) · [常见问题](#faq)
npx -y @morluto/rea setup --yes
在某个应用中看到了你想加入自己产品的功能?把这个应用交给你的编程代理吧——即使没有它的源代码也可以。借助 REA,代理可以调查该功能,理解其工作原理,并构建一个适应你的技术栈、设计和需求的版本。 REA 通过一个 CLI 和 MCP 服务器使之成为可能。你的代理可以恢复伪代码、跨函数追踪行为、检查字符串和类型,并将这些证据直接带入其正常的编程工作流中。REA 在一个接口之后处理逆向工程工具链、分析会话和目标生命周期。 ## 从二进制到行为
反编译

打开原生应用或可执行文件,并恢复过程、伪代码、汇编、字符串、符号、段和元数据。
理解

追踪调用者、被调用者、交叉引用和调用图,直到代理能够解释某个功能或算法的实际工作方式。
重现

将代理所学到的内容转化为你自家产品的功能,并适应你的技术栈、界面和需求。
REA 使调查始终基于二进制证据。它不声称能够恢复原始源代码或自动克隆应用程序。 ## 为什么选择 REA | | | | ------------------------ | -------------------------------------------------------------------------------------------------------- | | **专为代理构建** | 询问编译后的应用做了什么,让你的代理收集证据,而不是盲目猜测。 | | **CLI 和 MCP** | 从终端或编程代理运行相同的逆向工程功能。 | | **处理复杂性** | REA 负责设置工具、打开应用、保持调查运行,并在事后进行清理。 | | **从洞察到代码** | 理解一个功能,然后在同一个编程会话中使用证据来构建你自己的实现。 | | **默认本地化** | 分析在你的 Mac 上运行。REA 不会将二进制文件上传到托管的分析服务。 | | **保持上下文** | 调查多个二进制文件,而无需为每个问题重新开始分析。 | ## 快速开始 ### 需求 - macOS 12 或更高版本 - Node.js 22 或更高版本 - [Hopper Disassembler](https://www.hopperapp.com/) REA 不捆绑 Hopper。设置过程可以在缺少时安装 Homebrew,安装 `hopper-disassembler` cask,配置检测到的 Claude Desktop 和 Cursor MCP 客户端,并安装 REA 代理技能。现有的客户端配置会被备份、以原子方式更新,并在设置报告成功之前进行回读。 Hopper 是 REA 在后台控制的独立 macOS 分析引擎。大多数用户通过 CLI 或其代理与 REA 交互,但必须安装并授权 Hopper。 ### 1. 设置 REA ``` npx -y @morluto/rea setup --yes ``` ### 2. 检查集成 ``` npx -y @morluto/rea doctor ``` ### 3. 启动 MCP 服务器 ``` npx -y @morluto/rea mcp ``` MCP 命令使用 stdio 通信,因此它会静默等待已连接的客户端。如果设置过程检测到了你的客户端,请重启该客户端,并使用已注册的 `rea` 服务器,而无需手动运行命令。 然后询问你的代理: ``` Open /path/to/MyApp, summarize the binary, find the authentication flow, decompile the relevant procedures, and show the evidence behind your conclusion. ``` ## 一个提示词,一次完整调查 ``` Open MyApp, find how its offline search feature works, explain the control flow, and build a version for my project using TypeScript and SQLite. ``` REA 为代理提供了一条从该请求到可运行代码的坚实基础路径: | 步骤 | 代理的操作内容 | REA 工具 | | ---: | --------------------------------------- | ---------------------------------------------------------------- | | 1 | 打开并识别二进制文件 | `open_binary`, `binary_overview` | | 2 | 寻找可能的离线搜索线索 | `search_strings`, `search_procedures`, `list_names` | | 3 | 将这些线索连接到可执行代码 | `find_xrefs_to_name`, `xrefs`, `procedure_callers` | | 4 | 重建相关的控制流 | `get_call_graph`, `procedure_callees`, `procedure_info` | | 5 | 恢复实现 | `procedure_pseudo_code`, `procedure_assembly`, `batch_decompile` | | 6 | 在你的项目中构建功能 | 适应你的技术栈、产品和需求的代码 | REA 负责步骤 1-5 中的二进制分析工作。代理使用其常规的文件编辑和测试工具执行步骤 6,使重新创建的行为与来自二进制文件的证据紧密结合。 ## 代理可以做什么 - 调查你喜欢的功能,并构建一个为你自家产品量身定制的版本。 - 在源代码不可用时解释某项功能是如何工作的。 - 重构应用的认证、存储、更新或网络流程。 - 恢复足够的结构以记录未记录的格式或接口。 - 从字符串或符号追踪可疑行为,直到实现该行为的代码。 - 通过在同一个会话中切换目标,比较两个应用版本之间的实现路径。 - 将恢复的行为转化为产品功能、测试、迁移说明、移植或可互操作的替代品。 - 分析 Swift 和 Objective-C 元数据,无需手动解开每个重整的符号。 - 在 Hopper 中保留名称、注释和书签,以便人工和代理的分析能够相互促进。 ## 42 工具工作台 | 工具系列 | 数量 | 示例 | | ----------------- | ----: | ------------------------------------------------------------------------------------------------------ | | 二进制检查 | 31 | 过程、伪代码、汇编、字符串、名称、段、调用者、被调用者、交叉引用、注释 | | 组合分析 | 8 | `binary_overview`, `batch_decompile`, `get_call_graph`, `find_xrefs_to_name`, Swift 和 ObjC 发现 | | 二进制会话 | 3 | `open_binary`, `binary_session`, `close_binary` | 公开清单经过了契约测试,并通过独立的打包 MCP 客户端进行了验证。Real-Hopper 验证则分别针对两个二进制文件检查了相同的 42 工具接口。 ## MCP 工作流 1. 使用可读的本地二进制文件或 `.hop` 路径调用 `open_binary`。 2. 从 `binary_overview` 开始,然后通过字符串、符号、反编译、调用者、被调用者和交叉引用来缩小调查范围。 3. 再次调用 `open_binary` 以切换目标。如果新目标失败,REA 会尝试重新打开之前的目标。 4. 完成后调用 `close_binary`。`binary_session` 可以随时报告当前状态。 相对路径从 MCP 服务器的工作目录解析。REA 自动检测 Mach-O/FAT、ELF、PE 和 Hopper 数据库。FAT binaries 会选择与主机兼容的架构,而不会弹出 Hopper 的常用架构选择器。 ### 手动 MCP 配置 ``` { "mcpServers": { "rea": { "command": "npx", "args": ["-y", "@morluto/rea", "mcp"] } } } ``` ## 工作原理 ``` flowchart LR Agent["Coding agent"] -->|stdio MCP| REA["REA server
42 tools"] REA --> Session["Binary session
open · switch · close"] Session -->|authenticated Unix socket| Bridge["REA Python bridge
inside Hopper"] Bridge --> API["Hopper public
Python API"] ``` CLI 和 MCP 适配器直接调用相同的二进制会话和分析运行时;两者互不调用。单次命令会为每次操作获取并关闭其资源。MCP 模式会在调用和目标切换期间保持一个会话处于活动状态。 ## CLI 无需全局安装即可使用该包: ``` npx -y @morluto/rea --help npx -y @morluto/rea doctor --target /path/to/binary npx -y @morluto/rea analyze /path/to/binary npx -y @morluto/rea decompile /path/to/binary 0x100003f20 ``` 或者全局安装 `rea` 命令: ``` npm install --global @morluto/rea rea --help rea mcp ``` ## 配置 | 变量 | 用途 | | ------------------------- | ------------------------------------------------------------------------------------ | | `HOPPER_TARGET_PATH` | 可选的初始二进制文件或 `.hop` 目标。无目标的 MCP 会话使用 `open_binary`。 | | `HOPPER_LAUNCHER_PATH` | 覆盖 Hopper 启动器路径。 | | `HOPPER_TARGET_KIND` | 为初始目标选择 `executable` 或 `database`。 | | `HOPPER_LOADER_ARGS_JSON` | 使用 JSON 字符串数组覆盖 REA 推导出的 Hopper 加载器参数。 | ## Hopper 应用行为 REA 在需要时启动 Hopper;无需事先运行 Hopper。Hopper 的启动器会在内部激活应用,因此打开目标可能会将 Hopper 置于最前端。REA 会要求 macOS 尽可能在隐藏和后台状态下启动 Hopper,但不能保证它会一直停留在当前应用的后面。 REA 会推导出明确的格式和架构参数,以防止出现常见的 FAT 和 ARM 选择对话框。其他 Hopper 或 macOS 对话框可能仍需要人工干预。REA 会通过 CLI 或 MCP 结果报告超时和补救措施,而不是尝试自动响应 UI 提示。 关闭 REA 会话会关闭其 bridge 并移除其专用的 socket 目录。它不会退出用户可能正在使用的 Hopper 应用程序。 ## 安全模型 每个 bridge 会话都有一个随机的能力 token 和一个仅限于当前用户的 Unix socket。协议消息是有界限的,且对调用者可见的错误会省略启动器的 stderr 和内部异常原因。 该边界会拒绝未经身份验证的连接和其他本地用户帐户,但它不是一个沙盒,也无法防御已经以同一用户身份运行的恶意进程。打开不受信任的二进制文件会将解析和分析工作委托给 Hopper,并使用当前 macOS 用户的权限执行。请通过 [SECURITY.md](SECURITY.md) 中的私密流程报告漏洞。 ## 常见问题
在启动 REA 之前需要先运行 Hopper 吗? 不需要。REA 会在操作需要时启动 Hopper。也支持已经运行的 Hopper 应用。
为什么 Hopper 出现在了我的其他窗口前面? Hopper 的启动器在内部激活了该应用。REA 请求后台启动,但 macOS 和 Hopper 可能仍会将窗口或对话框置于最前面。请参阅 [Hopper 应用行为](#hopper-application-behavior)。
REA 包含 Hopper 吗? 不包含。Hopper 是单独安装和授权的软件。REA 提供了 CLI、MCP 服务器、会话管理、分析工作流和已认证的 bridge,使代理能够使用 Hopper。
REA 会上传我的二进制文件吗? REA 没有托管的分析服务。它通过当前用户的 Unix socket 将本地操作传递给 Hopper。你的编程代理或模型提供商可能有自己的数据策略,请另行查看。
REA 能恢复原始源代码吗? 没有任何反编译器可以保证恢复原始源代码。REA 为代理提供伪代码、汇编、符号、字符串、元数据和关系,使其能够解释或兼容地重建观察到的行为。
哪些代理可以使用 REA? 任何能够启动 stdio MCP 服务器的客户端都可以使用手动配置。目前,设置过程可以自动检测并配置 Claude Desktop 和 Cursor。
## 开发 ``` npm ci npm run check npm run verify:package npm pack --dry-run ``` Real-Hopper 验证需要两个不同的二进制文件: ``` HOPPER_TARGET_PATH=/path/to/target-a \ HOPPER_SECOND_TARGET_PATH=/path/to/distinct-target-b \ npm run verify:hopper ``` 有关架构指南、拉取请求规范和维护者发布检查清单,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。生成的 API 文档可在 [`docs/api`](docs/api/index.html) 下找到。 ## 项目链接 [npm](https://www.npmjs.com/package/@morluto/rea) · [问题](https://github.com/morluto/rea/issues) · [安全](SECURITY.md) · [贡献](CONTRIBUTING.md) · [Hopper](https://www.hopperapp.com/) ## 许可证 [MIT](LICENSE)
标签:AI编程助手, MCP, MITM代理, URL提取, 云资产清单, 代码分析, 凭证管理, 反编译, 自动化攻击, 逆向工具, 逆向工程