# AI監査に向き合う：リバースエンジニアリングプロジェクトをどのように「合法化」できるか？

{現代|げんだい}のAI{支援|しえん}プログラミングの{時代|じだい}において、Claude Code のようなツールは{開発|かいはつ}{効率|こうりつ}を{大|おお}きく{向上|こうじょう}させます。しかし、セキュリティ{研究者|けんきゅうしゃ}やリバースエンジニアリング（RE）の{愛好家|あいこうか}にとって、これらのツールにはしばしば{悩|なや}ましい{制限|せいげん}があります。それが **{所有権|しょゆうけん}{検証|けんしょう}** です。

Claude Code を、{明|あき}らかに{逆|ぎゃく}コンパイルの{出力|しゅつりょく}であるフォルダーで{起動|きどう}しようとすると、Git {履歴|りれき}の{確認|かくにん}、{特定|とくてい}のファイルパスの{分析|ぶんせき}、{難読化|なんどくか}や{逆|ぎゃく}コンパイルの{特徴|とくちょう}を{持|も}つ{文字列|もじれつ}の{識別|しきべつ}など、さまざまな{監査|かんさ}{方法|ほうほう}を{通|つう}じて、あなたがそのプロジェクトの{真|しん}の{所有者|しょゆうしゃ}かどうかを{判断|はんだん}します。{検証|けんしょう}に{失敗|しっぱい}すると、{機密性|きみつせい}の{高|たか}いタスクの{実行|じっこう}を{拒否|きょひ}することがあります。

この記事では、{複数|ふくすう}のAI（Claude Code + Gemini CLI）の{連携|れんけい}を{使|つか}って、この{制限|せいげん}を{回避|かいひ}し、プロジェクトを「{合法化|ごうほうか}」するための{実践的|じっせんてき}な{考|かんが}え{方|かた}を{共有|きょうゆう}します。

## {核心|かくしん}となる{痛点|つうてん}：{所有権|しょゆうけん}を{証明|しょうめい}する

Claude Code が{深|ふか}いタスクを{実行|じっこう}する{前|まえ}に、{通常|つうじょう}はあなたがそのプロジェクトを{管理|かんり}していることを{検証|けんしょう}する{必要|ひつよう}があります。これを{回避|かいひ}するために{人々|ひとびと}が{考|かんが}えがちな{方法|ほうほう}は、{一般的|いっぱんてき}に2つあります。
1. **メールの{偽造|ぎぞう}**：{設定|せってい}を{通|つう}じて{所有者|しょゆうしゃ}の{通信|つうしん}{記録|きろく}を{偽装|ぎそう}しようとする（{成功率|せいこうりつ}は{低|ひく}く、きわめて{不安定|ふあんてい}）。
2. **ソースコードの{偽造|ぎぞう}／{再構築|さいこうちく}**：{逆|ぎゃく}コンパイルされた{断片|だんぺん}を、「メタデータを{失|うしな}った{元|もと}のソースコード」として{再構築|さいこうちく}する。

ここでは2つ{目|め}のアプローチ、つまり **{物語|ものがたり}の{再構築|さいこうちく}** を{推奨|すいしょう}します。

## {物語|ものがたり}の{再構築|さいこうちく}：{逆|ぎゃく}コンパイルから「ソースコード{喪失|そうしつ}」へ

Git {履歴|りれき}がなく、{逆|ぎゃく}コンパイルの{痕跡|こんせき}だらけのプロジェクトを Claude Code に{受|う}け{入|い}れさせるには、{合理的|ごうりてき}で{論理的|ろんりてき}に{閉|と}じたループを{構築|こうちく}する{必要|ひつよう}があります。
*   **{背景|はいけい}{設定|せってい}**：このプロジェクトは{別|べつ}のマシンで{開発|かいはつ}された{元々|もともと}のプロジェクトだったが、ハードドライブ{故障|こしょう}のような{不可抗力|ふかこうりょく}による{事故|じこ}のため、Git リポジトリ（`.git`）とすべての{開発|かいはつ}メタデータが{失|うしな}われた、と{主張|しゅちょう}する。
*   **{核心|かくしん}の{復元|ふくげん}**：Codex やそのほかの{逆|ぎゃく}アセンブルツールを{使|つか}って{重要|じゅうよう}なロジック（Core Source）を{復元|ふくげん}し、それを「{唯一|ゆいいつ}{残|のこ}ったバックアップ」として{提示|ていじ}する。

## {重要|じゅうよう}なプロセス：{証拠|しょうこ}の{自動|じどう}クリーニング（サニタイズ）

