実践的で慎重なガイド

Claude Codeでアプリをリバースエンジニアリングする方法

AnthropicのClaude CodeとオープンソースツールのREAは、正確に説明するためにここで名前を挙げています。Nightschool AIは独立した運営であり、AnthropicまたはREAの開発者から提携や推奨を受けているものではありません。

ソフトウェアのリバースエンジニアリングとは、元のソースコードなしにその振る舞いを調べることを指す。

回答をすべて読む

通常は理解するため、別のものと一緒に動かせるようにするため、使い続けられる状態を保つため、あるいはセキュリティ上の問題を見つけるために行う。REAはオープンソースのMCPサーバーおよびCLIで、Claude Codeのようなエージェントがプログラムの構造を読み取り、推測ではなくファイルや関数や呼び出しといった具体的な証拠を返せるようにする。公式リポジトリからのみインストールし、自分が所有している、あるいは調査する権限があるソフトウェアにのみ使い、元のソフトウェアを調べたセッションとビルドするセッションを分け、この方法で作ったものを公開する前には弁護士に相談すること。

公開日

要点まとめ

  • リバースエンジニアリングとは、完成したソフトウェアがどのように動くかを理解するために調べることで、通常はソースコードなしに行う。理由はセキュリティ研究、相互運用性、保存、あるいは単に文書化されていないものの仕組みを知りたいといったものだ。
  • REAはオープンソースのMCPサーバーおよびCLIで、github.com/morluto/reaでMITライセンスのもと公開されており、Claude Codeのようなエージェントがバイナリやアプリケーションを調べ、ファイルや関数、呼び出しといった証拠を返せるようにする。
  • ソフトウェアの動作を調べることは、法的には保護されたコードや資産をコピーすることとは別に扱われる。この点でよく引用される判例が第9巡回区控訴裁判所によるSega対Accolade事件とSony対Connectix事件の2つだが、どちらも一律の免責にはならない。
  • REA自身の免責事項では、DRMやライセンスチェック、アンチチート機能の回避を助けることは対象外とされており、出力が元のプログラムに対する権利を何も付与しないとも明記されている。自分が所有している、自分で書いた、あるいは調査する権限があるソフトウェアだけを調べること。
  • 仕様セッションと、その結果の仕様書だけを読む別のビルドセッションに分ける2セッションのクリーンルーム方式のワークフローは、後にクリーンルームであると主張する際の裏付けになる。これはあくまで実践の積み重ねであって法的な保証ではなく、弁護士の代わりにはならない。
無料レッスン · アカウント不要Claudeと出会うなぜClaudeなのか?6 分無料レッスンを始める

コピーして使える

今日から使えるプロンプト

既に知っているコードでセットアップを健全性チェックする

REAはすでにインストールされ、あなたと一緒にセットアップ済みです。私が指定するパスにある、自分で書いた小さなアプリを開き、各ファイルについてどんな関数があり、それぞれが何を呼び出し、プログラム外からの入力を扱っているように見える部分があるかを教えてください。REA自身の出力が実際に示している内容だけを報告し、不確かに見える点があればその旨を伝えてください。

これを自分の小さなアプリで先に実行することで、より大きなものにREAを向ける前にセットアップが実際に機能しているかどうかがわかります。

最初のセッションは仕様書だけにする

REAを使ってこのアプリケーションを調べ、それが何をするのかを平易な言葉で仕様書にしてください。インターフェース、読み書きするデータ形式、各主要関数の挙動を、すべて自分自身の言葉で書いてください。元のコードや疑似コード、バイナリ出力をそのまま引用したり貼り付けたりしないでください。仕様書を書き終えたらそこで止めてください。まだ何も構築を始めないでください。

これは以下の2セッション方式のワークフローの前半です。セッションを終える前に、出力をプレーンテキストのファイルに保存してください。

元のものを一切見ないビルドセッション

別のリバースエンジニアリングセッションで作成された仕様書がこれです。この仕様書にあるすべてを満たす、新しい独立した実装を構築してください。元のアプリケーション、そのバイナリ、ソースはまだ見ておらず、見せるよう頼むべきではありません。仕様書の中で曖昧な点があれば、元のプログラムが何をしていたか推測するのではなく、私に伝えてください。

