2026 年 10 月 8 日、3 か月前まで誰も聞いたことがなかったリポジトリが、GitHub のトレンド 1 位に躍り出た。
その名は REA(Reverse Engineer Anything)。エージェントに本物の逆アセンブラを与えるツールだ。
**ブックマークしておいて — 詳細版、全 20 レッスンのコースはこちらで公開中**
空のターミナルから始まり、独自のパリティテストを通過する再構築に至るまで、すべてのコマンドとプロンプトを書き出した完全ガイドだ。ここから始めよう。
その週、どこを見ても反応は同じだった。
Matthew Berman はそれを 3 つの単語で表現し、360 万人がそれを目にした。
https://x.com/MatthewBerman/status/2108245653843509415
REA はオープンソースの MCP サーバーと CLI で、Claude Code、Codex、Cursor、Gemini CLI に接続できる。
MIT ライセンス、morluto による開発、初回リリースは 2026 年 7 月 12 日。そして 3 か月後には GitHub スターが 10 万を突破した。
すべてローカルで動作し、あらゆる結論は「観察」「推論」「不明」のいずれかにタグ付けされ、その根拠となるアドレスや呼び出し元も示される。
これが、密閉されたバイナリから自分が所有する再構築物に至る全行程、8 つのステップだ。

ステップの前に:人々がすでにこれでリリースしたもの
主役はツールではなく、4 週間で形になった成果だ。
ArtCraft は 7 つの Adobe アプリを無料のオープンソース代替品として再構築し、続いて WordCraft、GridCraft、DeckCraft で Office にも挑んだ。
現在 12 アプリ。すべて Rust でゼロから書かれ、3 プラットフォームでネイティブ動作し、1 つを除いて WebAssembly 経由でブラウザタブでも動く。
ゲーム分野での実績はさらに具体的だ:
- Super Mario Sunshine のネイティブ PC 移植:Claude と Codex を併用し、約 365 エージェント時間、173 億トークン
- 公式 REA ブログでエージェントにより再構築された東方プロジェクトのゲーム:697 関数中 696 が完全一致、約 12 日でプレイ可能に
- Aegis 認証アプリ(3,077 クラス)の分解と再構築、133 のテストケースすべてが通過
- DX-Ball のサウンドパン関数を C で再構築し、3,205 のオリジナル x86 テストケースを通過、コンパイル済み 63 バイトすべてを再現
このリストに「ないもの」に注目してほしい。
誰もライセンスチェックを破っていないし、他人のソースコードを公開してもいない。
これらはすべて、挙動を復元し、書き留め、新しいコードで再構築したものだ。
01. 何かを開く前にターゲットを分類せよ
これが広まった理由は、1 つのものをうまく読めるからではない。ほぼすべてを読め、かつ主張ごとに証拠を示すからだ。
https://x.com/RoundtableSpace/status/2109165852578992582
このリストこそが、最初の意思決定になる。午後を丸ごと無駄にする最も多いパターンは、JavaScript がそのまま転がっている Electron アプリを相手に、いきなり逆アセンブラに手を伸ばすことだ。
REA を Electron に向ければ、エンジンを一切使わず数秒でモジュール、インポート、IPC 境界が分かる。一方、ネイティブの Mach-O や ELF では Hopper データベースが開かれ、より深く、より遅い道に進むことになる。
どちらにいるのかを知るだけで数時間節約できる。だから最初のプロンプトの仕事にしよう。
1[ABSOLUTE PATH] にある [APP] の [FEATURE] がどう動くか理解したい。2 まず、これがどんな種類のターゲットか(ネイティブ、Electron/JS、.NET、Go、APK、WASM)を教えて、3 それを開くのに適切な REA ツールを選んで。深い分析はまだ始めないで。4 次に、1 つの段落で全体像を描いて:何で作られているか、どのくらいの規模か、5 [FEATURE] を探すならまずどこを見るべきか。観察、推論、不明は分けて記載して。

