REA:自律エージェントであらゆるものをリバースする、アプリの挙動からネイティブバイナリまで
REA はオープンソースの MCP サーバー(MIT)で、npx rea-agents setup により Claude Code、Codex、Cursor などに導入できる。Hopper、Ghidra、IDA でネイティブバイナリを解析し、Electron、.NET、APK、ファームウェアにも対応する。解析はローカルで動き、結論には証拠と限界が付く。DX-Ball、Notion、TH04 の三事例を紹介している。
優れた機能を見つけても、それがどう作られているのか分からない。開発者なら誰もが味わったことのある悔しさである。ソースコードは非公開で、バイナリはシンボルが削除され、Electron アプリは ASAR アーカイブにまとめられている。従来であれば熟練のリバースエンジニアが、逆アセンブラの中で数日から数週間かけて一行ずつ読み解くしかなかった。GitHub で公開されているオープンソースの REA(Reverse Engineer Anything)は、この流れを変えようとしている。位置づけは明快で、ネイティブバイナリ、アプリケーション、実行時の振る舞いにまたがるリバースエンジニアリングを、一つの MCP サーバーとしてエージェントに提供する。ライセンスは MIT、配布は npm パッケージ rea-agents で、README によれば GitHub のスター数は六万に達し、十九の言語でドキュメントが用意されている。セキュリティ研究とソフトウェア開発の境界にあるツールとしては、需要の確かさを物語る数字である。
使い方は難しくない。npx rea-agents setup を実行し、利用するエージェントを選び、提示された変更内容を確認して承認する。セットアップは REA の MCP サーバーを登録し、対応するワークフロー指示を導入する。既存の設定はバックアップされる。公式に挙げられている対象は Claude Code、Codex、Cursor、Gemini CLI、Grok Build などで、ローカルの MCP サーバーに対応するエージェントであれば原理的には接続できる。あとは自然言語で依頼するだけだ。あるアプリの検索機能がどう動くのかを調べ、根拠を示し、自分のプロジェクトに似た機能を作ってほしい、といった具合である。エージェントは MCP 経由で REA を呼び出し、対象を検査してコードを追跡する。REA が返すのは、コード、参照関係、まだ分かっていない点を含む、根拠付きの調査結果だ。エージェントはそれを基に追加の質問をし、説明し、あるいは実装を書いてテストする。同じ処理はターミナルのコマンドからも実行できる。
このプロジェクトの重みは、対応する対象の広さにある。README の表によれば、REA はネイティブバイナリから擬似コード、アセンブリ、文字列、シンボル、呼び出し参照を返し、その裏では Hopper、Ghidra、IDA のいずれかを使う。JavaScript と Electron アプリではモジュール、インポート、ソースマップ、ルート、IPC、ネイティブアドオンとの関係を復元し、この部分は Node.js だけで動いてネイティブ解析エンジンを必要としない。さらにウェブサイト、HAR 形式のネットワークキャプチャ、.NET アセンブリのメタデータと CIL 命令、Android の APK と実機、ファームウェア、EVM バイトコード、オフラインの ELF レイアウト、Linux のクラッシュ記録まで扱える。プロセスの挙動を記録して、実行ごとの端末出力やファイルシステムの変化を比較する機能もある。つまり一つのエージェントが、Electron アプリのレンダラーからメインプロセスへ、そしてネイティブアドオンのアセンブリへと、同じ会話の中で降りていける。以前は互いに連携しない五つも六つものツールを行き来していた作業が、一つのツールカタログに集約された形だ。
三つの事例が、この能力の輪郭をよく示している。一つ目は DX-Ball で、効果音の呼び出しから位置を定位に変換する補助関数までたどり、命令を検査し、不完全な擬似コードを C に書き直す。README によれば、再構築したコードは元の x86 の 3,205 件のテストケースを通過し、コンパイル後の 63 バイトの関数すべてを再現した。二つ目は Notion で、レンダラーのクリップボード API を見つけ、preload と IPC を通ってメインプロセスに至り、リッチなクリップボード形式を調べる。三つ目は東方の TH04 で、PC-98 版オリジナルの 16 ビット命令を調べ、固定弾と自機狙い弾の角度計算を復元し、当時のコンパイラの出力と照合する。難易度はそれぞれ違うが、共通点は明らかだ。結論はエージェントの印象ではなく、命令レベルで再検証できる証拠に支えられ、テストで確かめられる。REA が繰り返し強調するのは、すべての結論に証拠と限界を添えるという原則である。
業界の視点で見ると、REA は注目すべき流れを体現している。専門ツールの能力をエージェントが呼べるプロトコルの形で包み、計画と説明は大規模言語モデルに任せ、証拠の収集は決定的な解析エンジンに任せるという分業だ。README はローカル実行についても明確で、解析は手元のマシンで行われ、エージェントが受け取るのはツールの結果だけであり、その先でモデル提供元がどう扱うかは各社のデータポリシーによる。この分担により、モデルがバイナリの挙動を推測で語る危険が減り、セキュリティチームも工程を監査しやすくなる。もちろん冷静さも必要だ。実行時のキャプチャは、利用者の権限で対象を実行または操作するため、事前に各ガイドを読むべきである。プロジェクトは合法的なリバースエンジニアリング研究のためのものだと明記し、必要な許可の取得と法令の遵守は利用者の責任とし、暗号資産やトークンを発行していないことも断っている。まずは自分が権利を持つソフトウェアで一度試し、証拠の連鎖が検証に耐えるかを確かめてから、日常のワークフローに組み込むかどうかを判断するとよい。
Sources
FAQ
REA とは何で、自分のエージェントにどう接続しますか?
REA は、ネイティブバイナリ、JavaScript と Electron アプリ、ウェブサイト、.NET、APK、ファームウェアなどを調べるリバース解析ツールをエージェントに提供するオープンソースの MCP サーバーです。npx rea-agents setup を実行し、エージェントを選んで変更を確認し承認し、再起動します。MCP サーバーの登録、対応するワークフロー指示の導入、既存設定のバックアップが行われます。
REA の利用に Hopper、Ghidra、IDA は必須ですか?
常に必須ではありません。ネイティブバイナリの深い解析には三つのうちどれかが必要です。Hopper は承認後にセットアップで導入でき、Ghidra と IDA は既存の環境を使います。JavaScript と .NET の静的解析にはネイティブ解析エンジンは不要で、対応バージョンの Node.js と npm があれば動きます。
アプリはアップロードされますか?注意点は何ですか?
README によると、REA は対象をローカルで解析します。エージェントはツールの結果を受け取り、その扱いはモデル提供元のデータポリシーに従います。実行時のキャプチャは利用者の権限で対象を実行または操作するため、事前に該当ガイドを読んでください。合法的な研究のためのツールであり、許可の取得と法令遵守は利用者の責任です。