Litmus — 話題のニュースを、深く読み解く。 RSS
ソフトウェア

AIエージェント用の解析ツール「REA」、東方幻想郷の弾幕計算を復元

ソース非公開のアプリや古いゲームの仕組みを、AIエージェントがMCP経由で調べられる無料ツール「REA」。1998年の同人シューティング「東方幻想郷」の弾の角度計算を、実行ファイルから2,139バイト一致で復元した。

暗い画面に表示されたカラフルなプログラムのソースコード(イメージ写真)

イメージ写真 記事の内容を撮影したものではありません。Photo by Myburgh Roux on Pexels

この記事には Amazon アソシエイトのリンクを含みます。

「このゲームの弾が、なぜこの軌道で飛んでくるのか」。気に入ったアプリや古いゲームにそんな疑問を持っても、ソースコードが公開されていなければ確かめようがない。実行ファイルを開いても、意味の分からない記号の羅列が並ぶだけだ。

AIエージェントに「REA」というツールを持たせると、この壁を越えられる。ソースコードの無いアプリや古いゲームでも、実行ファイルを渡すだけでAIエージェントが仕組みを調べ、証拠付きで説明し、動くコードまで作ってくれる(REA公式サイト)。2026年10月、GitHub Trendingで急上昇し、はてなブックマークのテクノロジー人気エントリーにも入った(テクノエッジ)。本当にそこまで正確なのか、どんな検証を経ているのか、公式サイトが公開しているケーススタディで確かめた。

REAとはどんな道具か

REAは、AIエージェントに実行ファイルやアプリを調べさせるための道具だ。対応するAIエージェントはClaude Code、Codex、Cursor、Gemini CLI、Grok Buildなど複数ある。いずれもnpx rea-agents setupの1行で組み込める(REA公式GitHubリポジトリ)。使い方は、エージェントに「このアプリの検索機能がどう動くか調べて、証拠を見せて、自分のプロジェクト用に似た機能を作って」のように頼むだけだ(REA公式GitHubリポジトリ)。

エージェントはMCP(Model Context Protocol、AIエージェントが外部のツールを呼び出すための共通規格)を通じてREAを呼び出す。解析はすべて手元の環境で実行され、調べたアプリやファイルが外部へアップロードされることはない(REA公式GitHubリポジトリ)。

解析できる対象の幅

REAが調べられる対象は、実行ファイルだけにとどまらない。

対象分かること必要なもの
ネイティブバイナリ疑似コード・アセンブリ・文字列・呼び出し関係Hopper・Ghidra・IDAのいずれか
JavaScript/Electronアプリモジュール・ルート・IPCの関係Node.jsのみ
.NETアセンブリメタデータ・CIL命令追加ツール不要(静的解析のみ)
Android APKマニフェスト・逆コンパイルしたメソッドJADXとJDK
ファームウェア切り出した領域と中身Binwalk/Unblob

(出典: REA公式GitHubリポジトリ README「What you can analyze」)

公式サイトでは、Chromeのオフライン恐竜ゲームが加速するルールを調べた例や、Windows電卓の%ボタンの計算を再現した例も紹介されている(REA公式サイト)。だが「それらしい説明」と「正確な再現」は別の話だ。次に気になるのは、その精度をどう確かめているかだ。

本当に正確に再現できるのか

同人シューティングゲーム「東方幻想郷」は、1998年にコミックマーケット54で頒布された、PC-9800シリーズのMS-DOS専用ソフトだ(ウィキペディア「東方幻想郷」)。このゲームの代名詞である弾幕のうち、敵が放つリング状の弾は自機の方向へ向きを変えて広がる。REAを使ったAIエージェントは、このリングの角度計算を、ソースコードの無い実行ファイルMAIN.EXEから復元した(REA公式サイト「東方幻想郷」のケーススタディ)。

復元された計算はこうだ。DOSの角度は1周を256段階で表す。弾が16発のリングなら、1発ごとに16段階(22.5度)ずつずらす。そこに自機のいる方向の角度と、パターンごとの回転量を加え、最後に1バイトへ収める(REA公式サイト「東方幻想郷」のケーススタディ)。

ここまでなら、もっともらしい説明で終わってもおかしくない。ケーススタディが示す検証はもう一段深い。弾の生成コードを含む区間で、復元したコードをコンパイルし直した結果が、元の実行ファイルと2,139バイト一致した。しかも、独立した2回のビルドで同じ一致バイトが得られている(REA公式サイト「東方幻想郷」のケーススタディ)。