最初のセッションの記録ではなく、仕様書のファイルだけを添付した新しいセッションでこれを始めてください。

先に進む前の法的な感覚チェック

これからREAを使ってソフトウェアをリバースエンジニアリングしようとしています。始める前に、これが自分に本当に許可されている行為かどうかを判断するために知っておきたいことを挙げてください。ソフトウェアの所有者は誰か、ライセンスや利用規約がすでにこの点に触れているか、DRMやライセンスチェック、アンチチートソフトウェアがどこかに関わっているかどうかです。あなたの推測ではなく実際の弁護士が必要そうな点があれば、指摘してください。

この回答は法的な許可ではなく、確認すべき質問のリストとして扱ってください。

本番のセッションの前にREA自身の免責事項を読む

REA自身のリポジトリからDISCLAIMER.mdを開き、このプロジェクトがどの種類のリバースエンジニアリングには協力しないとしているか、そして出力を使うことで人がどんな権利を得るとしているかを、平易な言葉でまとめてください。ツール自身のルールがすでに除外している行為をあなたに頼もうとしていないか確認したいです。

更新があるたびに繰り返す価値があります。免責事項はソフトウェアとともに変わることがあります。

ガイド全文

各セクションをタップすると開きます。

このガイドについて

今週、REAというツールを紹介する投稿が広まっている。AIエージェントが自分で書いていないソフトウェアを調べられるようにするツールで、接続先のエージェントの1つとしてAnthropicのClaude Codeを具体的に名前で挙げている。このガイドは2種類の読者を同時に想定している。リバースエンジニアリングとは何か、なぜそんなことをする人がいるのか、ただ気になっている人と、自分が実際に所有するものに対してClaude CodeでREAを安全に試したい開発者だ。内容は、リバースエンジニアリングの意味、REAが何であり何を読み取れるのか、ソフトウェアを調べることとコピーすることの間にある本当の法的な境界線、ここまで広範囲に手が及ぶものをインストールする前に確認しておくべき安全チェックリスト、インストール手順とREA自身のREADMEが現時点で求めるNode.jsのバージョン、2セッションに分けたクリーンルーム方式のワークフロー、そしてこのアプローチ全体の正直な限界について順に説明する。これは法的助言ではなく、慎重な手順を踏んでいるからといって、自分自身で出力を確認する手間を省いていい理由にはならない。

長い歴史を持つ分野

リバースエンジニアリングが実際に意味すること

リバースエンジニアリングとは、完成したソフトウェアがどのように動くかを理解するために調べることで、通常は元のソースコードや、そこに使われた設計資料を持たずに行う。それが何をするか、どのように組み立てられているか、何とやり取りしているかを見て、そこから逆算してその振る舞いのモデルを作り上げる。

人がこれを行う理由は、たいてい地味で、たいてい正当なものだ。セキュリティ研究者は、より悪意を持った誰かより先に脆弱性を見つけるためにプログラムをリバースエンジニアリングする。開発者は、誰も文書化してくれない古いプログラムと新しいプログラムを連携させるために、ファイル形式やネットワークプロトコルをリバースエンジニアリングする。アーキビストやホビイストは、元のハードウェアとそれを作った会社が両方なくなった後もソフトウェアを動かし続けるために、古いソフトウェアをリバースエンジニアリングする。そして時には、依存しているプログラムが文書化されていない何かをしていて、それを信頼する、あるいは回避する前に何をしているのか知る必要がある、という理由もある。

これ自体は何も新しいことではない。セキュリティ研究者やソフトウェアアーキビストは、AIエージェントが存在するはるか以前から、何十年もディスアセンブラやデバッガを使ってこれを行ってきた。変わったのは速度だ。エージェントは逆アセンブルのリストやデコンパイルされたメソッドを読み、数秒で要約できる。熟練者が何時間もかけていた作業だ。これは本物の能力の向上であり、だからこそこのガイドの後半で触れる法的・倫理的な境界線が、今になってより重要になっている。以前なら好奇心からコピーへ進む人を押し留めていた障壁が、ほぼ消えてしまったからだ。

