プログラミング
REA Reverse – Anythingをリバースエンジニアリングする
REA Reverse – Engineer Anything (rea.tools)
要約
REAは、コーディングエージェントがソフトウェアを検査し、その仕組みを解明するためのリバースエンジニアリングツールです。ユーザーは自然言語で質問するだけで、エージェントがアセンブリコードやデコンパイルされたコードを解析し、機能のロジックを説明したり、再現したりします。このツールは、Windows Calculatorのパーセント計算やChromeの恐竜ゲームの速度上昇ロジックの解明といった例を通じて、その活用方法を示しています。
全文翻訳
ソフトウェアがどのように機能するかをコードエージェントで発見する
REAは、エージェントにプログラムを検査し、それが何をするかを説明するためのツールを提供します。
REAがどのように機能するかを見る ↓
セットアップガイド
ショーケース →
すでにREを知っていますか? 分析ガイドに進む →
REAをセットアップする
これをコードエージェントにコピーしてください:
あなたのコードエージェント
コピー ›
npx rea-agents@latest setup を使用して、REAをインストールし、このコードエージェントに接続します。
承認のためにセットアッププランを表示し、次にインストールの確認を行ってください。
または、ターミナルでこれを実行してください:
npx rea-agents@latest setup
コピー
セットアッププランを承認し、次にエージェントを再起動してください。
リバースエンジニアリングとは?
プログラム自体を調べて、ソフトウェアがどのように機能するかを発見することです。
目標: ある機能を説明、変更、または再構築するのに十分なほど理解することです。
一つの疑問: なぜCalculatorは200 + 10% に対して220を返すのでしょうか?
REA以前 · あなた自身が調査する
01 ブランチをデコードする
02 コールをトレースする
03 ルールを再構築する
元の 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 ; … 値コピー命令は省略 …
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を使用 · エージェントに質問する
一つのプロンプト。
エージェントに平易な英語で質問します。
例のプロンプト · Calculator
コピー ›
REAを使用してWindows Calculatorを検査してください。
なぜ200 + 10% は220になるのですか?
例の回答 · 発見に基づく
+ の後、% ボタンは最初の数値のパーセンテージを取得します。
200 の 10% = 20↓200 + 20 = 220
REAが提供するもの
ハンドラーの命令、デコンパイルされたコード、およびコール。
あなたのエージェントが説明するもの
どのブランチが適用され、何が計算され、どのように再構築するか。
インストールされている Calculator DLL からの選択されたアセンブリ。
思考と応答は発見を例示します。
Calculatorの例を続けます ↓
二つの例を試してみましょう。
ゲームの速度を変更し、次にCalculatorに戻ってパーセントボタンを再構築します。
例01 · Chromeの恐竜ゲーム
なぜ恐竜は速くなるのですか?
目標
速度調整可能なゲームを再構築する。
なぜリバースエンジニアリングするのか?
その加速を再現するには、実行中のゲームのルール、つまり開始速度、増加量、停止時期を知る必要があります。
再構築されたゲームをプレイする
6 → 10 → 13
プレイ
ジャンプ ↑
リスタート
速度 6.0
元のルール: 6で開始し、13に向かって増加します。
スライダーを動かして独自の速度を設定します。
スペースキーまたはジャンプでサボテンをクリアします。
REAが返したもの
実際にページで実行されているスクリプト。
エージェントは、その更新関数と速度設定を読み取り、そのルールを新しいゲームで使用します。
例のプロンプト · 恐竜ゲーム
コピー ›
REAを使用してこの恐竜ゲームを検査してください。
なぜ速くなるのですか?
速度ルールを表示し、次に調整可能な速度を持つ小さなバージョンを構築してください。
検査対象: wayou の Chromiumベースのブラウザエディション。
REA · ロードされた index.js · 選択された行
if (this.currentSpeed < this.config.MAX_SPEED) {
this.currentSpeed += this.config.ACCELERATION;
}
6で開始します。
衝突がない場合、更新ごとに0.001ずつ増加し、速度が13未満の間。
速度ラボを開く →
各部分の機能
01 · REAは実行中のゲームのスクリプトを読む
実際のコードと設定をエージェントに返します。
02 · あなたのエージェントはルールを再構築し、コントロールを追加する
回復した加速を、速度スライダー付きの小さなゲームで使用します。
03 · あなたは速度を変更してプレイする
元の加速を試してから、独自のペースを選択します。
スクリプト、チェック、および分析の試行方法を見る
REAは、ローカルデバッグ接続を介してHTTPブラウザエディションを検査し、ロードされたindex.jsをソースとダイジェストとともに返しました。
検査されたスクリプトからの選択された設定
ACCELERATION: 0.001, MAX_SPEED: 13, SPEED: 6
制御されたブラウザチェックで元のゲームの更新関数を呼び出し、障害物と自動スケジューリングを無効にしました。
4,000回の更新後、速度は10.0でした。10,000回後、それは13.0(小数点以下第一位に丸め)でした。
新しいミニゲームは、その速度ルールを維持しています。
描画、ジャンプ、衝突コードは、小さな教育用実装です。
ラボを開いて新しいコードを確認し、同じ速度チェックを実行してください。
ターゲットを自分で検査するには、恐竜ページを使用してブラウザ接続の手順に従ってください。
エージェントにそのページのURLとローカルデバッグエンドポイントを与え、次に上記のプロンプトをコピーしてください。
検査された速度コード · Chromium
著者 · BSDライセンス
例02 · Windows Calculator
Calculatorのパーセントボタンを再構築する。
なぜ200 + 10% が220になるのかを見ました。
次に、+ と × の両方のルールを回復し、試してみましょう。
目標
+ と × を正しく処理する小さな電卓を構築する。
なぜリバースエンジニアリングするのか?
同じボタンが + と × の後に異なるルールを使用します。
インストールされているアプリを検査して、パーセンテージがどの数値に適用されるかを見つけます。
計算を試す
200 + 10%
200 × 10%
200 + 20 % = リセット
200 の 10% = 20。次に 200 + 20 = 220。
検査されたパーセントルールのインタラクティブな例。
REAが返したもの
一つのブランチは100で割ります。もう一つのブランチは最初の数値に掛けます。
エージェントは両方を使用して % ボタンを再作成します。
この例では、previous = 200、current = 10 です。
例のプロンプト · % ボタンの再構築
コピー ›
REAを使用してWindows Calculatorの % ボタンを検査してください。
+ と × の後のルールを回復し、次に両方を使用する小さな電卓を構築してください。
% ハンドラーの読みやすい要約
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
インストールされているアプリから動作する % ボタンへ
01 · REAはcalc.exeを読む
Calculatorアプリを起動します。
エージェントはms-calculator: を開きます。
次に、インストールされているアプリのライブラリを選択します。
02 · REAはライブラリを読む
% ハンドラーのコードを返します。
関数は演算子をチェックし、定数100を使用します。
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 Calculator 11.2508.4.0, x64。
読みやすい要約は、Microsoftの公開ソースからの名前を使用して、回復されたブランチを説明します。
パーセンテージの実装 · Microsoftのテストケース · ネイティブセットアップガイド
最初のリバースエンジニアリング
小さなアプリでREAを試してください。
Notesの例をダウンロードし、CSVエクスポートをトレースし、変更された入力の一つを確認してください。
ガイド付き例を試す
さらに深く掘り下げたいですか?
理解したいことや構築したいことをエージェントに伝えてください。
REAを使用すると、このウェブサイトのクローン作成から、実行可能ファイルからゲームを再構築することまで、あらゆるものに取り組むことができます。
例のプロンプト · ウェブサイト
コピー ›
REAを使用して https://rea.tools/ を検査してください。
このウェブサイトをクローンしてください。
はい、これです。
例のプロンプト · ゲーム再構築
コピー ›
REAを使用して、このゲームを実行可能ファイルから再構築してください。
ゲームプレイロジックをC言語で回復し、元のものと比較してテストしてください。
DX-Ballのケーススタディを見る →
セットアップと分析の手順については、ターゲットを選択してください:
ネイティブバイナリ
実行可能ファイルおよびライブラリ内の関数、文字列、参照、および呼び出し関係を検査します。
ネイティブ分析ガイド
JavaScript & Electron
アプリケーションフォルダまたはASARアーカイブからモジュール、ルート、IPC、およびネイティブ依存関係をマッピングします。
アプリケーションワークフロー