自分はこの数字を見て、最初は「東方」という知名度につられた紹介記事にありがちな誇張だろうと身構えた。だが実際の検証は、角度計算を1命令ずつ追い、同じ入力から同じバイト列が再現されるかを2回確かめるところまでやっていた。

この一致は、似たロジックを書けたという話ではない。同じ入力を与えれば、当時のコンパイラ(Turbo C++ 4.0J)が生成したのと同一の機械語が出てくる、という意味になる(REA公式サイト「東方幻想郷」のケーススタディ)。

DX-Ballのサウンド計算

同じ厚さの検証は、1996年のWindowsゲーム「DX-Ball」でも確認できる。ブロックに当たった音の左右の定位を計算する関数を復元し、タイルの座標から「1.5625倍して500引く」という式を導いた。元の関数とCで書き直した関数を、座標0〜640・音量倍率5種類の組み合わせ3,205件で動作比較した。さらにコンパイルし直した結果を、関数全体で63バイト一致させている(REA公式サイト「DX-Ball」のケーススタディ)。1本のゲームだけでなく、複数の対象で同じ形の検証が公開されている。

自分で試すには何が必要か

ここまでの例を手元で再現するには、何が要るのか。

REAを動かすにはNode.js(22.19以上・24.11以上・26以上のいずれか)とnpmが要る。セットアップはnpx rea-agents setupの1行で、対応するAIエージェントに自動で登録される(REA公式GitHubリポジトリ)。ここまでは無料で、追加のツールもいらない。

無料で済むのは、JavaScript・Electron・.NETアセンブリの静的な解析までだ。東方幻想郷やDX-Ballのように、ネイティブバイナリを疑似コードやアセンブリのレベルまで解析するには、Hopper・Ghidra・IDAのいずれかが別途要る。このうちGhidraは無料だが、HopperとIDAは商用ツールで、REA自身はライセンスやキーを提供しない(REA公式GitHubリポジトリ「License」)。

試す前にもう一つ知っておきたいのが、開発の速さだ。調べた時点の最新版は6.4.0(2026年10月11日公開)だ。5日前の4.1.0から6回前後バージョンが上がり、設定やコマンドの形式が変わる「互換性のない変更」も複数含まれていた(REA公式GitHubリポジトリ Releases)。導入するときは、最新版へ更新してから使うほうがいい。

どこまでが許される使い方か

REAは何でも調べてよい道具ではない。公式のDisclaimerは、合法的な研究・教育・ソフトウェアの相互運用性の確保・保存のために提供すると明記している。対象には、自分が所有しているか調査を許可されているソフトウェアの解析も含まれる(REA公式GitHubリポジトリ「Disclaimer」)。

  • クラックされたコピーや盗まれたライセンスキーの利用は想定していない
  • 商用の解析ツール(Hopper・IDA・JEBなど)は、利用者自身が正規に入手し、ライセンスを持っている必要がある
  • ライセンス条件の回避を目的にした利用は対象外

REAが返すのは、あくまで「どこにそのコードがあり、何をしているか」という証拠付きの調査結果だ。元のソースコードそのものを復元したり、アプリを自動で丸ごと複製したりするものではない(REA公式GitHubリポジトリ)。

まとめ

REAは、AIエージェントにMCP経由でリバースエンジニアリングをさせる、無料のオープンソースツールだ。解析はネイティブバイナリからJavaScript、Android APK、ファームウェアまで幅広い。東方幻想郷の弾幕計算は2,139バイト、DX-Ballのサウンド計算は63バイトという単位で、元のコンパイル結果と一致するところまで再現している。

無料で試せるのはJavaScriptや.NETの静的解析までで、ネイティブバイナリの深い解析にはHopper・Ghidra・IDAのいずれかが別途必要になる。使える範囲は、自分が所有しているか調査を許可されているソフトウェアに限られる。気になるアプリの「なぜ」を、証拠付きで確かめる手段が、またひとつ増えたことになる。

この記事の先を読む本を探す

特定の本を勧めるものではありません。検索結果から、いまの版と目次を確かめて選んでください。

コメント

気づきや感想をどうぞ

記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。

コメントを読み込んでいます…

    ほかの記事

    最新の記事 →