在本頁

和程式設計助手一起做逆向工程

弄清楚
軟體如何工作。

向你的程式開發助手提一個關於應用程式、遊戲或網站的問題。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 案例 →

有什麼問題嗎?

頂部