在本页

和编程助手一起做逆向工程

弄清楚
软件如何工作。

REA 为编程助手提供分析工具,让它检查程序并解释程序的行为。

已经了解逆向工程?直接看分析指南 →

想深入了解?阅读博客 →

安装与配置 REA

把这段话复制给编程助手:

你的编程助手

使用 npx rea-agents@latest setup 安装 REA,并连接到这个编程助手。先展示安装计划,等我确认后再执行,然后验证安装结果。

也可以在终端运行:

npx rea-agents@latest setup

确认安装计划后,重启编程助手。

第一次使用,还没安装 Node.js 或编程助手?跟着安装指南一步步来 →

什么是逆向工程?

通过检查程序本身,弄清软件如何工作。

目标是理解一项功能,从而能解释它、修改它,或重新实现它。

比如:为什么计算器算 200 + 10% 会得到 220?

使用 REA 之前 · 你要亲自调查

原始 x64 指令节选
0x180124945: MOV EAX, dword ptr [R13 + 0x18]
0x180124949: CMP EAX, 0x5c
0x18012494c: JZ 0x180124aba
0x180124952: CMP EAX, 0x5b
0x180124955: JZ 0x180124aba
0x18012495b: MOV EDX, 0x64
0x180124960: LEA RCX, [RSP + 0x160]
0x180124968: CALL 0x180122650
0x18012496e: LEA RDX, [R13 + 0x160]
0x180124975: LEA RCX, [RSP + 0x78]
0x18012497a: CALL 0x180109720
0x18012497f: MOV RSI, RAX
0x180124982: MOV qword ptr [RSP + 0x28], RAX
0x180124987: LEA RDX, [RSP + 0x160]
0x18012498f: MOV RCX, RAX
0x180124992: CALL 0x180123190
; … value-copy instructions omitted …
0x180124a14: MOV RDX, RDI
0x180124a17: LEA RCX, [RSP + 0xf8]
0x180124a1f: CALL 0x180109720
0x180124a24: LEA R8, [RSP + 0x30]
0x180124a29: MOV RDX, RAX
0x180124a2c: LEA RCX, [RSP + 0xb8]
0x180124a34: CALL 0x180123c10

你需要读懂指令、追踪调用,再还原计算过程。

使用 REA · 你只需问编程助手

一句话即可。

用日常语言告诉助手你的问题。

示例 prompt · 计算器

用 REA 检查 Windows 计算器。为什么 200 + 10% 会得到 220?

示例回答 · 根据分析结果

在 + 之后,% 按钮计算的是第一个数的百分比。

10% of 200 = 20200 + 20 = 220
REA 提供
处理函数的指令、反编译代码和调用关系。
编程助手解释
走哪个分支、怎样计算,以及如何重新实现。
汇编节选自已安装的计算器 DLL。思考过程和回答用于解释分析结果。继续看完整的计算器示例 ↓

来试两个例子。先调整游戏速度,再回到计算器,重新实现 % 按钮。

示例 01 · Chrome 小恐龙游戏

为什么恐龙变得更快?

目标
重建一个速度可调的游戏。
为什么逆向工程?
要复现加速过程,得先找到实际运行的游戏中的规则:起始速度是多少、每次增加多少、何时停止加速。

试玩重建版

6 → 10 → 13

原版规则:速度从 6 开始,逐渐增加到 13。

拖动滑块,选择自己的速度。按空格键或“跳跃”越过仙人掌。

REA 返回

页面实际运行的脚本。助手读取更新函数和速度设置,再把规则用到新的游戏中。

示例 prompt · 小恐龙游戏

用 REA 检查这个小恐龙游戏。它为什么会越来越快?找出速度规则,再做一个速度可调的小版本。

分析目标:wayou 基于 Chromium 制作的浏览器版本。

REA · 已加载 index.js · 代码节选
if (this.currentSpeed < this.config.MAX_SPEED) {
  this.currentSpeed += this.config.ACCELERATION;
}

起始速度为 6。速度低于 13 时,每次没有发生碰撞的更新增加 0.001。

打开速度实验室 →

各部分负责什么

  1. 01 · REA读取正在运行的游戏脚本把实际代码和设置交给助手。
  2. 02 · 编程助手重建规则,加入控制把还原的加速规则用于带速度滑块的小游戏。
  3. 03 · 你调整速度,亲自试玩先体验原版加速,再选择自己的节奏。
查看脚本、验证过程和分析步骤

REA 通过本地调试连接检查 HTTP 浏览器版本,返回了已加载的 index.js,包含源码和摘要。

