REA 和 OpenCode:安装和初步调查

Written by

in

REA(逆向工程任何东西)是一种 MCP 服务器,可让您实时对软件应用程序、二进制文件和行为进行逆向工程。该工具涵盖了从应用程序行为到机器代码的路径,并且可以方便地使用OpenCode作为管理它的代理。

OpenCode 是一个位于终端中的开放编程代理。它读取项目文件、编辑代码、运行命令和测试,最重要的是,它开箱即用地支持 MCP,因此 REA 可以直接连接到它。

REA 的独特之处

REA 在逆向工程领域脱颖而出,全面支持多种平台和分析类型:

  • 本机二进制文件:用于反汇编和反编译的 Hopper、Ghidra、IDA 或 Kuna
  • JavaScript 应用程序和 Electron:Electron 模块、导入和边界的静态分析
  • 托管代码:分析 .NET 程序集
  • 实时分析:监控进程行为
  • 网络流量:捕获和分析 HTTP/S 请求和响应
  • 移动应用程序:分析 Android 和 iOS 的 APK 和 IPA 文件
  • 嵌入式软件:嵌入式系统和物联网设备分析
  • 模型文件:提取 GGUF 和安全张量元数据
  • GPU 代码对象:CUDA 和 HIP 内核分析
  • 保存游戏:恢复游戏逻辑和可执行文件

基本架构和哲学

REA 遵循三步研究流程,使开发人员能够进行逆向工程:

  1. 检查:REA 连接到分析工具并检查目标(二进制文件、应用程序、网站)
  2. 分析:跟踪代码,确定规则和行为
  3. 恢复:代理使用结果来解释行为并构建或测试实现

这个过程允许AI代理回答复杂的问题,例如:“了解Notes应用程序中的搜索如何工作,向我展示证据,并为我的项目创建类似的功能。”

实际使用示例

1。移动应用分析

REA 可以分析 Android APK 文件进行恢复:

  • 清单中的声明和权限;
  • 类方法和依赖项;
  • 指向本机库的链接;
  • 网络端点和数据流。

例如,对 Aegis Authenticator 的分析显示了六位授权代码如何每 30 秒更改一次:它检查了基于时间的代码生成 (TOTP) 的工作原理。

2。桌面应用功能提取

对 Windows 计算器中 % 按钮的分析展示了 REA 的功能:

  • 根据上下文定义不同的行为(+ 或 × 之后);
  • 解析汇编指令以理解逻辑;
  • 提取并解释数学运算;
  • 恢复规则:“+之后:第一个数字的10%”和“×之后:将10%转换为0.1。”

3。恢复Web应用程序API

REA 可以记录浏览器会话并将其重建为 RL 环境,其中 AI 代理执行诸如处理文件夹之类的任务,而无需运行原始应用程序。

4。恢复游戏逻辑

DX-Ball 案例展示了 REA 如何通过逆向工程 C 代码来恢复 1996 年 Windows 游戏的声景计算,该代码运行了 3,205 个测试用例并与原始编译代码相匹配。

技术能力

本机分析

  • 与 Hopper、Ghidra、IDA 或 Kuna 配合使用,进行深度二进制文件分析
  • 支持 ELF、PE、Mach-O 等可执行文件格式
  • 提取伪代码、汇编程序、符号和调用
  • 无需启动原始工具即可执行离线分析

JavaScript 分析

  • 分析 Node.js 和 Electron 应用程序
  • 跟踪模块导入和依赖项
  • 通过浏览器连接实时捕获行为
  • Извлекает source maps и минифицированный код

安全

  • PE 证书的静态分析(Authenticode)
  • 防御机制分析(PIE、NX、RELRO、CFG)
  • 映射导入和 DLL
  • 崩溃报告分析 (Apple IPS)

REA 返回什么

REA不会无缘无故地给代理人现成的结论。每个查询的结果都是调查结果及其所依据的证据。根据目的,响应包括:

  • 代码链接 – 实现所研究功能的特定文件和行。
  • 伪代码和汇编器 – 用于本机二进制文件:反编译函数、指令和调用之间的连接。
  • 应用程序结构 – 适用于 JavaScript 和 Electron:模块、导入、路由、IPC 以及与本机插件的连接。
  • 元数据和事实 – 清单、证书、签名、格式标头和其他静态数据。
  • 限制 – 无法解决的地方,并附有关于到底什么仍然未知的注释。

代理使用这些数据来解释行为、回答澄清问题或组装和测试其实现。正是证据的存在和明确的限制将 REA 结果与模型的简单猜测区分开来。

开始之前

假设已经安装了 OpenCode 并且模型已连接到它。 REA 本身需要 Node.js 22.23.4+、24.22.1+ 或 26.12.1+,因此请检查版本:

node -v

第 1 步:将 REA 连接到 OpenCode

REA 在 OpenCode 中注册为 MCP 服务器。在终端中运行:

npx rea-agents@latest setup

要直接指定 OpenCode,请使用其标识符 opencode:

npx rea-agents@latest setup --client opencode

设置的作用:

  • 将 REA 注册为 MCP 服务器;
  • 添加工作流程说明;
  • 制作现有配置的备份副本;
  • 在应用更改之前要求确认。

