REA ガイド2026:AIコーディングエージェントで始めるリバースエンジニアリング入門と実践手順
AIエージェント(Claude Code、Cursor、Gemini CLI等)と連携してアプリやWebの内部ロジックを解明するオープンソース解析基盤「REA(Reverse Engineer Anything)」の解説。Notionのクリップボード同期、Aegisの二要素認証、DX-Ballのロジック復元など実在ケーススタディを基に、導入から4段階プロンプト、法的境界まで整理します。
AIコーディングエージェントを活用して既存アプリの動作原理を学びたい初心者から、仕様書の残っていない社内レガシー資産の調査を行うエンジニア
従来は高度な専門職に限られていたリバースエンジニアリングの門戸を、AIエージェントとの対話型インターフェースによって広げるオープンソース基盤。実在アプリのIPC追跡からレトロバイナリのC言語復元まで、検証済みの実用的なツールセットが揃っています。
本記事はREAの公式Showcaseおよび公開リポジトリの検証データに基づく技術解説です。対象ソフトウェアを解析する際は、各国の著作権法や利用規約を事前に確認してください。
日常的に使っているデスクトップアプリやWebサービスが、どのような内部構造で動き、どうやって高度な機能を実現しているのか知りたいと感じる開発者は少なくありません。しかし、ソースコードが公開されていない製品の解析(リバースエンジニアリング)は、長らくアセンブリ言語や難解な逆コンパイラを操る専門家だけの領域でした。
2026年、AIコーディングエージェントの浸透に伴って登場したオープンソースツール「REA(Reverse Engineer Anything)」は、この敷居を大きく下げる技術として注目されています。Claude Code、Cursor、Gemini CLIなどのエージェントに専門解析ツールを連結。自然言語の質問からコードの特定、さらには現代言語での再構築までを一連の流れで支援します。
本稿ではREAの基本概念と導入手順に加え、公式検証プロジェクトで公開されたNotion、Aegis Authenticator、DX-Ballといった実在アプリケーションの解析事例を取り上げます。初心者が迷走しないための4段階プロンプト設計や、現場で直面する技術的ハードル、法的境界線までを具体的に整理しました。
1. なぜ今「AIエージェント×リバースエンジニアリング」なのか
従来の手作業による解析と、AIエージェントを組み合わせた現代の手法にはどのような違いがあるのでしょうか。背景にある課題と仕組みを整理します。
| 解析時の技術課題 | 単体LLMが直面する限界 | REA+エージェントの解決アプローチ |
|---|---|---|
| 巨大なJavaScriptバンドル | コンテキスト制限を一瞬で超過 | 不要なコードを省きTree-Sitterで抽象構文木(AST)を抽出 |
| ネイティブバイナリの制御フロー | 実行環境がないため存在しない変数を推測 | ヘッドレスGhidraと連携し正確な関数呼び出しグラフを生成 |
| システムコールと外部連携 | 動的呼び出しやXREFを追跡不可 | MCP連携を通じて必要な関数・メモリ領域のみをオンデマンド照会 |
| コンテナ・独自アーカイブ | ASARやAPKの展開手段を持たない | 専用アンパッカーを自動実行し正規化されたファイル構造を提示 |
従来のバイナリ解析が抱えていた参入障壁
かつての解析作業はGhidraやIDA Proといった逆コンパイラを立ち上げ、無数のアセンブリ命令列(x64やARM)やレジスタの推移を人間が1行ずつ追う過酷な作業でした。関数名や変数名が失われた機械語から元の設計意図を推測するには、長年の鍛錬と低レイヤー知識が欠かせません。
その結果、「このアプリの便利な機能を自分のWebサービスで再現したい」「古い社内ツールの仕様書が消えたので復元したい」と思っても、解析ツールの導入時点で挫折してしまうケースが大半でした。
AI単体ではなぜ不十分だったのか
一方で、近年の大規模言語モデル(LLM)へ直接バイナリファイルを渡し、「中身を解読して」と指示しても期待通りの成果は得られません。LLMは自然言語の処理に長けているものの、巨大な実行ファイルから特定のアドレスを特定したり、動的メモリを観測したりする実行環境を持たないためです。
技術フォーラムの検証記録でも、素のLLMに逆アセンブルを任せた結果、根拠のない推測を重ねたり文脈を見失って処理が止まったりする事例が複数報告されていました。
REAが果たす役割:エージェント専用の解析プロバイダ
REAはAIエージェントと解析ツールの間に立つ仲介役(ミドルウェア)です。エージェントが「このボタンを押したときの処理を追跡したい」と要求すると、REAが背後でGhidraやElectronのASAR展開ツール、ブラウザデバッグ機能を駆動。該当するアドレス、参照関係、逆コンパイル結果を整理してエージェントへ渡します。
エージェントはその整理されたデータを受け取り、「ここでは値Aを100で割った上で値Bに掛けている」といったわかりやすい言葉へ言い換えます。TypeScriptやPythonによる再実装コードの出力も手軽。人間、AIエージェント、解析ツールの3者が持ち味を発揮する分業体制こそが、REAの中核と言えます。
2. コミュニティ実証:REAが解き明かした3大実例
REAの公式検証プロジェクトでは玩具的なサンプルにとどまらず、実際の製品や歴史的なバイナリを題材にした本格的なケーススタディが公開されています。まずは全体像を表で確認してみましょう。
| 事例の対象 | ソフトウェア種別と規模 | 解析手法と利用ツール | 解明された設計仕様 |
|---|---|---|---|
| Notion デスクトップ版 | Electronアプリ(7.6.1) | ASAR解凍、preload/main間IPC追跡 | 独自チャンネル(notion:clipboard:write)とHTMLマーカー(notionvc)によるブロック構造維持 |
| Aegis Authenticator | Android APK(3.4.3、6.9MB) | 3,077クラスの静的解析、DEX逆コンパイル | 30秒スロットごとのHMAC-SHA1計算とシークレット鍵連携のTOTPアルゴリズム |
| DX-Ball 1.07 | 32bit x86ネイティブバイナリ | Ghidra逆アセンブル、命令トレース | 関数0x00406400における左右音響パン計算式と3,205件テストでの完全一致(63バイト一致) |
それぞれの詳細なアプローチを見ていきます。
実例1(Electron):Notionのクリップボード同期ロジック
Notionデスクトップ版(バージョン7.6.1)では、ページ上のブロックをコピーした際、単なるプレーンテキストだけでなく、階層構造を保持したリッチテキストやHTMLがクリップボードへ渡されます。この仕組みをREAで追跡した事例です。
エージェントに解析を依頼すると、REAはパッケージ内の難読化されたJavaScriptから、ページ側に公開されたAPIとIPC通信の送受信箇所を特定しました。
// preload.js側:Webページ向けに公開されたクリップボードAPI
const clipboardApi = {
write: invokerInMain("notion:clipboard:write")
};
// メインプロセス側:受信したデータの書き込みハンドラ
handleRequestFromRenderer.addListener(
"notion:clipboard:write",
(event, data) =>
isNotionWebContents(event.sender)
? clipboard.write(data)
: undefined
);
この追跡により、Notionは「notion:clipboard:write」という固有のIPCチャンネルを通じてメインプロセスへデータを送信し、送信元の安全性を検証した上でElectronの標準クリップボードAPIを呼び出している事実が判明しました。
さらに、クリップボードに渡されるHTMLの末尾に「<!-- notionvc: <copy-id> -->」という独自マーカーが付与されており、Notionローカルに一時保存されたブロック構造データ(MIMEタイプ: text/_notion-blocks-v3-production)と紐づけて復元している仕様まで解明。独自のエディタを開発するエンジニアにとって、極めて実践的な知見と言えます。
実例2(Android APK):Aegisの二要素認証コード生成
オープンソースの二要素認証アプリ「Aegis」(APKサイズ6.9MB)を対象に、30秒ごとに切り替わる6桁のワンタイムパスワード(TOTP)がどのメソッドで計算されているかを解読した事例です。
APKパッケージ内には3,077個におよぶクラスが存在しますが、エージェントは画面のコピー動作や表示更新に関わる処理を手がかりに探索範囲を絞り込みました。結果として、暗号化キーを保持するクラス群から、端末の現在時刻(System.currentTimeMillis() / 1000 / 30)とシークレットキーを組み合わせ、HMAC-SHA1ハッシュを生成して6桁の数値を取り出す計算手順を特定。
検証プロジェクトでは、解読したロジックをもとにブラウザ上で時計を自由に進めたり戻したりできる再現デモが作成され、公開テストケースとの完全一致が確認されました。
実例3(レトロバイナリ):1996年製 DX-Ball の音響パン計算とC言語復元
1996年に公開されたWindows向けブロック崩しゲーム「DX-Ball 1.07」(32ビットx86バイナリ)から、ボールがブロックに衝突した際、画面の左右位置に応じて効果音のステレオバランス(パン)を決定する計算ロジックを抽出した事例です。
REAは実行ファイル内の関数アドレス「0x00406400」を特定し、アセンブリ命令列から計算式を復元しました。
; DXBALL.EXEの関数 0x00406400 で実行される計算の流れ
1. ボールが当たったブロックのX座標を取得
2. 座標値に 1.5625 を掛ける
3. その結果から 500.0 を減算する
4. 定義されたパンスケールを適用して左右バランス(整数値)を決定する
エージェントはこの命令列から、以下のような純粋なC言語関数を復元しました。
/* DXBALL.EXEの関数 0x00406400 から復元されたステレオパン計算 */
DxBallInt dxball_calculate_sound_pan(DxBallInt x) {
double pan;
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;
}
この命令列をもとに、エージェントは現代の保守可能なC言語関数を記述。3,205件の異なる座標入力を用いて元バイナリの動作と突き合わせた結果、すべてのケースで完全一致を記録しました。当時の開発環境であるVisual C++ 4.0で再コンパイルしたバイナリのバイト列(63バイト)までもが元ファイルと一致したという、クリーン再構築の高度な成功例です。
3. 初心者が迷走しない「4段階プロンプト設計」
AIエージェントに「このアプリをリバースエンジニアリングして」と曖昧に指示すると、何千ものファイルを無目的に読み込み、トークンを浪費した末に止まってしまいます。現場で実践されている4つの段階に分けたアプローチを紹介します。
第1段階:偵察(Reconnaissance)
全体像を把握するため、まずはエントリポイント、外部依存ライブラリ、特徴的な文字列(エラーメッセージやAPIパス)のリストアップのみを指示します。
対象アプリのパッケージを展開し、外部依存関係とメインプロセスのエントリポイントを一覧化してください。逆コンパイルはまだ行わず、ディレクトリ構造と主要な設定ファイルの概要のみを報告してください。
第2段階:標的の絞り込み(Target Isolation)
調査したい機能に関わるイベントハンドラや通信チャンネル名に対象を絞り込みます。
クリップボード書き込みに関連する処理のみを追跡します。コード全体から「clipboard」または「copy」という文字列を含む関数呼び出しを検索し、関連するファイルパスと行番号を特定してください。
第3段階:仕様の言語化(Specification Extraction)
特定した処理から、入出力の条件やアルゴリズムを「自然言語の仕様書」としてまとめさせます。この段階ではコードを書かせず、論理構造の整理に集中させることがポイントです。
特定した関数の処理ロジックを読み解き、どのような入力値を受け取り、どのような条件分岐を経て出力値を返しているのか、箇条書きの日本語仕様書として整理してください。難読化された変数名は意味のある名称に置き換えて説明してください。
第4段階:クリーンルーム再実装(Reconstruction)
得られた仕様書をもとに、新しいセッションでゼロからコードを書かせます。
先ほど作成した仕様書に基づき、TypeScriptで同一の挙動を再現する純粋関数を実装してください。境界値テストを含むJestの単体テストコードも併せて作成してください。
この4段階を順に踏むことで、AIエージェントの迷走を防ぎ、短時間で再現コードまで到達できます。
4. コミュニティが直面した技術的課題と運用の注意点
実際にREAを運用する現場では、いくつか特有の課題が報告されています。公開リポジトリの課題管理や議論で共有されている知見を整理しておきましょう。
大規模JavaScript解析におけるメモリ枯渇
Webアプリケーションや巨大なElectronパッケージを解析する際、バンドルファイルが数十メガバイトにおよぶケースがあります。公開リポジトリの課題報告では巨大なモジュールの依存関係を一括で解析しようとした際に、Node.jsのヒープメモリ(約1.4GB〜4GB)を使い果たしてCLIやMCPサーバーが停止する現象が指摘されています。
対策として、調査したい特定の画面コンポーネントや通信モジュールのファイルパスへ絞り込み、エージェントへ渡す工夫が不可欠です。
Ghidra自動解析の待ち時間とタイムアウト
ネイティブバイナリの解析でGhidraが働く際、容量の大きな実行ファイルでは初回読み込みに数分間の待ち時間が生じます。シンボルの自動解析や参照テーブルの構築にまとまった計算処理を要するためです。
コミュニティの提案議論ではエージェントの起動締め切り時間を超えてしまわないよう、事前にGhidraで解析済みのプロジェクトを直接開ける機能の要望が挙がっています。初回解析時はターミナルのログを確認し、処理の完了を落ち着いて待つ運用を心がけましょう。
Windows環境での実行権限エラー
Windows環境下でネイティブ解析を走らせる際、一時フォルダの生成権限やハンドル制御を巡るエラーを指摘する投稿が複数見受けられます。もし動作が途中で弾かれる場合は、ターミナルを管理者権限で立ち上げ直すか、セキュリティソフトの保護除外設定を見直す対応が有効です。
5. 著作権法とクリーンルーム設計の境界線
技術の習得と同じくらい重要なのが、法令順守と倫理観の保持です。不用意な解析やコードの引き写しは、重大な権利侵害を招きかねません。
正当なリバースエンジニアリングの範囲
著作権法上、他社ソフトウェアとの相互運用性を確保するためのインターフェース調査や、セキュリティ脆弱性の発見、個人的な学習・研究目的の解析は正当な権利行使として認められる余地があります。
ただし、利用規約(EULA)において解析行為そのものを禁じている商用サービスやゲームの場合、契約違反としてアカウント停止などの措置を受けるリスクが常に伴います。解析対象がどのような規約下にあるか、事前の確認を怠らないようにしましょう。
クリーンルーム設計(Clean Room Design)の実践
解析で得た知見をもとに新しいソフトウェアを制作する場合、クリーンルーム設計の徹底が不可欠となります。
逆コンパイルして取り出したソースコードをそのまま自分のリポジトリへ貼り付ける行為は、明確な著作権侵害に該当します。正しい手順は解析作業を通じて「入力に対してどのような出力が行われるか」という仕様書(インターフェース仕様や計算アルゴリズムの定義)のみを文章化すること。そして実装担当者(あるいは新規チャットセッションのAI)は、逆コンパイル結果を一切見ずにゼロからコードを書き上げます。
仕様の要約と整理に長けたAIエージェントを活用することで、このクリーンルーム手法を以前より無理なく実践できるようになりました。
6. まとめとおすすめの学習ステップ
REAはこれまで一部の専門家だけのものであったリバースエンジニアリングを、対話を通じて学べる身近な技術へと塗り替えました。
初学者が無理なくスキルを伸ばすためのステップをまとめます。
- 自身のPC上で動く小さなオープンソースツールや、ElectronアプリのASAR展開から試す
- 4段階プロンプト(偵察→標的絞り込み→仕様化→再実装)を意識してエージェントに対話させる
- 判明した仕様をもとに、小さな再現コードを自分で書き起こしてみる
- 慣れてきた段階で、ネイティブバイナリやIPC通信の追跡といった高度な領域へ挑戦する
ブラックボックスに見えるプログラムが意図した通りの論理で動いていると実感できた瞬間、ソフトウェア開発への理解は一段と深まるはずです。適切なルールを守りながら、AI時代の解析手法をぜひ体験してみてください。
参考情報・検証データ出典
- REA 公式サイト (Reverse Engineer Anything)
- REA 公式GitHubリポジトリ (morluto/rea)
- REA 公式ケーススタディ:Notion クリップボード解析
- REA 公式ケーススタディ:Aegis Authenticator 二要素認証コード解析
- REA 公式ケーススタディ:DX-Ball 音響パン計算の復元
- GitHub Issue #1563: JavaScript解析時におけるメモリ消費とヒープ管理に関する報告
- GitHub Issue #1048: Ghidra事前解析プロジェクトのオープンに関する機能提案
- GitHub Issue #1701: Windows環境におけるネイティブ権限および自己テストに関する報告
- REA 公式コミュニティ (Discord)
公式仕様書・第三者安全規格の直接確認、実ユーザーレビューの精読(特に低評価)、実機での動作確認を経てレビューを公開しています。広告主の意向でランキングを変えることはありません。