ほとんど誰も言及しない点:多くの Unity ゲームはロジックを .NET として出荷しており、REA は追加エンジンなしで .NET を読める。
購入した Steam ゲームが 30 分以内にバイナリから編集可能な C# になるのは、まさにこれが理由だ。
しかも、マシン上のあらゆる Electron アプリは、起動すらせずに今すぐ読める:
1# JavaScript がある場所2macOS: /Applications/<App>.app/Contents/Resources/app.asar3Windows: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar4 npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
02. 5 分でインストールし、エンジンを 1 つ追加する
これを機能させているのは気の利いたプロンプトではない。エージェントに直結した本物の逆アセンブリエンジンであり、ある開発者もまさにそう表現していた。
https://x.com/techNmak/status/2108431092462338178
セットアップでは MCP サーバーをエージェントに登録し、対応するワークフロースキルをインストールする。
何かを書き込む前にすべての変更を表示し、触ったものはバックアップする。
node -v # Node 22.19+、24.11+、または 26+。バージョン 23 と 25 は非対応
1npx rea-agents@latest setup # MCP サーバーを登録、書き込み前に確認する2npm install --global rea-agents # 短い rea コマンドを永続的に使えるようにする3rea --help4# エージェントを再起動してから確認。doctor はチェックのみで何も変更しない5npx -y rea-agents@latest doctor --client claude_code --json
再起動は見た目以上に重要だ。ターミナルセッションは新しく開く必要があり、デスクトップアプリは完全に終了させる必要がある。ウィンドウを閉じるだけでは不十分だからだ。
次に、実際に読みたい対象に対してだけエンジンを追加する:
最初の本当のターゲットに取りかかる前に書いておく価値のあるファイルが 1 つある。claude-md に記すハウスルールだ。
自分が所有するものだけを分析し、すべての主張を観察・推論・不明にタグ付けし、根拠となるアドレスを引用し、テストを通過しない限り復元した挙動を完了とみなさないこと。
1# ネイティブプログラムとゲーム:Ghidra 12.1.x および JDK 21 以降2 export GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra_12.1.4_PUBLIC3 export JAVA_HOME=/absolute/path/to/jdk-214 npx -y rea-agents@latest doctor --provider ghidra --json56 # Android アプリ:JDK 17+ および jadx-headless-mcp 0.7.17 export REA_JADX_MCP_JAR=/absolute/path/jadx-headless-mcp-0.7.1-all.jar8 rea inspect-android-package /path/App.apk910 # スマートコントラクトのバイトコード、現時点では Linux x64 のみ11 rea inspect-evm-interface ./runtime.hex hex --json
03. 偵察:地図はコードより先に来る
まだ関数を 1 つも開かないこと。
1 つのコマンドで、バイナリがどのマシンで動くか、中にいくつ関数があるか、埋もれている読み取り可能なテキストすべてが分かる。
そのテキストこそ、その日に得られる最速の手がかりだ。エンドポイント、エラー文字列、機能名が、ロジックを読む前にアプリの姿を教えてくれる。
1rea.open_binary { path: "/Applications/Target.app/Contents/MacOS/Target" }2rea.binary_overview {}3 arch: arm644 functions: 1,284 identified5 entry: _main @ 0x1000051c067rea.search { query: "http" }8 0x10004a2c0 "https://api.target.app/v3/sync"9 0x10004a300 "Authorization: Bearer "1011rea.xrefs { address: "0x100012ab0" }12 147 references -> core config loader, called everywhere

