メニュー

AI

REAとは:GitHubスター30万超の中身と、「2週間」の実際

公開
茹で時間
10 分
言語
日本語 · English

この記事で分かること

  • REAはClaude CodeやCodexなどのAIエージェントに、バイナリやアプリを調べる道具をMCPで渡すOSS。ネイティブのバイナリの逆コンパイルは、Hopper、Ghidra、IDAのどれかに任せる
  • リポジトリの作成は2026年4月で、npmの初版は7月。「2週間」はスターが急に増えた期間で、10月2日に41件だったスターは、10月21日に34万7802件になった
  • JavaScriptとElectronのアプリは追加の道具なしで静的に解析できる。検証用の小さなアプリでは、preloadで公開した関数、IPCのチャンネル、メインプロセスの処理を見つけ、送る側と受ける側を対にして返した
目次(5項目)
  1. REAがすること
  2. 逆コンパイルはGhidraなどに任せる
  3. スター30万の中身
  4. Electronのアプリを静的に解析した結果
  5. 使う前に確かめたいこと

AIでリバースエンジニアリングをする「REA」が、ASCII.jpで「わずか2週間でGitHubスター30万超」と紹介されました。スター数が30万を超えたのは事実ですが、「2週間」はツールの公開からの日数ではありません。数字の中身を確かめ、REAが何を自分でやり、何をほかの道具に任せているのかを、手元で動かした結果と合わせて見ていきます。

REAがすること

REAはReverse Engineer Anythingの略で、morluto氏がGitHubで公開しているMITライセンスのOSSです。READMEは「バイナリ、アプリケーション、実行時の振る舞いにまたがって、リバースエンジニアリングを行う1つのMCP」と説明しています。MCP(Model Context Protocol)のサーバーとして動き、AIエージェントに解析の道具を渡します。対応するエージェントは、Claude Code、Codex、Cursor、Gemini CLIなどです。

GitHubのリポジトリ「morluto/rea」の紹介画像。REAのロゴと「One CLI + MCP server for agents」の説明、逆アセンブルと逆コンパイルの画面の例、エージェントの作業の流れの図
出典:morluto/rea(GitHub)

使い方はエージェントに質問を投げる形です。READMEの例は「メモアプリの検索がどう動くかを調べ、根拠を示し、自分のプロジェクトに似た機能を作って」というものでした。エージェントはREAの道具を呼んで対象を調べ、返ってきた結果を根拠にして、説明や再実装を進めます。同じ処理はターミナルからreaコマンドとしても実行できます。

公式サイトはWindowsの電卓で「200 + 10%」が220になる理由を、電卓のDLLの命令から追った例を載せています。READMEの事例の1つは、Notionがクリップボードに書き込む処理を、ElectronのpreloadとIPCからたどった例です。DX-Ballというゲームで音を左右に振る計算をC言語で再構成し、元のx86の3,205件のケースと一致させた例も載っています。

逆コンパイルはGhidraなどに任せる

REAの中身は既存の解析ツールを束ねて、エージェントが扱える形で結果を返す層です。READMEの対応表を見ると、対象によって必要なものが分かれます。

対象REAが返すもの必要なもの
ネイティブのバイナリ疑似コード、アセンブリ、文字列、シンボル、呼び出しと参照Hopper、Ghidra、IDAのどれか
JavaScript / Electronモジュール、import、ソースマップ、ルート、IPC、ネイティブアドオンとの関係Node.jsとnpm(Linuxではprocps互換のps)
.NETのアセンブリメタデータ、CILの命令、宣言されたネイティブの依存なし(静的な解析のみ)
Androidのアプリマニフェスト、クラス、逆コンパイルしたメソッドJADXとJDK
Webサイトページの構造、スクリプト、通信の観察、スクリーンショットChrome系のブラウザ

このほか、ファームウェア、WebAssembly、SQLiteのデータベース、パケットのキャプチャなど、READMEの表には30を超える種類が並んでいます。

ネイティブのバイナリを深く読むには、HopperかGhidraかIDAが要ります。READMEのFAQは「深いネイティブ解析はどれか1つを使う。JavaScriptと.NETの静的な解析は、解析エンジンなしで動く」と答えています。IDAやHopperは商用のソフトで、READMEは正規に入手したライセンスで使うよう求め、REAがライセンスやキーを与えることはないと書いています。

AgentConnの記事は、REAを「薄いオーケストレーションの層」と呼び、新しい逆コンパイラも新しい静的解析も含まないと指摘しました。Decryptも当時のREADMEが「元のソースコードを復元したり、アプリを自動で複製したりするとは主張しない」と書いていたことを紹介しています。一方でAgentConnは、どの結果にも、出した道具、確度、限界を付けて返す作りを、REAの設計の要としています。エージェントの推測と、解析ツールが実際に出した結果を分けて読めるようにする仕組みです。

解析は手元のマシンで行われます。ただしREADMEのFAQは、ツールの結果はエージェントに渡り、そのモデルの提供元にはそれぞれのデータの扱いがあると書いています。社外に出せないアプリを調べるときは、使っているエージェントの規約も見ておく必要がありそうです。

スター30万の中身

ASCII.jpによると、REAのスターは10月2日に41件で、17日に30万件を超え、21日には34万7802件に達しました。ほかの報道の数字を日付順に並べると、次のとおりです。