重点:
对于第一个实验,您可以跳过可选的 Hopper 安装。设置完成后,重新启动 OpenCode:退出会话并再次运行 opencode。

检查连接:

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

成功结果:"healthy": true。

然后询问代理:

“检查 REA 是否已连接,并告诉我您可以使用哪些 REA 工具。”

第 2 步:首次调查

REA 可以在不启动应用程序的情况下分析它们。

  1. 下载示例:
    Download https://rea.tools/examples/notes-example.zip
    

    将存档解压到 notes-example.

  2. 文件夹中

  3. 为代理分配任务:

    “使用 REA 检查 /absolute/path/to/notes-example 处的应用程序。了解当我单击“导出笔记”时会发生什么。显示notes.csv 的写入位置、包含哪些字段以及相关文件和行。”

预期响应:

“按钮发送 notes:export 消息。主进程将注释格式化为 CSV 并将 notes.csv 写入用户的下载文件夹中。列是 id 和 title。”

第3步:Ghidra安装和原生分析

为了分析本机二进制文件(可执行文件和库),REA 使用分析提供程序。最实惠的免费选项是 NSA 的 Ghidra。该工具在运行 REA 的计算机上安装一次。

你需要什么

  • 64 位 JDK 21 或更高版本,包括 Java 编译器 (javac)。
  • 发布页面上的 Ghidra 存档。

安装

  1. 安装 64 位 JDK 21 或更高版本。选择适合您的计算机架构的软件包。
  2. 从发布页面的资产列表中下载 Ghidra 并解压缩 ghidra_…_PUBLIC_….zip 存档。获取发布存档,而不是“源代码”。
  3. 找到包含 ghidraRun 或 ghidraRun.bat 的解压文件夹。 GHIDRA_INSTALL_DIR 变量需要此路径。

看看Java。第一个命令打印 java.home – JAVA_HOME 需要此路径。第二个确认编译器已安装:

java -XshowSettings:properties -version
javac -version

Ghidra 连接

Windows(PowerShell):

$env:GHIDRA_INSTALL_DIR = "C:/tools/ghidra_12.1.4_PUBLIC"
$env:JAVA_HOME = "C:/tools/jdk-21"
npx -y rea-agents@latest doctor --provider ghidra --json
npx -y rea-agents@latest setup

macOS / Linux:

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 -y rea-agents@latest setup

将路径替换为您自己的路径。将命令保留在一个终端会话中:设置环境变量后,重新运行安装程序,确认配置更新并重新启动 OpenCode。

提供商检查应返回成功的报告:

npx -y rea-agents@latest doctor --provider ghidra --json

原生分析示例

为代理提供可执行文件的完整路径并指定提供程序:

“使用 REA 和已配置的提供程序来探索 /absolute/path/to/program。列出函数和行,然后解释处理用户输入的部分,并参考代码。”

或者直接从终端运行命令:

npx -y rea-agents@latest function "/absolute/path/to/program" main --provider ghidra --json

将 main 替换为目标程序函数列表中的函数名称或地址。结果包含伪代码、汇编程序和调用之间的引用。

另一类软件分析

选择目标软件类别:

  • JavaScript / Electron – 需要 Node.js 和 npm。 指南。
  • 网站 – 需要 Chrome、Chromium 或 Edge 浏览器。 指南。
  • Android APK – 需要 JADX 和 JDK 17+。 手册。
  • 本机可执行文件 – 需要 Hopper、Ghidra 或 IDA。 指南。
  • .NET 程序集 – 需要 Node.js 和 npm。 手册。

从终端使用 REA

JavaScript/Electron 应用程序的静态分析

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

将路径替换为包含应用程序或 .asar 文件的文件夹。

在哪里可以找到 Electron 应用程序 .asar 文件:

  • Windows: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar
  • macOS: /Applications/<App>.app/Contents/Resources/app.asar
  • Linux: /opt/<App>/resources/app.asar

全局安装rea命令

npm install --global rea-agents

此后,rea –help 命令可用。

通过curl安装(macOS / Linux)

curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash

安装后,按照说明配置代理。如果未出现设置菜单,请运行rea setup。

更新和删除

REA 更新

npx rea-agents@latest setup

对于全局安装:rea update

删除 REA

npx rea-agents@latest uninstall

获取帮助

典型问题

OpenCode 没有看到 REA

设置后重新启动 OpenCode。使用doctor命令测试连接:

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

提供商需要配置

对于 Ghidra 运行:

npx -y rea-agents@latest doctor --provider ghidra --json

该报告将显示失败的测试和建议的下一步。

Windows、WSL 和带空格的路径

  • 对 Windows 客户端使用 PowerShell
  • 如果代理在 WSL 内运行,请在该 Linux 系统内安装 Node.js 和 REA 并使用 Linux 路径
  • 在终端中,将带有空格的路径用引号引起来

在 macOS 上设置 Hopper

如果 macOS 要求您允许自动化,请在系统偏好设置中允许运行 REA 的应用程序:系统偏好设置 → 隐私和安全 → 自动化,然后重试。

链接

https://github.com/morluto/rea
https://rea.tools/
https://rea.tools/get-started/
https://rea.tools/guides/
https://opencode.ai/
https://opencode.ai/docs/
https://opencode.ai/docs/mcp-servers/

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

DemensDeum
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.