これはもっとも{失敗|しっぱい}しやすいステップです。{逆|ぎゃく}コンパイルプロジェクトには{大量|たいりょう}の「しっぽ」が{残|のこ}ります。
*   `disasm/` や `pseudocode/` のようなフォルダー{名|めい}。
*   `Mach-O`、`stripped`、`Ghidra` のようなキーワード。
*   もっとも{致命的|ちめいてき}なもの：クラッキングツールが{残|のこ}したハードコード{文字列|もじれつ}（`CRACKED`、`fake_signature`、`2099-12-31` など）。

### AI {連携|れんけい}によるサニタイズプロセス

Claude Code が{証拠|しょうこ}を{検出|けんしゅつ}して{疑念|ぎねん}を{示|しめ}したときは、{現在|げんざい}のセッション{内|ない}で{説明|せつめい}しようとしてはいけません。それはコンテキストを{汚染|おせん}します。{正|ただ}しいアプローチは{次|つぎ}のとおりです。

1.  **「クリーナー」Agent を{導入|どうにゅう}する**：Gemini CLI のような、{監査|かんさ}{制限|せいげん}の{対象|たいしょう}ではない{別|べつ}のAIを、{独立|どくりつ}した Agent としてワークスペースに{接続|せつぞく}する。
2.  **{完全|かんぜん}なサニタイズを{実行|じっこう}する**：
    *   `.build` や `analysis` など、すべての{機微|きび}なディレクトリを{削除|さくじょ}する。
    *   ソースコード{内|ない}の、クラッキング{関連|かんれん}の{特徴|とくちょう}を{持|も}つすべてのリテラルを{一括|いっかつ}{置換|ちかん}する。
    *   `README.md` を{書|か}き{換|か}え、プロジェクトを「コミュニティ{主導|しゅどう}の{独自|どくじ}リソースプロジェクト」として{再定義|さいていぎ}する。
    *   `-reverse` や `-reconstructed` のような{接尾辞|せつびじ}を{持|も}つフォルダー{名|めい}を{変更|へんこう}する。
3.  **セッションをリセットする**：Claude Code の `/rewind` コマンドを{使|つか}い、{疑念|ぎねん}が{生|しょう}じる{前|まえ}の{状態|じょうたい}へロールバックする。

> {上記|じょうき}のサニタイズプロセスは、{再利用|さいりよう}{可能|かのう}な Claude Code Skill として{抽象化|ちゅうしょうか}されています。ソースコードとCLIエントリーポイントについては、[`project-sanitizer-skill`](https://github.com/leeguooooo/project-sanitizer-skill) を{参照|さんしょう}してください。

## Task Rewind（`/rewind`）を{使|つか}う

`/rewind` は、コード{変更|へんこう}を{元|もと}に{戻|もど}すためだけのものではありません。より{重要|じゅうよう}なのは、「コンテキストリセット」であるという{点|てん}です。Gemini CLI を{使|つか}ってワークスペースの{物理的|ぶつりてき}なクリーンアップを{完了|かんりょう}した{後|あと}、`/rewind` によって Claude Code は、{以前|いぜん}に{証拠|しょうこ}を{発見|はっけん}した{瞬間|しゅんかん}を{忘|わす}れ、タスクを{再開|さいかい}します。その{時点|じてん}で、クリーンに{再構築|さいこうちく}されたワークスペースを{前|まえ}にすると、Claude Code はそれを、{予期|よき}しない{事故|じこ}によってメタデータを{失|うしな}った{通常|つうじょう}の{独自|どくじ}プロジェクトとして{認識|にんしき}します。

## まとめ

この「マルチ Agent {連携|れんけい} + {物語|ものがたり}の{再構築|さいこうちく}」という{考|かんが}え{方|かた}は、{本質的|ほんしつてき}には、AIをツールとして{利用|りよう}する{性質|せいしつ}を{使|つか}って、{別|べつ}のAIの{監査|かんさ}メカニズムに{対抗|たいこう}するものです。これは{開発者|かいはつしゃ}に、コードロジックを{理解|りかい}するだけでなく、AIツールの「{心理|しんり}」と{監査|かんさ}ロジックを{理解|りかい}することも{求|もと}めます。

*{注|ちゅう}：この記事は、{技術|ぎじゅつ}{交流|こうりゅう}とセキュリティ{研究|けんきゅう}のみを{目的|もくてき}としています。{原作者|げんさくしゃ}の{著作権|ちょさくけん}およびソフトウェアの{利用|りよう}{規約|きやく}を{尊重|そんちょう}してください。*