日付スター数出典
10月2日41件ASCII.jp
10月6日1万件未満Decrypt
10月11日この1日で3万件以上の増加Decrypt
10月12日10万件超Decrypt
10月14日23万4477件(フォーク5万8512件)Startup Fortune(OSSInsightの集計)
10月17日30万件を突破ASCII.jp
10月21日34万7802件ASCII.jp

GitHubのAPIでリポジトリの情報を取ると、10月25日の時点でスターは37万6923件、フォークは9万4200件でした。作成日時は2026年4月14日です。npmのパッケージ「rea-agents」も、初版の公開は7月12日でした。Decryptは作成された4月からほとんど注目されていなかったと書いています。「2週間」は公開からの日数ではなく、10月の初めにスターが急に増え始めてからの期間です。

増え方の速さには慎重な見方もあります。Startup Fortuneは、10月12日から14日の36時間でおよそ9万件増えたとし、開発者向けの道具としては普通の伸び方ではないと書きました。AgentConnは、ツールを入れない人が通りがかりに付けるスターの典型だとして、数字そのものを鵜呑みにしないよう促しています。スターは使っている人の数ではなく、関心の大きさを示す数として読むのがよさそうです。

開発の速さは版の数にも出ています。Decryptによると、10月3日から11日のあいだに8回のリリースがありました。npmの記録では10月3日の3.2.1から10月18日の6.7.0まで、半月で大きな版が3つ上がっています。READMEも「REAは速く変わる」として、こまめな更新を勧めています。

Electronのアプリを静的に解析した結果

JavaScriptとElectronの解析は追加の道具なしで動くので、最小の例で確かめました。検証した環境はLinux、Node.js 22.22.0、rea-agents 6.7.0(2026年10月25日)です。READMEは22系ならNode.js 22.23.4以上を求めていますが、npmのパッケージのenginesは^22.19.0で、この版では静的な解析が最後まで動きました。

対象はメモをクリップボードにコピーするだけの小さなElectronアプリで、検証のために用意したものです。preloadでnotes.copyという関数を画面に公開し、それがcopy-noteというIPCのチャンネルを呼び、メインプロセスの処理がclipboard.writeTextを実行する構成です。

1行目がpreload.js、2行目がmain.jsの該当箇所です。

contextBridge.exposeInMainWorld('notes', { copy: (t) => ipcRenderer.invoke('copy-note', t) });
ipcMain.handle('copy-note', (_e, text) => { clipboard.writeText(text); return true; });

コマンドはREADMEの例と同じで、アプリのフォルダーを渡します。

rea analyze-javascript-application /path/to/sample-app --json

結果のJSONは約28万バイトありました。要約の部分は次のとおりです。

{
  "browser_windows": 1,
  "preload_entrypoints": 1,
  "context_bridge_apis": 1,
  "exposed_api_members": 1,
  "sender_validation_observations": 0,
  "ipc": { "literal_channels": 1, "main_handlers": 1, "paired_renderer_transmissions": 1 }
}

画面に公開した関数、IPCのチャンネル、メインプロセスの処理を、それぞれ1つずつ見つけ、送る側と受ける側を対にできています。グラフの部分にはnotes.copyからipcRenderer.invokeまで、ipcMain.handleからclipboard.writeTextまでの経路が、行と列の位置つきで入っていました。sender_validation_observationsが0なのは、受ける側の処理が送信元を確かめていないことに対応するとみられます。Electronのアプリで、画面から呼べるメインプロセスの処理を洗い出すような用途なら、この粒度で十分に役立ちそうです。

結果には限界の一覧も付いていました。「JavaScriptとHTMLは動かさないテキストとして解析した」「見つからないことは、存在しないことを示さない」「動的な式や難読化された式では、経路が解決されないことがある」といった内容です。静的な解析なので、実行時に何が起きるかまでは保証しません。

使う前に確かめたいこと

入手先を公式の3か所に限ります。 話題になった直後から、名前の似たリポジトリが現れました。READMEはGitHubのmorluto/rea、rea.tools、npmのrea-agentsから入手するよう注意を載せ、似た名前のリポジトリやREADMEの写しは公式の証明にならないとしています。

先に決めたいのは、調べてよい対象かどうかです。 DISCLAIMERは、用途をセキュリティの研究、マルウェアの解析、相互運用、ソフトウェアの保存、自分が持っているか調査を許されたソフトの解析としています。DRMやライセンス確認の回避、ゲームのチート、独自のソフトのコードや素材の複製には協力しないと明記しています。リバースエンジニアリング自体が、国や地域の法律や、対象のソフトの使用許諾で制限されている場合がある、という注意付きです。

実行を伴う解析は、調べる環境を分けます。 DISCLAIMERは、プログラムを動かしたり通信を記録したりする解析は、ファイルやアカウントや端末に影響しうるとして、信頼できない対象には適した環境を使うよう求めています。今回のような静的な解析は、渡したファイルを読むだけで、アプリは起動しない作りです。

導入はエージェントの設定を書き換えます。 npx rea-agents setupは、選んだエージェントにMCPサーバーと作業の指示を登録し、既存の設定のバックアップを取ります。提案された変更を確認してから承認し、エージェントを再起動する手順です。

ネイティブのバイナリの解析はGhidraなどの導入が要るため、この記事の検証には含めていません。電卓の例のような結果が、エージェントとの組み合わせでどこまで再現できるかは、次に確かめたい点です。同じくエージェント向けに既存のソフトを包む道具として、CLI-Anythingの記事があります。

udon
Microsoft 365、ServiceNow、Copilotなどを自ら検証し実務で使える「コシのある知見」を記録しています。