REA は各関数が何回呼ばれるかをカウントし、その数値が相互参照数(クロスリファレンス)になる。
147 回呼ばれる関数はアプリのアーキテクチャそのものであり、2 回しか呼ばれない関数は後回しにできるヘルパーだ。
その数でソートして上から攻めよう。ファイル順に読んでいてはいけない。ファイル順は、面白い関数が 4 つしかないバイナリの中で週末を溶かす原因になるからだ。
04. 関数を 1 つデコンパイルし、Opus に中の名前をすべて付けさせる
デコンパイラは生の機械語命令を、C に近い形へ戻してくれる。
出てくるものは粗い。var_28 のような名前、キャストだらけ、絡み合った分岐。だが粗くて構わない。モデルが必要なのは「読めること」だけだからだ。
1# アドレス指定で 1 関数、保存して再利用できる JSON 形式で2rea decompile /path/to/Target 0x100012ab0 --provider hopper --json > fn_config.json34# または名前で探し、その参照を辿る5rea function /path/to/Target parseConfig --provider hopper --json6rea xrefs /path/to/Target 0x100012ab0 --provider hopper --json
そしてその出力を Opus 5.5 に渡し、逆アセンブラにはできない部分をやらせる:
1これは 147 の相互参照を持つ関数のデコンパイル疑似コードです。231. 変数の使われ方に基づいてすべての変数名を変更し、その目的を 1 文で述べること。42. 読み書きするデータ構造を列挙し、従っているパターンに名前を付けること。53. 呼び出し規約が示唆する言語で、クリーンで慣用的なコードとして書き直すこと。64. エラーハンドリング、入力検証、セキュリティチェックの欠落があれば指摘すること。78回答前に xhigh effort で思考すること。不確かな部分はすべて明示すること。

Opus 5.5 には 5 つの努力レベルがある:low、medium、high、xhigh、max。
medium は調査とナビゲーション、high は通常の関数への注釈、max は難読化されたコードや重いポインタ演算向けだ。
effort はこのパイプラインにおける最大の品質調整ノブだが、大半の人はデフォルトのままにしてモデルのせいにする。
デコンパイルは「コードが何をするか」を与え、モデルは「なぜそうするのか」と、再構築のための名前を与えてくれる。
05. 難読化:壊す価値のあるものだけ壊し、残りは予算管理せよ
一部のアプリは、まさにあなたがやろうとしていることに耐えるよう作られている。ロジックはシャッフルされ、文字列は暗号化され、注意を浪費するためだけに偽の分岐が追加されている。
ここは最高のモデルでさえ苦戦する唯一の領域であり、実測データも存在する。
Elastic Security Labs は 20 のタスクで Claude Opus を Tigress スクランブラに向けた。そこから 2 つの教訓が明確に導き出された。
失敗した試行は成功した試行の約 2 倍のコストがかかる。モデルが諦める前に押し続けるからだ。また、多層難読化の成功率はゼロだった。つまり力任せに挑むのは、何も学べない最も高価な方法だということだ。

実践的なルールは、セッション単位ではなく関数単位で予算を組むことだ。
まずはノイズを取り除こう。Caveman という無料ツールがデコンパイル済みジャンクの約 75% を除去してくれ、モデルは本来のロジックに集中できるようになる。
1この関数は難読化されているようです。max effort で作業してください。231. 使用されている手法(制御フロー平坦化、不透明述語、デッドコード、文字列暗号化、4 関数分割)を特定し、それぞれの箇所を指摘してください。52. それらを解決してください:デッドな分岐の除去、不透明述語の評価、ディスパッチの6 平坦化解除、鍵が復元可能ならインライン文字列の復号。残ったものを提示してください。73. 確信度を 1〜10 で評価してください。6 未満の場合、不確かな部分と、それを解決するために8 必要なコンテキストを挙げてください。黙って推測しないでください。
06. スウォーム:1 つのコントローラー、多数のワーカー
単一のチャットでは 500 関数をうまく読めない。
40 関数前に見たことを忘れ、同じ構造体に 3 通りの名前を付け、静かに自己矛盾を始める。
解決策はコンテキストを増やすことではなく、役割を分割することだ。仕事を割り振るコントローラーと、1 つの関数を受け取ったら止まるワーカーに分ける。

