
2026/10/10 9:37
REAR(リバースエンジニアリング)で何でもかんでも解析しよう
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
改訂版サマリー:
REA は、新たなコーディングエージェントであり、オリジナルのソースコードにアクセスできない状態でプロプライエタリなバイナリやレガシーシステムをリバースエンジニアリングすることで、開発者がソフトウェアの機能を理解し再構築することを可能にします。デコンパイルやアセンブリ検査といったツールを用いることで、REA は不透明なプログラムを理解可能なコンポーネントへと変換します。例えば、Chrome の Dinosaur ゲームの隠された速度ルールを再構築して調整可能な速度スライダーを付与し、Windows カルキュレーターの論理を分析してパーセントボタンが値を計算する方法を明らかにしました。このシステムはネイティブバイナリ、JavaScript/Electron アプリ、およびブラウザランタイムアクティビティの検査をサポートします。チームはシンプルなターミナルコマンド
npx rea-agents@latest setup を実行することで、すぐに REA を利用を開始できます。この機能はソフトウェア保守に大きな変化をもたらしており、チームが各種アプリケーションタイプにおいて特定の機能を説明し、変更または再構築することを可能にしています。本文
コーディングエージェントと REA によるリバースエンジニアリング入門
ソフトウェアの仕組みを発見しましょう。REA (Reverse Engineering Agents) を使用することで、コーディングエージェントにプログラムを検査させ、それがどのように動作するかを説明するための強力なツールを提供できます。
- すでに REA の知識がある方: 分析ガイドへ移動
- さらに深く学びたい方: 詳細ブログ記事を読む
1. REA のセットアップ
コーディングエージェントに REA を導入する手順です。
インストール手順
以下のコマンドをターミナルで実行してください:
npx rea-agents@latest setup
重要なポイント:
- コマンドを実行するとセットアップ計画が表示されます。
- 計画に同意し、インストールが完了した後、エージェントを再起動してください。
2. リバースエンジニアリングとは?
プログラム自体を検査し、ソフトウェアの動作原理を理解するプロセスです。
主な目標
ある機能を完全に理解できるようになることで、以下の対応が可能です:
- 説明できる: 機能の仕組みを言語化できること。
- 変更できる: コードを修正・拡張できること。
- 再構築できる: 原則からゼロで実装できること。
具体例:Windows 電卓の「200 + 10%」が 220 になる理由
【REАを使用する前】手動調査
- アセンブリ命令をデコードする必要があります。
- コール追跡を手動で行う必要があります。
- 計算プロセスを再構築する必要があります。
例:アセンブリ命令(一部)
; 電卓 DLL 内の処理ロジック 0x180124945: MOV EAX, dword ptr [R13 + 0x18] 0x180124949: CMP EAX, 0x5c ; 'C'キー (Multiply) と比較 0x18012494c: JZ 0x180124aba ; 分岐先へジャンプ ...
【REA を使用する場合】エージェントへの質問
簡単なプロンプト一つで、詳細な説明を生成できます。
プロンプト: "REA を使用して Windows の電卓を検査してください。なぜ '200 + 10%' が '220' になるのか教えてください?"
エージェントの回答例:
ボタンを押した後、+ボタンは最初の数字のパーセント分を計算します。%
- 200 の 10% は 20 です。
- 200 に 20 を加えることで 220 になります。
REA が提供した価値:
- データ提供: REA はハンドラー命令、デコンパイルコード、コール関係を抽出します。
- 説明生成: エージェントは、どの分岐(Branch)が適用されたのかを分かりやすく解説し、再構築方法を提示します。
3. ケーススタディ:2 つの実践例
ゲームの速度変更や電卓操作など、実際のコードを理解する 2 つの事例を紹介します。
事例 01: Chrome のダイノサウルスゲーム
目標: ダイノサウルスが徐々に速くなる理由を解析し、調整可能なバージョンを作成します。
なぜリバースエンジニアリングが必要か?
- ゲーム内のルール(開始速度、加速量、最大速度)を知る必要があります。
- 既存のコードから「なぜ加速するのか」というロジックを抽出する必要があります。
REA が返却した情報:
// ダイノサウルスの速度更新ロジック if (this.currentSpeed < this.config.MAX_SPEED) { this.currentSpeed += this.config.ACCELERATION; }
- 開始速度: 6
- 加速: コリジョンが発生せず、最大速度に達するまで各フレーム
加算。0.001 - 最大速度: 13
役割分担:
- REA: HTTP ブラウザエディション (
) のスクリプトと設定を抽出。index.js - エージェント: ルールを再構築し、スライダー付きの小型ゲームを作成。
- あなた: 新しい速度ルールで遊んだり、独自のアクセルレーションを試したり。
事例 02: Windows 電卓(パーセント処理)
目標:
+ と × の両方の演算子を正しく処理する小型電卓を構築します。
なぜリバースエンジニアリングが必要か?
- 同じ「%」ボタンでも、直前の操作が
か+
かで計算ルールが異なります。× - この文脈依存性をコードから復元する必要があります。
検証:
- 200 + 10% = 220 (200 の 10% を足す)
- 200 × 10% = 20 (10% に変換して掛ける)
REA が返却したロジック:
if (operation == multiply || operation == divide) { percent = current / 100; // 乗算・除算後:現在の値を百分率に直す } else { percent = current * previous / 100;// 加算後:前の値との積を百分率に直す }
分析プロセス:
- REA:
を読み込み、コードとハンドラー(パーセント計算)を返却。calc.exe - エージェント: Microsoft のソースコードと分岐構造を確認し、ルールを実装。
- 検証: アセンブリレベルでも同様のロジックが確認できます。
アセンブリレベルでの定義例:
#define IDC_MUL 92 // 0x5c (乗算) #define IDC_DIV 91 // 0x5b (除算) #define IDC_PERCENT 118 // 0x76 (パーセント) ; パーセント値の基準となる定数 0x64 = 100
4. 次のステップと分析ガイド
REA の小型アプリへの試行は、より高度な解析へと繋がります。当社の Notes をダウンロードし、CSV エクスポートをトレースして変更箇所を確認することも可能です。
分析対象によるアプローチ方法
| 分析対象 | 目的 | ガイドリンク |
|---|---|---|
| ネイティブバイナリ | 実行ファイル内の関数、文字列、コール関係を検査。 | ネイティブ分析ガイドへ |
| JavaScript / Electron | アプリフォルダまたは ASAR アーカイブの構造(ルート、IPC など)をマップ化。 | アプリケーションワークフローへ |
| ブラウザ・ランタイム | ブラウザプロセス内のアクティビティをキャプチャし、結果を比較。 | ブラウザ観察ガイドへ |
エージェントによるクローニングや再構築の提案
エージェントに「理解したいこと」や「構築したいこと」を伝えてください。以下のタスクも可能です:
- ウェブサイトクローン:
"REA を使用して https://rea.tools/を検査し、私のためにクローンしてください。"
- ゲームの再構築 (C言語):
"実行ファイルからゲームのロジックを回復し、元の動作と比較してテストしてください。"