实际脚本中的设置节选
ACCELERATION: 0.001,
MAX_SPEED: 13,
SPEED: 6

我们在受控的浏览器检查中调用原版更新函数,禁用了障碍物和自动调度。保留一位小数时,更新 4,000 次后的速度为 10.0,更新 10,000 次后为 13.0。

新小游戏保留了这条速度规则。绘图、跳跃和碰撞代码是简化的教学实现。打开实验室,可以查看新代码并运行同样的速度检查。

想亲自分析?用小恐龙页面跟着浏览器连接步骤操作。把页面网址和本地调试地址交给助手,再复制上面的 prompt。

分析的速度代码 · Chromium Authors · BSD 许可证

示例 02 · Windows 计算器

重新实现计算器的 % 按钮。

我们已看到为什么 200 + 10% 得到 220。现在把 + 和 × 后的规则都还原出来,亲自试试。

目标
做一个小计算器,能正确处理 + 和 × 两种情况。
为什么逆向工程?
同一个按钮,在+ 和 × 后采用不同规则。我们检查已安装的应用,弄清百分比究竟作用于哪个数。

试试计算

200 + 20

200的10%=20. 则200+20=220。

根据实际分析得到的百分比规则制作的交互示例。

REA 返回

一个分支除以 100;另一个还要乘上第一个数。助手用这两条规则重新实现 % 按钮。

对于这个例子, previous = 200 和 current = 10.

示例 prompt · 重建 % 按钮

用 REA 检查 Windows 计算器的 % 按钮。还原 + 和 × 后的规则,再做一个同时采用这两条规则的小计算器。

% 处理函数的可读摘要
if (operation == multiply || operation == divide) {
  percent = current / 100;
} else {
  percent = current * previous / 100;
}
在 + 之后
取第一个数字的10%。10% of 200 = 20 → 200 + 20 = 220
在 × 之后
把10%变成0.1。200 × 0.1 = 20

从已安装的应用,到能运行的 % 按钮

  1. 01 · REA 读取 calc.exe它启动计算器应用代码打开 ms-calculator:。助手随后选择已安装应用的库。
  2. 02 · REA 读取库返回 % 处理函数的代码函数检查运算符,并使用常量 100。
  3. 03 · 编程助手解释解释并复现规则对照 Microsoft 的源码核实分支,再试试上面的 + 和 ×。
查看实际代码和验证方式
REA · 原始指令节选
0x180124945: MOV EAX, dword ptr [R13 + 0x18]
0x180124949: CMP EAX, 0x5c
0x18012494c: JZ 0x180124aba
0x180124952: CMP EAX, 0x5b
0x180124955: JZ 0x180124aba
0x18012495b: MOV EDX, 0x64
运算符 ID · Microsoft 源码
#define IDC_MUL 92      // 0x5c
#define IDC_DIV 91      // 0x5b
#define IDC_PERCENT 118 // 0x76

0x64 = 100

使用 REA 4.1.0 检查 Windows 计算器 11.2508.4.0(x64)。可读摘要采用 Microsoft 公开源码中的名称,解释还原的分支。

百分比实现 · Microsoft 测试用例 · 原生分析配置指南

第一次调查

用一个小应用试试 REA。

下载 Notes 示例,追踪 CSV 导出,再修改一个输入来验证。

跟着示例开始

想更深入吗?

告诉助手你想弄清什么,或者想做什么。有了 REA,你们可以从克隆这个网站,一直做到从可执行文件重建一款游戏。

示例 prompt · 网站

用 REA 检查 https://reverseengineeranything.app/。帮我克隆这个网站。

对,就是这个网站。

示例 prompt · 游戏重建

用 REA 从这个游戏的可执行文件重建游戏。用 C 还原游戏逻辑,并对照原版测试。

查看 DX-Ball 案例 →

根据目标选择配置和分析指南:

原生二进制

检查可执行文件和库中的函数、字符串、引用和函数调用关系。

原生分析指南

JavaScript&Electron

从应用目录或 ASAR 文件中分析模块、路由、IPC 和原生依赖。

应用分析流程

浏览器与运行时活动

记录指定的浏览器或进程活动,再比较不同运行的结果。

浏览器观察指南

有什么问题吗?

阅读 FAQ、在 Discord 和我们聊聊,或提交 GitHub issue反馈 bug 和功能需求。

加入社区

在 Discord 分享调查,与其他 REA 用户交流。关注 REA 的 X 账号获取项目更新。

顶部