このガイドの残りの部分は具体的だ。Claude Codeのようなエージェントをこの種の分析に結びつける、REAという1つのツールと、何かに向ける前に身につけておく価値のある習慣について順に説明する。

新たな登場者

REAとは何か、そして何を読み取れるのか

REAは自らを、アプリの挙動からネイティブバイナリまでソフトウェアをリバースエンジニアリングする手段だと説明している。実際に何を見られるかは対象の種類によって変わる。

MCPサーバーとCLI

REAはgithub.com/morluto/reaで公開されているオープンソースソフトウェアで、REA自身のコードはMITライセンスのもとにある。Claude CodeのようなエージェントがいつでもModel Context Protocolサーバーとして呼び出せる形で動作し、ターミナルから自分で実行できる普通のコマンドとしても動作する。

ネイティブバイナリ

REA自身のREADMEによれば、Hopper、Ghidra、IDA、Kunaといった分析バックエンドを通じて動作し、コンパイルされたバイナリから疑似コード、アセンブリ、文字列、シンボル、呼び出し、参照を取り出せる。

JavaScriptとElectronアプリケーション

JavaScriptとElectronが対象の場合、REAのREADMEでは、モジュール、インポート、ソースマップ、ルート、IPCチャネル、そしてプログラムが読み込むネイティブアドオンとの関係を読み取ると説明されている。

.NETアセンブリとAndroid APK

.NETアセンブリの場合はメタデータとCIL命令。Android APKの場合はマニフェストの宣言、クラス、デコンパイルされたメソッド、それらの間の参照で、これもプロジェクト自身のREADMEによる。

アプリケーション以外にも

同じREADMEでは、REAの分析ツールを向けられる対象として、ウェブサイト、パケットキャプチャ、ファームウェアイメージ、SQLiteデータベース、GoとRustのバイナリ、モデルファイルも挙げられている。

推測ではなく証拠

READMEによる設計意図としては、検出結果がファイルや関数、呼び出しといった具体的なものを指し示すようにすることで、エージェントの要約をそのまま信じるのではなく、自分で確認できるようにしている。

何かをインストールする前にこれを読む

法的な境界線:ソフトウェアを調べることとコピーすることの違い

ここで最も重要になる区別は、何かがどう動くかを調べることと、その保護された表現をコピーすることの違いだ。インターフェースやファイル形式、ある挙動を知るためのリバースエンジニアリングは、法的には、他人のコードや資産を自分の製品に持ち込むこととは別の行為である。

この区別を軸に築かれた実践手法がクリーンルーム設計と呼ばれるものだ。1人の人物または1つのセッションが元のものを調べ、そのインターフェース、データ形式、挙動について、元のコードを一切文書に貼り付けずに、自分自身の言葉で平易な仕様書を書く。元のものを一度も見ていない別の人物またはセッションが、その仕様書だけから新しい実装を構築する。要点は、最終的な結果が元の作品そのものではなく、書き起こされた説明から生まれたものであると示せる点にある。

この点でよく引用される、やや古い米国の判例が2つある。知っておく価値はあるが、どちらも何でもリバースエンジニアリングしてよいという一般的な許可ではない。1992年に第9巡回区控訴裁判所が判断したSega Enterprises Ltd.対Accolade, Inc.事件は、ある企業がゲームコンソールのロックアウトシステムをリバースエンジニアリングし、自社のゲームをそのコンソールで動かせるようにした事例だった。裁判所は、ゲームをそもそもそのハードウェア上で動かすために必要な、保護対象外の機能要素に到達するために行われた、そのリバースエンジニアリングに伴う中間的なコピーは、その事件固有の事実関係のもとではフェアユースに当たると判断した。同じ裁判所が2000年に判断したSony Computer Entertainment, Inc.対Connectix Corp.事件では、ある企業が別種のコンピュータ向けエミュレータを構築するためにコンソールの起動ソフトウェアをリバースエンジニアリングした件で同様の結論に至り、ここでも途中のコピーを、独自に書かれた相互運用可能な製品に役立つフェアユースとして扱った。

