在本页

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

弄清楚
软件如何工作。

向你的编程助手提一个关于应用、游戏或网站的问题。REA 为它提供工具,让它检查答案背后的代码。

安装与配置 REA

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

你的编程助手

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

也可以在终端运行:

npx rea-agents@latest setup

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

其他安装方式:curl →

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

如何工作

逆向工程就是通过检查程序本身,了解软件如何工作。有了 REA,你的助手可以追踪代码、解释一个功能,并帮你重新实现它。

  1. 问一个具体功能

    给助手一个程序或页面,再提一个问题。

  2. 检查程序

    REA 返回代码、引用关系和运行时观察结果。

  3. 理解它,再试着修改

    助手根据这些发现解释或重新实现这个功能。

展开完整的计算器调查

为什么计算器中的 200 + 10% 得到 220?

一步步阅读指令

原始 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

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

向助手提同一个问题

示例 prompt · 计算器

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

示例回答 · 根据分析结果

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

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

试两个例子吧:先改变游戏速度,再重新实现计算器的 % 按钮。

示例 01 · Chrome 小恐龙游戏

为什么恐龙变得更快?

游戏会随着奔跑越来越快。要重新实现它并加上速度控制,我们先得弄清速度怎么变化。

1. 问一问速度

示例问题 · 恐龙游戏

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

2. 找到速度规则

REA 让助手读到游戏正在运行的代码。速度从 6 开始,低于 13 时,每次更新都会增加一点。

3. 玩一玩结果

我们把这条规则用在下面的小游戏里,加上了速度滑块。点击开始,再选一个自己的速度。

6 → 10 → 13

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

拖动滑块,选择自己的速度。按空格键或“跳跃”越过仙人掌。
打开速度实验室 →
查看脚本、验证过程和分析步骤

分析目标: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 计算器

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

% 按钮在 + 和 × 之后做的事情不同。我们来找出两条规则,在一个小计算器里试试。

1. 问一问 % 按钮

示例问题 · 计算器

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

2. 找到两条规则

REA 帮助助手读到 % 按钮背后的代码。它使用两条不同的规则:

在 + 之后
取第一个数字的10%。10% of 200 = 20 → 200 + 20 = 220
在 × 之后
把10%变成0.1。200 × 0.1 = 20

3. 试试 % 按钮

我们在下面重新实现了两条规则。选 + 或 ×,按 %,再按 =。

200 + 20

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

根据实际分析得到的百分比规则制作的交互示例。
查看实际代码和验证方式

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

% 处理函数的可读摘要
if (operation == multiply || operation == divide) {
  percent = current / 100;
} else {
  percent = current * previous / 100;
}

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

  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 实际案例。

查看已发布应用或游戏中的一个功能,以及相关代码和验证结果。

查看案例 →

Android · APK 分析

验证器如何生成登录验证码

在 Aegis 已发布的 APK 中追踪六位登录验证码,再移动演示时钟,看看它为什么每 30 秒变化一次。

阅读Android案例研究

Electron · 功能追踪

Notion 如何复制文本和 HTML

从 Notion 打包的 JavaScript 追踪到系统剪贴板,看看复制如何保留丰富的区块数据。

阅读Notion案例研究

原生程序 · 重建

DX-Ball 的声像计算

还原一款 1996 年 Windows 游戏如何把球的位置转成左右声道的声音。

阅读DX-Ball案例研究

第一次调查

用一个小应用试试 REA。

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

跟着示例开始

选择你的目标。

这些指南介绍各类软件的环境配置和第一次调查。

原生二进制

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

原生分析指南

JavaScript&Electron

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

应用分析流程

浏览器与运行时活动

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

浏览器观察指南
试一个更大的项目
示例 prompt · 网站

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

对,就是这个网站。

示例 prompt · 游戏重建

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

查看 DX-Ball 案例 →

有什么问题吗?

顶部