概要
Reverse engineering (リバースエンジニアリング)とは、ソフトウェアの動作を解析し、その仕組みを理解する手法。 REA は、エージェントがプログラムを調査・説明できるツールを提供。 Windows CalculatorやChromeの恐竜ゲームなど、具体的な例で解析方法を解説。 +や×演算子 における%ボタンの動作ルールの再現方法を紹介。 NativeバイナリやJavaScriptアプリ など、さまざまな対象の解析手順も案内。
リバースエンジニアリングとは
- ソフトウェアの挙動解析 を通じて、機能やロジックの理解・再構築を目指す手法
- 機能の説明・改変・再実装 を目的とした調査活動
- 例:Windows Calculatorの「200 + 10% = 220」の理由調査
- %ボタンは、直前の数値(この場合200)の10%(=20)を加算
- 200 + 20 = 220という計算ロジック
REAによる解析支援
- REA をインストールし、エージェントへセットアップする手順の提供
- コマンド例:
npx rea-agents@latest setup - セットアッププランの確認・承認後、エージェントを再起動
- コマンド例:
- プログラムの命令列・デコンパイルコード の取得
- 分岐や計算処理の解説、再現方法の提示
解析事例1:Chromeの恐竜ゲーム
- ゲーム速度が上がる理由の調査
- ゲームの加速ルール(開始速度・増加量・最大速度)の特定
- 速度ルール:開始6、最大13、毎フレーム0.001加算(障害物回避時のみ)
- REAで実際のスクリプト・設定値を抽出
- 例:
if (this.currentSpeed < this.config.MAX_SPEED) { this.currentSpeed += this.config.ACCELERATION; }
- 例:
- ミニゲームとして再構築
- 調査したルールを使い、速度調整可能なサンプルを作成
解析事例2:Windows Calculatorの%ボタン
- %ボタンの動作ルールの復元
- +の場合:前の数値の%を加算(例:200 + 10% → 200 + 20 = 220)
- ×の場合:%を小数に変換して掛け算(例:200 × 10% → 200 × 0.1 = 20)
- アセンブリコードから分岐の特定
- +/×で異なる計算式の実装を確認
- 例:
if (operation == multiply || operation == divide) { percent = current / 100; } else { percent = current * previous / 100; }
- Microsoftのソースやテストケースと照合
REAの活用方法・対象
- Nativeバイナリ解析
- 実行ファイルやライブラリの関数・文字列・参照関係の調査
- JavaScript & Electronアプリ
- モジュール、ルート、IPC、ネイティブ依存関係のマッピング
- ブラウザ・ランタイムアクティビティ
- 選択したプロセスやブラウザの動作記録・比較
- ガイド付き例題やケーススタディ
- NotesアプリのCSVエクスポート追跡、DX-Ballのゲームロジック復元など
REAでできること
- 任意のウェブサイトやゲームのクローン作成
- 例:
https://rea.tools/の構造・動作の再現
- 例:
- 実行ファイルからのロジック抽出・C言語への再構築
- オリジナルと比較しながら検証
まとめ
- REA は、リバースエンジニアリングの自動化・効率化を図る強力なツール
- プログラムの挙動解明・再現 が容易となり、学習や開発の幅が拡大
- 多様なプラットフォーム・アプリケーション に対応可能