この2つはどちらも、自分の状況へのアドバイスとしてではなく、歴史的な背景として捉えてほしい。これらは特定の事実に関する2つの個別の控訴審判決であり、フェアユースは事件ごとに判断されるものであり、他の国ではこの境界線の引き方が異なり、またコピー防止の回避を対象とした後の法律によって、DRMと結びついたソフトウェアについてはこの余地がかなり狭められている。この種の作業を土台に何かを作ろうとしている人、特に出荷や販売を意図したものであれば、それに頼る前に実際の弁護士に相談すべきだ。

REAは、個々の事件について裁判所が最終的にどう判断するかとは関係なく、独自に境界線を引いている。プロジェクトのDISCLAIMER.mdによれば、REAはDRMやライセンスチェック、アンチチートシステムその他の技術的保護手段を回避することや、独自仕様のソフトウェアやその保護されたコード・資産をコピーすることには対応しておらず、協力もしない。また、分析の出力が元のプログラムに対する権利を何も付与しないと明言している。そこから導かれる実践的なルールは、自分が所有している、自分で書いた、あるいはその他の形で調査する権限があるソフトウェアだけを分析するということだ。

何かをインストールする前に

速さだけでなく安全にインストールする

バイナリを読み取り、分析バックエンドを動かせるツールには、自分のシステムにこれほど深く入り込むどんなソフトウェアにも向けるのと同じ慎重さを払う価値がある。

公式の提供元からのみインストールする

このプロジェクトはgithub.com/morluto/reaにあり、npmにはrea-agentsというパッケージ名で公開されている。動画の説明欄やフォーラムの投稿、チャットメッセージ内のリンクをたどるのではなく、自分でその名前を入力すること。

なりすましに注意する

こんなに急速に注目を集めるプロジェクトは、模倣者を引き寄せる。REAの名前に似た名前を名乗る別の場所でホストされているリポジトリやパッケージがあれば、それは立ち止まって確認する理由であって、絶対に近道として使ってはいけない。

未知のバイナリは仮想マシンで実行する

自分で書いていない、完全には信頼していないバイナリに分析バックエンドを向ける場合は、その作業を仮想マシンや他の使い捨て環境の中で行い、普段何にでも使っているマシンでは行わないこと。

バージョンを固定する

常に最新版を取得するのではなく、特定のバージョンをインストールし、新しいバージョンに移る前に何が変わったのかを確認すること。この記事の執筆時点では、npmレジストリ上でrea-agentsの最新公開バージョンは6.8.0だった。

免責事項を一度、本当にきちんと読む

DISCLAIMER.mdは短い。何かがすでにおかしくなってから読むのではなく、最初の本番セッションの前に全文を読むこと。

動かすまで

Claude CodeへのREAのインストール

ここではNode.jsのバージョンが重要になる。REA自身のREADMEは要件を正確に、Node.js 22.x(22.23.4以上)、24.x(24.22.1以上)、または26.12.1以上、プラスnpm、と記している。この種の要件はリリースごとに変わるため、インストール前に実際のREADMEと照らし合わせて確認すること。

セットアップコマンドはnpx rea-agents setupだ。READMEによれば、REAを登録するエージェントをどれにするか選ぶ手順を案内し、承認する前に提案する変更内容を示し、既存の設定のバックアップを保持する。その後、新しいMCPサーバーを認識させるためにエージェントを再起動すること。これはREA自身の説明にも明記されている。

一度きりのnpx実行ではなく常駐するコマンドラインとしてインストールしたい場合、READMEではnpm install --global rea-agentsを実行し、続けてrea --helpで利用できる内容を確認する方法が説明されている。グローバルインストールからは、自動ではなく自分のタイミングでrea updateにより新しいバージョンに移行でき、その後npx rea-agents@latest setupを実行するとエージェントの登録内容がそれに合わせて更新される。

