作者:互联网 时间: 2026-10-04 11:50:01
团队讨论rea时,我会先把用途说清楚:使用代理对任何内容进行逆向工程,从应用程序行为到本机二进制文件。一旦进入内容与市场工作环节,受众、平台规则和事实依据容易被统一模板抹平会直接影响交付,这也是我最关心的风险。更实际的做法是选一个已有主题制作可人工复核的样稿,同时核对事实准确性、平台适配、语气和修改成本,不要直接在关键项目上。我的判断是,它更适合有明确品牌标准并保留人工审校的团队;若眼下没有这类需求,先保留观察即可。

English · 简体中文 · 日本语 · 한국어 · 巴黎
rea:逆向工程任何东西
使用代理对任何内容进行逆向工程,从应用程序行为到本机二进制文件。
查看您喜欢的功能。了解其工作原理,直至二进制级别。
快速入门 · 当前状态 · 调查模型 · 工具目录 · 路线图 · 工作原理
npm install --global rea-agents && rea setup
在应用程序中看到您想要在自己的产品中使用的功能吗?将应用程序交给您的代理——即使没有源代码。通过 rea,代理可以调查该功能,解释其工作原理,展示其证据,并构建适合您的堆栈和要求的版本。
rea 为代理提供了一种一致的方法来调查软件。如今,其中包括通过 Hopper 或在 Linux 上自带 Ghidra 进行深入的本机分析和功能档案,以及用于经批准的本机 PE 应用程序的实验性 Windows x64 Ghidra P0;免执行托管 PE/CLI 分类;可复制的证据记录;受控过程捕获;被动网站、Electron 页面和 Node/Electron V8 Inspector 观察; JavaScript/source-map重建;以及提供者中立的图,用于连接应用程序层,而不会混淆静态推理与运行时观察。长期工具包将相同的代理工作流程扩展到 APIs、协议、移动工件、固件、更丰富的运行时行为以及版本之间的差异。
逆向工程通常让操作员选择一个工具,了解其 API,在程序之间移动证据,并决定下一步要检查什么。 rea 通过命令、技能、结构化结果和可重复的调查工作流程将这项工作交给代理。
只需询问您的代理人即可
运行一次安装程序。代理集成安装对齐的 MCP 注册和 将路由技能捆绑在一起:
npx rea-agents setup
然后问:
Understand how search works in the Notes app, show me the evidence, and build a
similar feature for my project.
注释只是一个例子。说出您想要了解的任何应用程序,或者要求客服人员从概述开始。
调查模型
|
Decompile
打开应用程序并恢复可读代码、字符串、名称以及有关其工作原理的其他线索。 |
Understand
按照代码从应用程序的一个部分到另一部分,直到代理可以解释某项功能的实际工作原理。 |
Recreate
将代理学到的知识转化为您自己产品的功能,适应您的堆栈、界面和要求。 |
rea 显示了它是如何得出结论的。它并不声称可以恢复原始源代码或自动克隆应用程序。
为什么是rea
| 专为代理商打造 | 询问应用程序的用途,并让您的代理检查它而不是猜测。 |
| CLI 和 MCP | 从您的终端或代理运行相同的逆向工程功能。 |
| 处理复杂性 | rea 在幕后安装和管理逆向工程工具。 |
| 从洞察到代码 | 了解某个功能,然后在同一编码会话中构建您自己的版本。 |
| 本地化设计 | 分析在您支持的本地主机上运行。 rea 不会将应用程序上传到托管分析服务。 |
| 保留上下文 | 调查多个应用程序,无需从头开始回答每个问题。 |
快速启动
运行设置 - 推荐
npx --yes rea-agents@latest setup
当显示 npm package-runner 提示时,批准为此下载 rea 调用;它不批准任何设置更改。 rea 单独向导 显示其完整计划并在应用前询问。安装程序不更新 自制软件、Node.js 或 npm。设置命令将随其工作一起打开 启用:调查代理的本地应用程序,通过恢复证据 深度分析提供者,并重用 rea 的引导工作流程。它总结了 检测到代理,然后询问要设置哪些功能:代理集成 (MCP 加上匹配的引导工作流程)以及(需要时)Hopper 提供商。 没有什么是预先选择的。选择代理集成会打开第二个空的 应接收注册的特定检测到代理的清单。
@latest 明确请求的发布并向 npm 请求发布
目前已在该标签下发布。 rea 不默默替换包
选择了 npm 版本。因此,有意回滚仍然可以通过
准确的包裹请求。
rea 使旅程保持直线,因此其历史记录保留在航站楼中。选择 功能不会选择每个检测到的目标或授权更改。 在进行任何更改之前,rea 验证现有配置,打印准确的 路径和外部影响,并请求以 否 作为最终批准 默认。当您选择时,屏幕会显示可用的按键; Ctrl-C 和下降使系统保持不变。
rea 检测 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf 和 Devin。它在检测到时配置前六个; Devin 已报告但保持不变,因为它没有记录本地 MCP 配置边界。注册是附加的、先备份、写入后读回。您可以安全地重新运行安装程序。
使用rea setup --dry-run检查计划,重复--client选择准确的
代理,以及 --accessible 用于顺序垂直提示。机器产量
仍然可以通过 --json 获取;提示 UI 和进度转到 stderr。
成功设置后,rea 报告现在可以使用的功能以及 具体的下一步,例如在要求之前重新启动已配置的代理 调查一个应用程序。它并不声称集成或提供商是 准备就绪,除非设置及其最终诊断检查验证了它。
可选的curl包装器安装相同的CLI包,并仅在终端可用时开始安装:
curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash
在 bash -s -- 之后传递安装程序选项,例如 --dry-run、--no-setup 或 --version 1.0.0。 curl 包装器从不安装先决条件或自行配置集成。请参阅 安装和设置 了解其确切的突变边界。
有代理——推荐
npx --yes rea-agents@latest setup
在审核的设置计划中选择代理集成。 rea 安装固定的 MCP 注册及其匹配的路由技能作为一笔交易。设置后, 重新启动配置的代理,以便加载对齐的集成。
查看设置计划,批准它(如果适用),然后描述您想要了解的应用程序或功能。 Hopper可以在其免费演示模式下运行;如果显示首次运行提示,请选择演示或输入现有许可证。
从终端 — 无需安装
npx --yes rea-agents@latest setup
npx -y rea-agents@latest doctor
npx -y rea-agents@latest analyze /Applications/Notes.app
在确认之前检查设置计划。重新启动已配置的代理,以便加载 rea。
从终端 — 安装 rea 命令
npm install --global rea-agents
rea setup
rea doctor
rea analyze /Applications/Notes.app
就地更新全局安装:
rea upgrade
rea 检查 npm 是否有最新版本并验证正在运行的包是否是
它将取代的全局安装。源、本地和 npx 副本报告
手动 npm install --global rea-agents@latest 命令而不是更新
不相关的全局包。
选择无安装命令或全局安装。您不需要两者。
npm install rea-agents 不带 --global 仅将 rea 安装到
当前项目的node_modules/.bin;它不会将 rea 添加到您的 shell
PATH。使用上面的 npx 命令进行一次性运行,或者在以下情况下使用 --global
想要 shell 可见的 rea 命令。
要求
深度二进制操作使用 Hopper、具有自己许可证的单独桌面应用程序或调用者选择的 Ghidra 提供商。 Ghidra 提供只读清单、函数元数据、反编译、汇编、解析调用、类型化引用、外部参照、CFG 和函数档案; GUI 状态和突变仍然无法通过该提供程序获得。安装程序重复使用现有的 Hopper 安装或操作员提供的 Ghidra 安装。它从不下载 Ghidra 或安装 Java。如果两个提供商都没有准备好,则交互式设置会建议 Hopper;无人值守料斗安装需要 rea setup --yes --install-hopper。
如果出现问题,请运行:
npx -y rea-agents@latest doctor
rea doctor --json 是只读的,可区分不受支持的主机、缺少依赖项、缺少本地分析引擎、配置漂移和健康检查。付费许可证激活是可选的:在 Linux 上,rea 在专用 Xvfb 显示器上运行受支持的 Hopper 演示版本,并为每个分析会话选择 Hopper 提供的演示模式。
Linux安装及故障排除
在 macOS 上,批准的安装程序会下载 Hopper 的官方 DMG,对其进行验证,并将应用程序安装到 ~/Applications 中,而无需 Homebrew 或管理员权限。 Hopper 首次打开时可能会显示其演示或许可证提示;无需手动拖放。
在 Ubuntu 24.04+、Fedora 41+ 和 64 位 Arch Linux 上,批准的安装程序会下载固定的官方 Hopper 6.4.2 软件包,限制下载到 Hopper 的公共源,验证发布的大小和校验和,并调用 apt-get、dnf 或 pacman 来安装 Hopper 和演示会话使用的 Xvfb、Python、X11 和 XTEST 包。当 rea 尚未以 root 身份运行时,pkexec 会显示系统授权提示。 rea 从不调用 sudo。演示会话在独立的 1280×1024 Xvfb 显示器上运行。 rea 在选择 Try the Demo 之前验证确切支持的 Hopper 二进制文件、其拥有的进程祖先、预期的对话框几何形状和桥接状态;任何不匹配都会失败关闭。
正常的 Linux 启动器是 /opt/hopper/bin/Hopper。如果 Hopper 安装在其他地方:
export HOPPER_LAUNCHER_PATH=/absolute/path/to/Hopper
rea doctor --json
如果医生报告缺少分析引擎,即使文件存在,请使用以下命令检查共享库分辨率:
ldd /opt/hopper/bin/Hopper | grep 'not found'
安装缺少的分发包并重新运行 rea setup。 Linux 演示自动化需要 Xvfb、Python 3、libX11.so.6 和 libXtst.so.6;批准的安装程序会安装这些直接的运行时依赖项,并且不会与用户的桌面显示交互。 Hopper 的免费演示支持使用供应商定义的限制进行分析,并且可以选择付费许可证。在 Linux 上,curl 安装程序将 rea 命令放置在 ~/.local/bin 中;如果该目录尚不存在,则将该目录添加到未来的 shell PATH 值中。
rea 在 macOS 上默认 HOPPER_LAUNCHER_PATH 为 /Applications/Hopper Disassembler.app/Contents/MacOS/hopper,在 Linux 上默认为 /opt/hopper/bin/Hopper。显式配置始终优先。
Ghidra 只读分析提供程序
Ghidra 适配器支持确切的官方 Ghidra 12.1.4 版本,在 Linux x64 上具有 64 位完整 JDK 21。 macOS 不是承认的 Ghidra 主机。该适配器还提供实验性 Windows x64 P0,仅限于经批准的本机 x86-64 PE 应用程序。自己下载并解压这些项目,然后配置绝对路径:
export GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra_12.1.4_PUBLIC
export JAVA_HOME=/absolute/path/to/jdk-21 # optional when java and javac resolve from PATH
rea doctor --json
rea setup
rea providers --json
Doctor 会区分丢失的配置、错误的安装根、错误的 Ghidra 或 Java 版本、没有 javac 的 JRE、丢失的 support/analyzeHeadless 以及不受支持的平台或架构。批准的设置仅将经过验证的非秘密路径复制到检测到的 MCP 注册中;它不会修改 Ghidra 安装或 install/download Ghidra 或 Java。
在Windows上,在PowerShell中设置相同的变量并运行rea doctor --json;自动化 rea setup 和料斗安装仍然不可用。 P0 目标边界拒绝 DLLs、托管 PE 文件、非 x86-64 映像、mutable/hostile 输入和非 PE 格式。有关注册、确切限制、CI 证据和接受门的信息,请参阅 Windows Ghidra P0 操作指南。
rea 使用 -scriptPath 加载其打包的 Java HeadlessScript,在临时运行时复制和摘要验证目标,启用 -readOnly 和 -deleteProject,并对每个请求进行身份验证。在提供操作之前自动分析完成;启动有一个截止日期,而工具请求会一直运行,直到有结果、调用者取消或提供者关闭为止。 Linux 使用 mode-0600 Unix 套接字。 Windows P0 使用经过令牌验证的 IPv4 环回和无令牌端点记录,因为基于节点路径的 IPC 不会连接到 Windows 上的 Java AF_UNIX 套接字。桥接器在提供任何操作之前会验证 Ghidra 的导入字节 SHA-256。
Ghidra 适配器声明了 19 种直接操作和增强操作。其十个库存操作分别是 list_documents、list_procedures、list_strings、list_names、list_segments、address_name、procedure_address、resolve_containing_procedure、 search_procedures 和 search_strings。它还承认 procedure_info、procedure_pseudo_code、procedure_assembly、read_function_instructions、procedure_callers、procedure_callees、procedure_references、xrefs 和analyze_function。 read_function_instructions 是原始指令窗口的偏移分页快速路径:它不会调用反编译器或整个程序 name/string 库存,并且也公开为 rea instructions。这些功能支持共享 Swift/Objective-C 库存工作流程、binary_overview、batch_decompile、get_call_graph、find_xrefs_to_name、trace_feature 和完整的功能档案。默认空间地址为小写 0x 十六进制。其他空间,包括EXTERNAL,使用<percent-encoded-space>:0x<hex>。符号结果识别主要的、动态的、外部的、类型的和源事实;过程区分外部函数和 thunk;字符串识别字符集、缺失终止符状态、字节长度和值截断;内存块末端是独占的,权限直接来自 Ghidra。
桥接器仅在自动分析完成后才提供操作。每个程序都拥有一个持久的 DecompInterface,并且串行 FIFO 在所属程序的线程上保留 Ghidra API 访问权限;它没有固定的队列长度或每个操作的截止时间。参考结果保留了 Ghidra 的 call/jump/data/read/write/indirect/computed/external 事实,而未解决的无目标流仍然明确未知。没有可操作内存源的综合入口点引用被省略。伪代码和汇编是特定于提供者的观察结果,而不是原始源或 Hopper 等效文本。来电取消和提供商关闭仍然可用;返回的提供程序结果没有固定的响应大小上限。
npm run verify:ghidra 为支持的 Linux x64 ELF 主机构建调试和剥离装置。针对真实的 Ghidra 12.1.4,它会验证每个已承认的操作、直接和间接调用、imports/exports/thunks、类型化引用、strings/xrefs、多块 CFG、取消、截止日期、并发、格式错误的输入以及完整的 process/project 清理。它需要一个主机 C 编译器和上述 Ghidra/JDK 先决条件。
npm run verify:ghidra:cross-format 添加了 AArch64 ELF、x86-64 PE 和 x86-64 Mach-O 夹具。此单独通道需要 clang、LLD 和 lld-link;使用 REA_CLANG、REA_LLD 或 REA_LLD_LINK 选择备用命令路径。它在编译夹具之前预检所需的工具链。
npm run verify:ghidra:windows 使用确定性源拥有的本机 x86-64 PE 应用程序,并需要所有 19 个操作、target/snapshot/import 摘要链接、经过身份验证的环回传输以及受控 Windows x64 Ghidra 12.1.4 运行程序上的清理。该证明不建立作业对象所有权、私有 DACLs 或重分析点安全权限。
仅删除 rea- 拥有的 MCP 注册和托管技能:
rea uninstall
rea uninstall --purge-data # also removes only ~/.rea/cache and ~/.rea/state
卸载会保留 Hopper、Node.js、证据文件、捕获、不相关的技能和其他 MCP 服务器。它拒绝格式错误的客户端配置,并且从不遵循清除数据符号链接。
CLI 还是代理?
| 如果你想…… | 使用 |
|---|---|
| 要求代理调查应用程序并构建功能 | 安装技能,然后与您的代理交谈 |
| 从终端检查或反编译应用程序的一部分 | rea analyze 或 rea decompile |
| 验证、规范化或比较证据包 | rea evidence-import、rea evidence-export 或 rea compare |
| 映射本地 JavaScript/Electron 应用程序而不执行它 | rea analyze PATH 或 rea analyze-javascript-application |
| 重用不可变的分析结果,无需重新启动提供程序 | 将 --snapshot /approved/path/analysis.json 传递给深度分析命令 |
| 导入来源作为历史参考 | rea import-reference-source |
| 捕获或比较受控过程行为 | rea capture-process 或 rea compare-process-captures |
rea evidence-import /absolute/path/to/evidence/bundle.json
rea evidence-export /absolute/path/to/evidence/bundle.json /absolute/path/to/evidence/canonical.json
rea compare /absolute/path/to/evidence/left.json /absolute/path/to/evidence/right.json
JavaScript应用分析读取所选目录或直接读取ASAR; 该命令直接使用提供的路径:
rea analyze /absolute/path/to/releases/app.asar --json
rea analyze-javascript-application /absolute/path/to/releases/app.asar --json
对于目录或 .asar,通用 rea analyze 自动选择
静态 JavaScript 应用程序提供程序,当 --provider 或
提供 --snapshot。两条路线都会返回分析及其证据
上下文内联。
历史源导入直接取目录,不处理源 作为当前的行为权威:
rea import-reference-source /absolute/path/to/source
导入读取提供给命令的路径并验证每个证据 ID 和清单。导出永远不会替换现有文件,除非 --overwrite 是显式的。
提供者中立的分析快照持续成功、不可变的 rea 调用 他们的证据记录。它们是精确的缓存而不是 Hopper 数据库: rea 仅当二进制摘要、种类、格式、架构、 操作参数、具体提供程序构建和规范分析配置文件 摘要匹配。料斗装载机默认值和配置的覆盖通过以下方式标准化 Hopper 适配器并致力于该配置文件,因此覆盖占据独特的 安全缓存分区而不是禁用快照。与游标相关的和 变异调用永远不会被缓存。快照文件可以包含专有分析 结果和本地路径,因此 rea 将它们保留在本地并仅使用所有者写入 权限。调用者直接提供快照路径:
rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json
# The same exact query can be answered from that snapshot.
rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json
确切的 CLI 证据重播发生在任何提供者进程开始之前。在 MCP 会话中,
将 snapshot_path 传递给 open_binary 以原子方式导入快照,同时
打开其匹配目标; MCP 提供程序仍可能在缓存调用之前启动
被重播。将 snapshot_path 以及必要时的 overwrite: true 传递给
close_binary 在释放 Hopper 资源之前自动保存。如果
保存失败,rea 故意使会话保持打开状态。
一次提示,全面调查
Reverse engineer the Notes app. Find how offline search works, explain it,
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。
代理可以做什么
调查工具目录
| 工具族 | 计数 | 示例 |
|---|---|---|
| 本机检查 | 36 | 过程、伪代码、程序集、字符串、名称、段、调用者、被调用者、外部参照、注释、有界字节读取、文件偏移量转换 |
| 调查工作流程 | 14 | binary_overview、analyze_function、inspect_native_api、inspect_native_dispatch_metadata、batch_decompile、trace_feature、trace_native_investigation、精确的字符串到代码查找、有界调用路径、调用图、 Swift 和 Objective-C 发现 |
| 本机 macOS 实用程序 | 5 | Mach-O 元数据、代码签名、plist、架构、Swift 分解;无料斗且有来源 |
| 神器图 | 3 | 对目录和支持的包进行完整的内联检查,编译 Interface Builder UI 图形解码,以及显式选择提取到不存在的拥有的树中 |
| 托管 PE/CLI | 8 | PE/CLI 身份、元数据成员、CIL 哈希、P/Invoke/native-boundary 声明和验证、应用程序图投影、反编译器重建导入、令牌重新映射、运行时关联计划和版本比较 |
| 浏览器观察 | 9 | 确切来源被动 CDP 捕获、捆绑和源映射分析、WebMCP 发现、会话时间线、捕获差异、视觉证据和有界剧作家场景 |
| 电子分析 | 5 | 被动根限制观察、静态应用程序映射、有证据支持的 static/runtime 协调以及提供商拥有的 click/wait 场景 |
| JavaScript运行时 | 2 | 批准的仅附加 Node/Electron Inspector 目标发现以及有界脚本和执行上下文观察,无需评估或检测 |
| 应用程序工作流程 | 10 | 完整的跨层跟踪、唯一版本匹配、历史源到包映射、静态导出返回形状比较、经批准的 Linux 隔离提取模块重放、托管运行时表征、重建覆盖范围收敛和确定性义务分类账 |
| 工作空间和观察 | 22 | 目标生命周期、内联证据包检索、聚合 navigation/address 上下文、直接有限重放机器评估、process/artifact/function 比较、证据关联的剩余未知生命周期 |
公共接口描述了代理试图学习的内容。提供商决定如何回答。 macOS 实用程序无需启动 Hopper 即可处理常见语义检查; Hopper 处理更深入的本机分析;流程工具实现受控行为捕获。
目前状态
rea 已经可用于受支持的 macOS 和 Linux 主机上的本机应用程序、浏览器和 Electron 调查,以及上述有限的 Windows Ghidra P0:
.app,ZIP,APK,IPA,ASAR,plist, JavaScript、源映射和通用分析数据库目标; Hopper 仍然是唯一接受旧版 .hop 数据库的适配器。file:// 渲染器页面,无需调用 Electron APIs;脚本内容保持单独批准和字节限制。scriptParsed 以及执行上下文生命周期元数据,无需评估、断点、恢复、源读取或检测。 require/import 边缘、EventEmitter 活动、Electron IPC、PID 身份和角色身份仍然未知。请参阅 被动节点和 Electron 运行时观察。analyze_javascript_application 或 rea analyze-javascript-application。结果和证据上下文以内联方式返回。 AST-only 应用服务 从不执行引导代码,仅与唯一的精确文字 IPC 通道配对,并将动态或不明确的通道报告为未解析。reconcile_javascript_runtime 或 rea reconcile-javascript-runtime 将该静态图与现有被动网络或电子证据进行协调。精确捕获的字节优于调用者声明的 file/URL 映射;目标、框架、脚本、工作线程、缓存和资产歧义保持明确,源映射权限保持独立,并且驻留在观察到的包中的模块永远不会被报告为已执行。请参阅 JavaScript static/runtime 调节。inspect_managed_artifact / rea inspect-managed-artifact 对 PE/CLI 托管工件进行分类,使用 inspect_managed_members / 检查文件支持的元数据成员、签名、原始 CIL 哈希、解码指令元组指纹、单独报告的异常区域、调用边缘和字段访问锚点rea inspect-managed-members,清单声明为 ModuleRef/ImplMap/PInvoke 和非 IL 方法边界指标与 inspect_managed_native_boundaries / rea inspect-managed-native-boundaries,然后将两个经过验证的成员观察结果与 compare_managed_members / rea compare-managed-members 进行比较。 verify_managed_native_boundaries / rea verify-managed-native-boundaries 根据经过身份验证的本机导出或函数证据检查托管 P/Invoke 声明,同时保持已验证、推断、矛盾和未解决的状态不同。该比较将构建本地标记视为构建本地,并使用独特的 decoded-CIL/signature 和结构方法形状层,从不单独使用名称;元组指纹本身并不解析令牌或完全提交控制流。 project_managed_application_graph / rea project-managed-application-graph 项目经过身份验证,托管 artifact/member/native-boundary 现有应用程序图中用于跨层特征跟踪的证据。仅在精确工件 SHA-256、MVID、签名和解码的 IL 承诺匹配后,import_managed_reconstruction / rea import-managed-reconstruction 才承认用户提供的反编译器 C#/IL/pseudocode 作为分析师推断。另外,plan_managed_runtime_correlation / rea plan-managed-runtime-correlation 可以承认默认禁用、权限控制的运行时关联计划锁定到相同的构建证据。这些路径从不加载程序集、解析 CLR 依赖项、执行目标代码、运行反编译器或将托管令牌转换为本机地址;完整的规范化 CIL 语义、本机主体桥映射和实际的运行时执行器仍然是未来的托管代码合约。REA_ILSPY_CMD_PATH=/absolute/path/to/ilspycmd
医生和verify:managed检查自带的ILSpy命令作为
真正重建神谕。 rea 不安装 ILSpy 且不处理
反编译器文本作为规范元数据或 CIL 观察。native_mount_approved: true和REA_ARTIFACT_NATIVE_MOUNT_ENABLED=true。仅将已批准的事件具体化为不存在的输出根。run_replay_machine 或 rea run-replay-machine 验证有限重放机器,无需启动目标;有序事件返回类型化的决策、操作、捕获的别名、转换日志、最终状态和确切的限制使用,而不回显请求或捕获的值。Hopper是第一提供者,而不是项目的边界。当前的一些工作流程仍然需要 Hopper 和 macOS;每条证据记录都标识了其结果背后的提供者及其限制。
使用CDP进行网站观察
rea 可以检查您拥有的已运行的 Chrome 系列浏览器。默认情况下禁用浏览器观察,并且需要文字环回 CDP 端点以及确切批准的页面来源:
export REA_BROWSER_OBSERVE_ENABLED=true
export REA_BROWSER_CDP_ENDPOINTS_JSON='["http://127.0.0.1:9222"]'
export REA_BROWSER_ALLOWED_ORIGINS_JSON='["http://127.0.0.1:3000"]'
rea list-browser-targets http://127.0.0.1:9222 --approved --json
rea inspect-web-page http://127.0.0.1:9222 TARGET_ID --approved --json
所有八个浏览器工具都通过 CLI 和 MCP 公开相同的证据合约。检查是被动的:rea 不评估页面 JavaScript、导航、单击、关闭页面或关闭浏览器。查询值、凭据、cookie、授权标头、存储值和原始 JSON 或 WebSocket 值永远不会保留。单独批准的捕获可以保留有界的编辑控制台基元、无值 JSON/WebSocket 形状、脚本源、可访问性文本或屏幕截图像素。附加之前的现有活动明确不可用。请参阅 使用 CDP 进行网站观察,了解浏览器启动、架构、限制和威胁模型。
受控浏览器场景
capture_browser_scenario 是一个单独的、显式变异的浏览器边界。
它仅通过 Playwright 运行固定的、版本化的场景词汇
返回屏幕截图的步进索引证据,DOM,可访问性,URL/history,
存储、console/errors、网络、WebSockets、框架、工作人员、弹出窗口和
取消了下载。缺失或截断的部分永远无法支持平等
索赔。
export REA_BROWSER_SCENARIO_ENABLED=true
export REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON='["/usr/bin"]'
export REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON='["http://127.0.0.1:9222"]'
export REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON='["http://127.0.0.1:3000"]'
export REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON='["REA_TEST_PASSWORD"]'
rea capture-browser-scenario ./scenario.json --json
启动模式拥有一个临时浏览器配置文件,并在终止后将其删除
启动的浏览器。连接模式接受一个精确环回 CDP 目标并且
断开连接而不关闭外部浏览器。自动化没有默认值
grant:使用共享的project/session策略,或者设置
REA_BROWSER_SCENARIO_AUTO_GRANT=true 仅适用于可信无人值守
环境。场景 JSON 包含秘密引用和环境变量
名称,绝不是秘密值。请参阅
浏览器场景合约。
Node 和 Electron V8 Inspector 观察
默认情况下单独禁用仅附加 JavaScript 运行时观察:
export REA_V8_INSPECTOR_OBSERVE_ENABLED=true
rea list-javascript-runtime-targets http://127.0.0.1:9229 --json
rea observe-javascript-runtime http://127.0.0.1:9229 TARGET_ID
--runtime-kind node --json
rea 仅发送 Runtime.enable 和 Debugger.enable。它保留了经过验证的
脚本位置和执行上下文生命周期事件;
require/import 边缘、EventEmitter 活动、电子 IPC、PID 身份,以及
电子角色身份仍然是明确的未知数。参见
被动节点和 Electron 运行时观察。
确切的包、工具系列、提供程序、安装客户端、模式和 CLI 事实是从 docs/product-catalog.json 中的源生成的。 PR CI 验证此目录、叙述性文档、生成的模式和干净的 TypeDoc 渲染。
路线图
rea 正在发展成为一个工具包,用于跨静态工件和观察到的行为理解软件。上面的当前状态是发货基线;以下项目是计划的工作。
现在
下一步
后来
新的提供商必须生成与现有功能相同的证据和安全元数据,然后才能成为公共工作流程的一部分。一旦 rea 拥有多个可选工具链,设置就可以成为功能选择性的;未来工作的同意规则记录在 安装路线图 中。
请参阅 静态分析提供程序评估,了解已发布的 Ghidra 功能分析边界、剩余准入门和提供程序比较矩阵; ADR-0001 用于绑定、选择、配置文件、快照和兼容性决策; 受控重播指南 加上 ADR-0002 用于已发货的 JavaScript 重播边界;和 ADR-0003 用于托管代码证据和提供程序设计。
请参阅 本机 UI 和调度调查指南,了解已编译的 Interface Builder 解码、符号派生元数据限制和当前 p 代码值流边界。
与其他代理一起使用 rea
安装程序会检测 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf 和 Devin。它会自动配置前六个(如果存在);报告检测到的 Devin 安装,但保持不变。任何支持本地 MCP 服务器的代理都可以使用 rea 并进行以下配置。
手动MCP配置
{
"mcpServers": {
"rea": {
"command": "npx",
"args": ["-y", "[email protected]", "mcp"]
}
}
}
持久注册应使用一个确切的包版本。 rea setup
维护该 pin,同时升级捆绑技能,并提供 Codex
冷包运行程序启动时有 30 秒的启动时间。一个互动的
rea upgrade 在安装新的可执行文件后打开更新的安装计划;
结构化或非交互式升级会告诉您显式运行该同步。
重新启动已批准的注册发生更改的客户端。
MCP 支持提示的客户端还可以发现六项有序调查
通过 prompts/list 的工作流程。它们的可选标识符参数使用
当前会话有界 completion/complete 建议;看到
引导 MCP 提示和完成。
它是如何运作的
flowchart LR
Agent["Agent"] --> REA["REA
CLI + MCP"]
Terminal --> REA
REA --> Session["Target-bound session router"]
Session --> Registry["Deep-provider registry
deterministic selection"]
Registry --> Hopper["Hopper provider"]
Registry --> Ghidra["Ghidra provider
read-only inventory + function analysis"]
Hopper --> Runtime["Owned provider runtime
deadline + bounded diagnostics + cleanup"]
Ghidra --> Runtime
Session --> Native["Native macOS provider"]
Session --> Artifact["Artifact graph provider"]
REA --> Browser["Browser CDP provider"]
REA --> Process["Process capture provider"]
Runtime --> Target["Target software"]
Process --> Target
Native --> Target
Artifact --> Target
CLI和MCP服务器使用相同的应用程序工作流程和证据合约。提供者声明它支持哪些功能以及这些功能可能产生的副作用。终端命令是短暂的; MCP 会话可以保留该会话的活动目标和证据分类账。
CLI
上面的代理工作流程是使用 rea 的最简单方法。如需从终端获得一次性概览:
npx -y rea-agents@latest analyze /Applications/Notes.app
npx -y rea-agents@latest inspect /Applications/Notes.app
npx -y rea-agents@latest search /Applications/Notes.app "offline"
npx -y rea-agents@latest function /Applications/Notes.app 0x1000
npx -y rea-agents@latest xrefs /Applications/Notes.app 0x1000
npx -y rea-agents@latest trace /Applications/Notes.app "offline"
npx -y rea-agents@latest compare /absolute/path/to/left-evidence.json /absolute/path/to/right-evidence.json
npx -y rea-agents@latest capabilities
npx -y rea-agents@latest providers
运行npx -y rea-agents@latest --help进行直接反编译、有界搜索和
其他选项。 analyze 和 inspect 共享相同的概览工作流程;
function、xrefs 和 trace 返回与 MCP 相同的证据信封。
或者全局安装rea命令:
npm install --global rea-agents
rea --help
rea upgrade
rea mcp
rea 直接接受Mac .app 文件夹。如果代理无法按名称找到应用程序,请告诉它该应用程序的安装位置。
选择深度分析提供商
每次深度分析开放都会在创建其客户端之前解决提供商的问题。的 相同的选择器和优先级适用于 CLI、MCP 和启动配置:
rea providers --json
rea analyze /absolute/path/to/program --provider hopper
REA_ANALYSIS_PROVIDER=hopper rea decompile /absolute/path/to/program 0x1000
对于 MCP,传递 open_binary 上的可选选择器:
{
"path": "/absolute/path/to/program",
"provider_id": "hopper"
}
请求级别 provider_id 或 --provider 胜出
REA_ANALYSIS_PROVIDER;全部接受提供者 ID 或 auto。自动选择
绑定唯一可用的深度候选者,当有多个候选者被绑定时报告 ambiguous
可用,并且可以保留仅工件的目标未绑定,因此其不相交的工件
操作仍然有效。明确未知、不可用或不受支持
提供者因候选 IDs、稳定的拒绝代码和可操作的本地而失败
诊断。 binary_session、rea providers 和 rea capabilities 暴露
权威的analysis_provider_candidates和
analysis_provider_binding 字段。每个开放目标还有一个
analysis_run.run_id 在提供程序启动之前分配。当动态提供者
开始,analysis_run.process_lineage由not_observed变为snapshots
并在每次启动时保留一个提供者归因的、经过令牌验证的观察
提供者。每个观测值带有 observed_at 并保持为 unavailable 或
verified;经过验证的空后代列表与两者不同。快照
描述有限的观察结果,而不是当前的实时状态或历史缺失。
对于串行工作的提供商,analysis_activity 区分 idle,
busy和timed_out_busy,并报告活动操作、经过的时间、
调用者状态、超时和排队请求计数。因此调用者超时
并没有错误地暗示 Hopper 的 Python 线程可用。 close_binary
清除 rea 会话,但在经过身份验证时返回 cleanup_incomplete
文档关闭、拥有的进程清理或私有运行时删除不能
已验证。
在没有选择器的情况下重新打开相同的目标会保留其绑定;运行时失败
永远不会默默地选择另一个提供商。
Ghidra 可以在医生之后作为可用的、目标兼容的候选人出现
验证其准确安装。其能力列表包含 19 项承认的
只读库存和功能分析操作;选择它仍然如此
不使仅 Hopper GUI 或变异操作可用,并且永远不会触发
沉默的后备。
CLI 退出状态
| 状态 | 含义 |
|---|---|
0 |
请求的操作已完成。真实的未知数、警告以及部分或截断的证据仍然是成功的结果。 |
1 |
参数、策略、权限、提供程序分析、完整性检查、取消、超时、安装、诊断、更新、卸载、输出编码或输出写入阻止完成。当 rea 可以对其进行编码时,结构化输出可识别故障类别。 |
128 + N |
该进程从信号 N 结束,其中 shell 或运行时保留传统的信号派生状态。 |
setup 对于 planned、needs_confirmation 或 needs_human 返回 1
因为配置还没有准备好;批准或修复后重新运行。
当任何检查不正常时,doctor 返回 1。输出格式,完整信封,
过滤器和令牌控件永远不会改变操作状态。
当 rea 为 shell 管道提供数据时,启用 pipefail,以便下游格式化程序
无法掩盖其失败:
set -o pipefail
rea inventory-artifact ./app.asar --json | jq . > inventory.json
当前料斗供应商
rea 在需要时启动料斗; Hopper 不需要先运行。 Hopper 的启动器在内部激活应用程序,因此打开目标可能会将 Hopper 带到前台。 rea 要求 macOS 尽可能在后台隐藏并启动 Hopper,但不能保证它将保留在当前应用程序后面。
rea 派生显式格式和体系结构参数,以防止常见的 FAT 和 ARM 选择对话框。其他 Hopper 或 macOS 对话框可能仍需要人员。 rea 通过 CLI 或 MCP 结果报告启动失败和修复,而不是尝试回答 UI 提示。
Hopper 桥接调用通过串行 FIFO,因为 Hopper 的 Python API 在一个专用线程上运行。呼叫等待响应或呼叫者取消。取消活动呼叫可以解决该呼叫者的问题,但保留其线槽直到 Hopper 回复,从而保留 request/response 相关性; binary_session.analysis_activity 公开活动工作,MCP 进度报告已用时间。成功的反编译文本按文档和过程进行缓存,由伪代码和档案请求共享,并在重命名或注释突变后失效。
Hopper 的同步公共 Python 调用在操作完成时返回;呼叫者可以取消等待。当原始指令方向回答问题时,使用 read_function_instructions 或 rea instructions,而不请求反编译或整个程序 name/string 库存。
关闭 rea 会话会关闭其网桥并删除其私有套接字目录。它不会退出用户可能正在使用的 Hopper 应用程序。如果无法验证关闭或清理,close_binary 将返回 cleanup_incomplete 以及受影响的本地资源。
高级过程捕获设置
默认情况下禁用进程捕获。启用它需要
REA_PROCESS_CAPTURE_ENABLED=true,批准的可执行文件和工作根
REA_PROCESS_EXECUTABLE_ROOTS_JSON 和 REA_PROCESS_WORKING_ROOTS_JSON,以及
REA_PROCESS_ALLOWED_ENV_JSON 中的环境允许列表。因为当前的PTY
适配器使用主机网络,它还需要
REA_PROCESS_ALLOW_EXTERNAL_NETWORK=true.
设置 REA_PROCESS_CAPTURE_AUTO_GRANT=false 来配置那些进程捕获
将限制作为上限,而不隐式授予它们。此模式仍保留
失败关闭,直到建立更窄的拨款。
捕获场景或比较两个保存的流程捕获证据记录:
rea capture-process ./scenario.json > authority.json
rea capture-process ./reconstruction.json > reconstruction.json
rea compare-process-captures authority.json reconstruction.json
比较分别报告每个观察到的维度并确定 第一个终端、交互、退出、文件系统、协议、进程或填充程序 分歧。请参阅 进程捕获 了解场景 字段、命令填充重播、检查点触发器、限制和安全行为。
rea 为受支持的 macOS、Linux 和 Windows 安装预构建的 PTY 后端 架构。如果能力检查报告后端不可用, 为当前平台和架构重新安装 rea。
ASAR 库存验证两个存档条目的电子完整性元数据
和 .asar.unpacked 配套文件。完整性失败识别逻辑
路径,声明和计算的 SHA-256 值,以及该条目是否是
拆开包装; rea并没有默默接受不匹配的神器。如果提供了
ASAR 声明本地工件中不存在的未打包伴随字节
设置后,rea 将该事件保留为 unavailable 并继续分析
嵌入 JavaScript 而不是将丢失的 native/resource 字节视为
已验证或不存在。
安全模型
rea不提供托管分析服务。 Hopper 和 Linux Ghidra 桥接通信使用经过身份验证的私有本地套接字。 Windows Ghidra P0 使用经过身份验证的 IPv4 环回,但不声明命名管道 DACL 或敌对本地用户隔离。动态功能默认处于禁用状态,需要运营商策略和明确的每次调用批准。交付的提供程序、被动观察者和进程捕获不是安全沙箱:提供程序和启动的目标以当前用户的权限运行。提取的 JavaScript 重放是一种独特的仅限 Linux 的功能,除非 Bubblewrap 命名空间、架构检查的 seccomp、私有运行时挂载和委派 cgroup 限制可用,否则无法关闭;它永远不会继承浏览器、Electron 或 Process Capture 权限。请参见 ADR-0002。通过 SECURITY.md 中的私有进程报告漏洞。
FAQ
Does 在启动之前需要运行料斗 rea?
否。rea 在操作需要时启动料斗。还支持已运行的 Hopper 应用程序。
Why Hopper 是否出现在我的其他窗口前面?
Hopper 的启动器在内部激活应用程序。 rea 请求后台启动,但 macOS 和 Hopper 仍可能向前显示窗口或对话框。请参阅 料斗应用程序行为。
Does rea 安装或包含 Ghidra 或 Java?
不需要。Ghidra 支持是自带的。 rea 仅打包其 Java 桥源,验证确切支持的 Ghidra 12.1.4 和 64 位 JDK 21 安装,并在安装批准记录路径后通过 Ghidra 的外部脚本路径加载该桥。
Does rea 上传应用程序吗?
rea没有托管分析服务。当前的提供商在本地分析工件并捕获行为。您的经纪人或模特提供商可能有自己的数据正策,因此请单独查看。
Can rea 恢复原始源代码?
没有反编译器可以保证原始来源。 rea 提供代理伪代码、程序集、符号、字符串、元数据和关系,可用于解释或兼容地重新创建观察到的行为。
Which 代理可以使用rea吗?
任何可以运行本地 MCP 服务器的代理都可以使用手动配置。安装程序检测 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf 和 Devin;它会自动配置前六个(如果存在)并报告 Devin,而不对其进行修改。
发展
有关设置、架构和发布的信息,请参阅 CONTRIBUTING.md
指令和 docs/testing.md 用于行为测试
深度、重点开发人员命令、覆盖范围和 CI 证据。 PR CI
将生成的 API 文档发布为 api-docs 工作流程工件。
npm run verify:agent 运行无品牌本机、JavaScript-application、托管、
并且浏览器会通过真实的本地 Codex CLI 进行提示。其JSON报告措施
自然 MCP 使用、第一工具路由、重复调用、实际 Codex 令牌使用情况、
完成质量,以及对权威和未知的明确处理。
npm run evidence:generate 重新生成托管一致性清单并
来自实时验证器输出的证据完成分类帐。 npm 运行 evidence:check 重新运行验证程序,并在工件、场景、
提供者、模式、声明计数、证据 IDs 或捆绑技能有
漂移了。不受支持的主张仍然是明确的,永远不会被视为通过。
验证者 JSON 报告包含之前分配的临时 verifier_run UUID
验证者执行工作并由其子进程继承
REA_PROCESS_RUN_ID。最终报告包括验证者和家长 PIDs
加上 process_lineage 及其 ISO observed_at 时间戳:POSIX 验证者
报告经过令牌验证的时间点启动器进程组并实时
后代,而没有拥有的平台
谱系原始报告 status: "unavailable" 和原因。已验证为空
后代名单意味着在最终观察期间没有孩子活着;确实如此
不声称验证者之前没有启动任何子项。嵌套验证器入口点
在同一进程中重用其UUID;每个新的验证程序都会替换任何
继承了具有新运行身份的父代币。
生成的完成承诺故意排除此每次执行
身份,因此检查模式保持确定性,同时保留实时报告
可归因。
拥有的 Hopper 关闭日志保留启动器 PID、进程组 ID、清理
状态,以及是否需要经过验证的组信号。他们省略了跑步
令牌和意外的异常文本。 real-Hopper 验证者也会启动
不相关的 Hopper- 命名哨兵在不同的进程组中并且失败,除非
该过程在每次会话结束时都有效;哨兵只能被删除
生存检查后的验证者。
项目链接
npm · 问题 · 安全 · 贡献 · 料斗 · Ghidra