跳到主要內容

讓 agent 讀懂計算機的 % 按鈕:REA 怎麼把逆向工程工具交給 AI

閱讀時間約 6 分鐘

為什麼 Windows 計算機按 200 + 10% 會得到 220,而不是 200.1 或 10?REA(Reverse Engineer Anything)的官網拿這個問題示範:讓 coding agent 直接讀計算機安裝檔裡的機器碼,找出 % 按鈕的規則。答案是:% 前面是加號時,它取的是第一個數的百分比;前面是乘除時,才只把 10 變成 0.1。

這個例子剛好說明 REA 的分工:REA 不負責「想」,只把指令、呼叫關係和執行時的觀察交給 agent,由 agent 推理、對照、驗證。看懂這個分工,就知道這類工具能做到哪裡。

REA 是一層 MCP,不是一個會思考的反編譯器

逆向工程(reverse engineering)是在沒有原始碼時,從程式本身推回它怎麼運作。傳統上是人開著 Ghidra、IDA、Hopper 這類反組譯工具逐個函式讀。

REA 把這些工具包成 MCP(Model Context Protocol,讓模型呼叫外部工具的協定)伺服器。執行 npx rea-agents setup 後,Claude Code、Codex、Cursor 等 agent 就能呼叫它。回傳內容依目標而定:

  • 原生執行檔:虛擬碼、組合語言、字串、符號與呼叫關係,需要搭配 Hopper、Ghidra 或 IDA
  • JavaScript/Electron 應用:模組、import、IPC(行程間通訊)與原生擴充的關係,靜態分析不用執行程式
  • 網站與執行中的程式:頁面結構、載入的腳本、網路請求,以及多次執行的比較

另有 .NET、Android APK、韌體等目標。README 強調每個結論都附上證據與限制。

跟著 % 按鈕走一遍

第一步:從問題出發。 使用者只問「為什麼 200 + 10% 是 220」。REA 啟動計算機,agent 挑出負責計算的 DLL。

第二步:拿到指令。 REA 回傳 % 處理函式的組合語言,關鍵只有幾行:

CMP EAX, 0x5c
JZ  0x180124aba
CMP EAX, 0x5b
JZ  0x180124aba
MOV EDX, 0x64

意思是:運算子代號是 0x5c 或 0x5b 就跳到同一處;否則把 0x64(十進位 100)當參數往下呼叫。

第三步:替數字命名。 機器碼只有代號,沒有名字,這是讀者最容易卡住的地方。agent 拿代號去對照微軟公開的計算機原始碼,發現 IDC_MUL 是 92(0x5c)、IDC_DIV 是 91(0x5b),所以那兩個跳躍代表「乘或除走另一條路」。再追下去,非乘除(例如加法)那條路做的是「目前值 × 前一個值 ÷ 100」,也就是 10 × 200 ÷ 100 = 20,最後 200 + 20 = 220。

整理成可讀的形式就是:

if (operation == multiply || operation == divide) {
    percent = current / 100;
} else {
    percent = current * previous / 100;
}

要注意,這段的變數名稱借自微軟公開原始碼,不是從二進位檔直接冒出來的。**REA 給的是位址和常數,意義是 agent 對照外部資料補上的。**官網也標明,agent 的思考和回答是示意。

驗證:讓原程式當裁判

光是「讀懂」還不夠,REA 的案例都會回頭跟原程式比對。Chrome 恐龍遊戲的例子中,REA 透過本機除錯連線讀到實際載入的 index.js,找出速度從 6 開始、每次更新加 0.001、上限 13。接著在受控瀏覽器裡呼叫原遊戲的更新函式:4,000 次後速度 10.0,10,000 次後 13.0,與規則一致。

DX-Ball 的案例更嚴格:重建出來的 C 程式通過 3,205 組與原始 x86 程式對照的測試,並重現了該函式全部 63 個編譯後的位元組。HN 上也有留言者分享,用 Claude 移植沒有原始碼的 Linux 遊戲時,只要有「能不能跑」這種明確訊號,模型就摸得出來。

適合拿來做什麼,又卡在哪裡

從這幾個例子看,REA 最順手的場景是:問題很具體、答案能驗證。「這個按鈕怎麼算」「這個速度怎麼變」都有明確的輸入輸出可以比對。反過來,像留言區有人挑戰的「逆向 iPhone 與 Siri 溝通的內部 API」,目標龐大又缺公開對照,現有案例還證明不了。

實務上還有幾個條件:

  • 深入的原生分析仍要靠 Hopper、Ghidra 或 IDA,商業工具得自己合法取得授權
  • 執行期擷取會用你的使用者權限真的跑目標程式
  • 分析在本機,但工具回傳的結果會送給 agent 背後的模型供應商,適用對方的資料政策
  • 專案聲明只用於合法研究、教育、互通性、軟體保存,以及你擁有或被授權檢查的軟體

把 REA 想成替 agent 準備的放大鏡比較貼切:它讓模型看得到程式內部,但看到的東西代表什麼、重建得對不對,仍要靠對照與測試確認。

參考來源

回應

0 / 1000

還沒有回應,成為第一個留言的人吧。