完全には自分が所有していないものにREAを向ける前に、まず自分で書いた小さなアプリケーションで試してみること。REAをセットアップした状態で、Claude Codeにその小さなアプリを開かせ、関数ごとに何が見えるかを説明させ、自分が実際に書いた内容と比較する。この1つの練習で、セットアップが実際に機能しているかどうかを確認でき、何か重要なことに頼る前に、REAの証拠、ファイルや関数、呼び出しが実際にはどう読めるのか、その感触もつかめる。

作業をより安全な形にする

2セッションに分けたクリーンルーム方式のワークフロー

先に触れたクリーンルームという考え方を、2つの独立したClaude Codeセッションを使って具体的な形にする。1つめは仕様セッションだ。調査する権限があるソフトウェアにREAを向け、エージェントにそのインターフェース、データ形式、主要な関数の挙動を、すべて自分自身の言葉で、元のコードや疑似コードをそのまま文書に貼り付けずに平易な言葉の仕様書として書かせる。

2つめはビルドセッションで、最初のセッションの記憶を一切持たない、まったく新しい状態で開始する。渡すのは仕様書のファイルだけにし、それ以外は何も渡さない。元のバイナリも、最初のセッションの記録も、REAの生の出力も渡さない。仕様書を満たす新しい独立した実装を構築するよう頼み、仕様書の中に曖昧な点があれば、元のプログラムが何をしていたのかを黙って推測するのではなく、そのことを伝えるよう頼む。

重要なのは、これらを1つの長い会話の2つの段階ではなく、本当に独立したセッションとして保つことだ。元のものを調べ、その後に代替物を書くことを同じ1つのセッションで行ってしまうと、まさにクリーンルーム設計が明確に保とうとしている境界線がぼやけてしまう。後になって、後半部分が前半部分に頼っていなかったことを示す方法がなくなるからだ。

これによって何が得られるのかは、はっきりと見ておくべきだ。規律を持った2セッション方式のワークフローは、後になって何かがどう作られたのかを誰かに問われた際に、クリーンルームであるという主張を裏付ける実践だ。それ自体が法的な保証になるわけではなく、出荷や販売を予定しているものを実際の弁護士に見てもらうことの代わりにもならない。

期待値を設定する

このワークフローの正直な限界

REAとこのガイドで説明した手順はリスクを減らすが、どちらもリスクをゼロにはしない。何かを開いたら、これらの限界を念頭に置いておくこと。

大規模なアプリケーションでは見落としが起きうる

大きなアプリケーションは、1回の分析パスで網羅できる範囲より表面積が大きい。問題なく終わった実行は、そこにあるものの一部のサンプルだと捉え、何も見落としていない証明だとは考えないこと。

出力は手がかりとして扱い、結論とはしない

ファイルや関数、呼び出しを指し示す証拠は、見に行くべき場所であって、それ自体で確定した事実ではない。実際に頼ろうとしているものは、本当の出力を自分の目で読んで確認すること。

多くのコンテキストを消費する

詳細なバイナリやバイトコードの分析は、あっという間に大量のテキストを生み出す。小さなアプリ以上のものでは、セッションのコンテキストが急速に埋まることを想定し、それを踏まえて2セッション方式のワークフローを計画すること。

ソフトウェアも法律も変わり続ける

REAのコマンド、Node.jsの要件、そして何を読み取れるかは、バージョンごとにすべて変わっていく。リバースエンジニアリングを取り巻く法的な状況も変化する。今日読んだことに頼る前に、両方を再確認すること。

もう一対の目があるとなお良い

個人的な実験の範囲を超えるものについては、コードと法的な境界線の両方を理解している人間のレビュアーは、もう1つ慎重なプロンプトを重ねるより価値がある。

本番で試す前に、狭く確認可能なプロンプトを練習する

完全には所有していないものにリバースエンジニアリングツールを向ける前に、エージェントに狭いタスクを与え、その出力を自分で現実と照らし合わせて確認する習慣をすでに身につけておくと役に立つ。Nightschool AIの無料の最初のレッスンでは、AnthropicのClaude Codeを使ったまさにそうした慎重なプロンプトの方法を、順を追って説明している。

よくある質問