1あなたはリバースエンジニアリングのコントローラーです。関数マップは functions.json2(address, name, size, xref_count)にあります。341. 関数をコールグラフの近接性でクラスタリングし、クラスタを xref 数で並べ替えること。52. 各クラスタをワーカーに割り当てること。自分で関数を分析しないこと。63. 名前の一貫性を保つため、解決済みの構造体を各指示に注入すること。74. 確信度 6 未満の場合は、解決済みの隣接関数からのコンテキストを追加して 2 巡目を回すこと。85. 累積トークン消費量を追跡し、クラスタごとに報告すること。910あなたはワーカーです。デコンパイル済みの関数 1 つと、これまでに解決された構造体を受け取ります。11返すのは正確に:address, purpose, confidence (1-10), structs_used, structs_new,12clean_source, flags。既存の構造体名を再利用し、コントローラーから渡された構造体に132 つ目の名前を絶対に作らないこと。担当は 1 関数のみ。終わったら停止すること。
REA には、MCP サーバーに組み込まれたガイド付きワークフローもあるが、ほとんどの人は開いたことがない:
- - investigate_feature - 発見から具体的な関数まで機能をトレースする
- - compare_application_versions - 2 つのリリースを diff し、実際に何が変更されたかを確認する
- - verify_reconstruction - 保存された証拠と照合して再構築を検証する
- - audit_residual_unknowns - まだ証明されていないものを一覧化する
07. クリーンルーム:2 つのコンテキスト間の壁こそが成果物
クリーンルーム再構築とは、アプリの挙動だけを写し取り、内部のコードは一切コピーしないことを意味する。
正しく行えばリリースするものは完全に自分のものになり、間違えれば他人の著作権を自分のリポジトリに抱え込むことになる。
これは 2026 年の発明ではなく、40 年前からある手法だ。
80 年代初頭、Compaq はこの方法で IBM の BIOS を約 100 万ドルかけて再構築した。他ブランドの PC が存在する唯一の理由がこれだ。
1992 年、Sega v. Accolade 裁判で裁判所は、仕組みを理解する唯一の方法である場合、コードの分解はフェアユースになり得ると判断した。2000 年には Sony v. Connectix で、完成したエミュレータに Sony のコードが一切含まれていなかったため、Sony は 0-3 で敗訴した。
線の向こう側も同様に明確だ。2011 年、George Hotz は PS3 のルートキーが公開された後、Sony と和解し、活動を停止することに同意した。

