在本頁

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

弄清楚
軟體如何工作。

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://rea.tools/。幫我克隆這個網站。

對,就是這個網站。

示例 prompt · 遊戲重建

用 REA 從這個遊戲的可執行檔案重建遊戲。用 C 還原遊戲邏輯,並對照原版測試。

檢視 DX-Ball 案例 →

根據目標選擇配置和分析指南:

原生二進位制

檢查可執行檔案和庫中的函式、字串、引用和函式呼叫關係。

原生分析指南

JavaScript&Electron

從應用目錄或 ASAR 檔案中分析模組、路由、IPC 和原生依賴。

應用分析流程

瀏覽器與執行時活動

記錄指定的瀏覽器或程序活動,再比較不同執行的結果。

瀏覽器觀察指南

有什麼問題嗎?

閱讀 FAQ、在 Discord 和我們聊聊,或提交 GitHub issue反饋 bug 和功能需求。

加入社群

在 Discord 分享調查,與其他 REA 使用者交流。關注 REA 的 X 賬號獲取專案更新。

頂部