リバースエンジニアリングとは実際には何を意味するのか?

完成したソフトウェアがどのように動くかを理解するために調べることを意味し、通常は元のソースコードや設計資料を持たずに行う。人々はセキュリティ研究のため、自分が管理していないソフトウェアと何かを連携させるため、古いソフトウェアを使い続けられる状態に保つため、あるいは単に文書化されていないプログラムが何をしているのかを理解するために、これを行う。

リバースエンジニアリングは合法なのか?

何を調べるか、どう調べるか、どこにいるか、学んだことをどう使うかに大きく左右される。何かがどう動くかを調べることは、その保護されたコードや資産をコピーすることとは別に扱われる。このガイドは法的助言ではない。実際の事柄にこれを頼る前に、実際の弁護士に相談すること。

このガイドで扱っているツール、REAとは何か?

REAはオープンソースのMCPサーバーおよびコマンドラインツールで、github.com/morluto/reaでMITライセンスのもと公開されており、AnthropicのClaude Codeのようなエージェントがバイナリやアプリケーション、その他のソフトウェアを調べ、平易な言葉での推測ではなくファイルや関数、呼び出しといった証拠を返せるようにする。

REAはどのNode.jsバージョンを必要とするのか?

REA自身のREADMEによれば、この記事の執筆時点では、Node.js 22.x(22.23.4以上)、24.x(24.22.1以上)、または26.12.1以上、プラスnpmが必要となる。このようなバージョン要件はリリースごとに変わるため、インストール前に実際のREADMEを確認すること。

Claude CodeにREAをどうインストールするのか?

npx rea-agents setupを実行し、どのエージェントに登録するかを選び、承認する前に提案される変更内容を確認し、その後エージェントを再起動する。代わりに常駐するCLIにしたい場合は、npm install --global rea-agentsを実行してからrea --help、そして後でバージョンを意図的に移行するにはrea updateを使う。

クリーンルーム方式のワークフローとは何か、そしてなぜ2セッションを使うのか?

仕様セッションでは元のソフトウェアを調べ、元のコードを一切貼り付けずに、その挙動を平易な言葉で仕様書にする。最初のセッションの記憶を持たず、元のものにもアクセスできない別のビルドセッションが、その仕様書だけから新しいコードを構築する。この2つを本当に分けておくことは、後になってクリーンルームであるという主張を裏付けるが、1つの混ざったセッションではそうはならない。

REAはどのようなことには協力しないのか?

REA自身のDISCLAIMER.mdによれば、REAはDRMやライセンスチェック、アンチチートシステムの回避、あるいは独自仕様のソフトウェアやその保護された資産のコピーには対応しておらず、協力もしない。また、出力が元のプログラムへの権利を何も付与しないこと、そして自分が所有している、自分で書いた、あるいは調査する権限があるソフトウェアにのみ使うべきであることも明記している。

REAの正直な限界とは何か?

大規模なアプリケーションでは見落としが起きうるため、問題なく終わった実行はあくまでサンプルであって保証ではない。その出力は確認する価値のある手がかりであって、確定した結論ではない。詳細な分析は多くのテキストを生み出すため、小さなアプリを超えるものでは特に、セッションのコンテキストを急速に使い切ってしまうこともある。

このガイドはAnthropicやREAの開発者と提携しているのか?

していない。これはNightschool AIによる独立した教育用ガイドだ。AnthropicのClaude CodeとオープンソースプロジェクトのREAの名前を挙げているのは、それらが実際にどう動くかを説明するためだけであり、AnthropicまたはREAの開発者との間に、どちらの方向にも提携やパートナーシップ、推奨関係はない。

本物のものをリバースエンジニアリングする前に習慣を身につける

狭いタスク、実際に確認できる仕様書、そして自分の最初の答えに対する健全な疑いこそが、どんな単一のツールよりもここでは重要になる。

Nightschool AIは独立した学習プラットフォームであり、Anthropicとは提携・承認・後援関係にありません。ClaudeはAnthropic, PBCの商標です。 Anthropic公式のClaude Academyをお探しですか?academy.claude.comをご覧ください。