正しい側にいるための 4 つのルールがあり、ArtCraft チームは毎ビルドでこの 4 つすべてを自動チェックしている:
- - 観察せよ、コピーするな。ターゲットはブラックボックスとして実行し、スクリーンショットは自身のウィンドウのみ、コードを自分のプロジェクトに貼り付けない
- - ソースではなく仕様を。ファイル形式は公開標準から得る(OOXML は ECMA-376 / ISO 29500、加えて公開済みの RTF や ODF 仕様)、競合のパーサーを読んで得るのではない
- - オリジナルのアセットのみ。アイコン、フォント、テンプレート、音声はすべてコードで描画するか、パブリックドメインまたはオープンライセンスのものを使い、帰属表示ファイルに行を追加する
- - 2 つの仕事を分離する。あるエージェントが挙動を復元して仕様を書き、別のコンテキストがその仕様だけから実装する
最後のルールこそ皆が飛ばすものであり、実際の境界線でもある。
調査担当のエージェントは定義上汚染されている。デコンパイル結果を読んでいるからだ。そして構築担当のエージェントは汚染されてはならない。
1完了した分析から、再実装のためのクリーンルーム仕様書を作成してください。23「挙動」のみを記述すること:すべての公開インターフェース、データモデル、ユーザーに見える4各機能のテスト可能な要件、読み書きするファイル形式、エラーハンドリング。56アドレス、オフセット、デコンパイルされた変数名、アセンブリ、その他オリジナルから7コピーしたものは一切含めないこと。バイナリを見たことがない開発者が、この文書だけで8互換バージョンを実装できなければなりません。910セクション:Architecture, Data Model, Public API, File Formats, Test Cases
記述から作業することは、法的な防具というだけではない。
20 年前に誰かが下した決定を引き継ぐ代わりに、自分の言語にとって最適な選択ができるようになる。WordCraft が一部で Word より速いのはそのためだ。
08. パリティを検証し、MCP でリリースする
オリジナルのソースは持っていないので、行単位で diff することはできない。
比較するのは挙動だ。両方のビルドに同じ入力を与え、同じ出力が返るかを確認する。
1オリジナルのバイナリと私の再構築物を比較する動作テストハーネスを構築してください。2350 の入力を生成してください:通常 30、エッジケース 10(空、最大サイズ、Unicode)、4エラー 10(不正形式、破損)。それぞれを両方で実行し、可能ならバイト単位で、5そうでなければ意味的に比較してください。一致率、相違点、およびそれぞれの重大度6(外観上 / 動作上 / 致命的)を報告してください。report.md に保存してください。
「一致していると思う」は証拠にならない。一致率が証拠であり、そのレポートはリリース記事の冒頭に置ける最も説得力のあるものだ。
そして、REA や Craft アプリ群がそうしたように、再構築物を MCP サーバーとしてリリースしよう。次の人のエージェントが、あなたが REA を動かしたのと同じようにあなたのツールを操作できるようになる。
すべての関数に明確な名前と 1 行のインストール手順を与えれば、すべてのアクションは名前付きコマンドになり、クリック、ショートカット、エージェントが同一にトリガーできる。
1claude mcp add wordcraft -- wordcraft-cli mcp23> report.docx を開き、すべての見出しを 14pt 太字にして PDF にエクスポート4 ok select.all-headings -> 12 selected5 ok format.font-size 14 . format.bold6 ok export report.pdf (selectable text, bookmarks kept)
限界と、週末を無駄にする 5 つのミス
REA はサーバーに触れることはできない。ローカルマシン上にあるものを読むツールであり、企業のサーバーで動いているコードはそもそもあなたに出荷されていないからだ。
デコンパイルされたコードは再構成物であってオリジナルのソースではない。ステップ 08 が存在する理由はまさにそこにある。
シンボル除去された C++ バイナリは Unity の .NET ゲームよりはるかに難しく、商用エンジンは依然として正規のライセンスが必要だ。
- - JavaScript がすぐそこにあるのに Electron アプリで逆アセンブラを開くこと
- - サマリーを読む前にバイナリ全体をダンプし、ロジックを埋もれさせコストを跳ね上げること
- - 相互参照数ではなくファイル順に関数を読むこと
- - モデルにコードを再構築物へコピーさせ、1 回のペーストでクリーンルームを破壊すること
- - パリティレポートなしでリリースすること
X の半数が 1 週間海賊行為だと騒いでいたので、法的面について正直な線を引いておこう。自分のコンピューターでアプリを読むことは学習であり、挙動から機能を再構築することは 80 年代から業界が行ってきたことであり、コードをコピーしたり有料機能をクラックしたりすることが訴訟の対象になる部分だ。
オリジナルを研究し、自分のものをリリースせよ。
この 8 つのステップそれぞれに対応するレッスンがこちらにあります
reacourse.xyz 。正確なプロンプト、失敗パターン、そしてこの手法が機能しなくなる部分まで網羅しています。
かつてクローズドソースは「永遠に知ることはできない」を意味した。
今は「証拠を見せてくれ」を意味する。
大半の人は、午後で理解できて週末で再構築できる機能に毎月課金し続けるだろう。
ソフトウェアを読む方法を学んだ少数派は、好きなものを何でも作る。
私をフォローし、Telegram チャンネルに登録しよう:





