reverse-shield について
リリース済みアプリがリバースエンジニアにどの程度の情報を与えるか調べる、開発者向け MCP サーバーです。Web、Electron、Android、ネイティブ、.NET の成果物をローカルでスキャンし、評価と修正案を示します。
主な機能
- 01ビルド成果物と公開サイトのスキャン
- 02Web、Electron、Android、ネイティブ、.NET の検査
- 03A〜F の評価を付与
- 04チェック項目と修正案の表示
- 05CI 向け SARIF 出力
活用シーン
- 01リリース前のビルド監査
- 02公開されたソースマップやクライアント認証情報の検出
- 03CI パイプラインへの成果物検査の追加
MCP 対応
ビルド成果物と公開 URL のスキャン、および修正案付きチェック項目の取得ツールを公開します。MCP クライアントからリリース済みアプリを検査できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | 成果物またはビルド出力ディレクトリへの絶対パスまたは相対パス |
| ignore | array | いいえ | 除外することを承認した検出結果:ルール ID、または rule:path-substring(例:bundle_secret:firebase-config.js) |
| exclude | array | いいえ | パスに次の文字列のいずれかを含むファイル/ディレクトリをスキップします |
| include | array | いいえ | パスに次の文字列のいずれかを含むファイルのみをチェックします |
| baseline | string | いいえ | `guardbee-reverse-shield scan --update-baseline` によって書き込まれたベースラインのパスです。レポートには新規および修正済みの指摘が表示されます |
| maxFiles | integer | いいえ | ディレクトリ内でチェックするファイル数の上限(デフォルト:5000) |
詳細
@guardbee/mcp-reverse-shield
リリースしたアプリが、リバースエンジニアにどれだけの情報を簡単に与えてしまうかを知らせる MCP サーバーです。
リバースエンジニアリング用 MCP を使うと、エージェントはソースコードのないアプリ(Web バンドル、Electron アプリ、APK、ネイティブバイナリ、.NET バイナリなど)を取り込み、バイナリの詳細に至るまで、機能の仕組みを説明できます。このパッケージはその逆側を担います。自分のビルド成果物を指定すると、そうしたツール(または jadx、ILSpy、Hopper、ブラウザーの開発者ツールを使う人)が何の労力もなく取得できる情報と、それぞれの修正方法を報告します。
テレメトリはデフォルトでオフです。
GUARDBEE_TELEMETRY=1を設定すると、サーバー名、ツール名、成功の有無、処理時間、ファイルパスなどの短いパラメーター値が送信されます。長い文字列やcontent、token、passwordなどのフィールドはプレースホルダーに置き換えられます。詳しくは@guardbee/mcp-telemetryをご覧ください。
Claude ──► reverse-shield ──► your build artifact / live site
│
├─ web source maps (shipped, inline, publicly reachable), unminified / dev bundles, keys, internal hosts
├─ electron fuses (RunAsNode, --inspect, NODE_OPTIONS, ASAR integrity), unpacked app code, code inside app.asar
├─ android debuggable, R8/ProGuard missing, signing scheme, backup, plain React Native bundle, unstripped .so
├─ native debug info, symbols, get-task-allow, hardened runtime, signing, PIE/NX/RELRO/canary (ELF, Mach-O, PE)
└─ .NET obfuscation missing, embedded PDB, leaked build paths
scan_url を除き、すべてローカルかつオフラインで実行されます。ASAR、Electron の fuse wire、バイナリ形式の AndroidManifest(AXML)、DEX、ELF、Mach-O(ユニバーサルバイナリとコード署名を含む)、PE/.NET メタデータ用のパーサーを備えており、apktool、jadx、binutils は不要です。
検出する項目
| チェック項目 | 重大度 | 対象 | 漏えいする情報 |
|---|---|---|---|
sourcemap_embeds_source | critical | web | sourcesContent に含まれるソース全体 |
sourcemap_shipped / sourcemap_inline / sourcemap_publicly_reachable | high | web | 元のファイルパスと構造 |
eval_devtool_bundle | high | web | 各モジュールのパスを含む開発用バンドル |
bundle_secret | キーの種類による | web | クライアントコード内で使える認証情報 |
unminified_bundle / dev_build_framework | medium | web | 読みやすいコード/フレームワークの開発用ランタイム |
sourcemap_reference / internal_endpoint | low | web | マップの場所/localhost、プライベート IP、ステージングホスト |
electron_fuse_run_as_node / electron_fuse_inspect_args | high | electron | 署名済みアプリ内の Node ランタイムまたはデバッガー |
electron_app_unpacked | high | electron | 編集可能なフォルダーとしてのアプリコード |
electron_fuse_node_options / _asar_integrity_off / _load_outside_asar | medium | electron | コードインジェクションと ASAR の改ざん |
apk_debuggable | critical | android | アプリのデータへのデバッガー接続と run-as |
apk_no_obfuscation / apk_js_bundle_plaintext / apk_unsigned | high | android | 実際の名前を含む jadx の出力/読み取り可能な RN バンドル/改ざんの証拠がないこと |
apk_allow_backup / apk_v1_only_signature | medium | android | バックアップ経由で取得されるデータ/Janus 型の再パッケージ化 |
native_debug_info / native_debuggable_entitlement | high | native | ソースレベルのデバッグ情報/lldb 接続 |
native_symbols_not_stripped / native_no_hardened_runtime / native_injection_entitlement / native_unsigned | medium | native | 関数名/dylib インジェクション/パッチ済みコピーの実行 |
native_no_pie / native_no_nx | medium | native | 悪用しやすい固定アドレス/実行可能なスタック |
native_no_relro / native_no_stack_canary / native_adhoc_signed / native_build_path_leak | low | native | ハードニングの不備とビルドホストの詳細 |
dotnet_not_obfuscated / dotnet_embedded_pdb | high | .NET | 元のソースに近い ILSpy/dnSpy の出力 |
list_checks は修正方法を含む完全なカタログを返します。各結果には A〜F の評価が付与されます。重大な問題(または複数の高リスクの問題)が漏えいしている場合は F、何もない場合は A です。
判断が難しいチェック項目の判定方法
- R8/ProGuard:すべての
classes*.dexからクラス記述子を読み取り、アプリケーション ID 配下のクラス(.debug型の ID の場合は、マニフェストに記載されたコンポーネントのパッケージ配下も含む)を確認します。説明的なクラス名が数十個あり、1〜2 文字の名前がほとんどない場合、R8 は実行されていません。 - .NET の難読化:メタデータの
#Stringsヒープを読み取ります。既知の難読化ツールのマーカー(ConfuserEx、Dotfuscator、SmartAssembly など)があれば、ただちに合格となります。それ以外の場合は、識別子の 10% 以上が 1〜2 文字の名前、数字だけの名前、または ASCII 以外の不正な文字であれば、アセンブリは合格となります。Obfuscar でビルドしたアセンブリ(21%、合格)と、難読化されていない NuGet アセンブリ 400 個(383 個を検出。残りの 17 個は、判定可能な名前が少なすぎるリソース専用アセンブリ)を使って検証しています。 - 秘密鍵:PEM ヘッダーに続いて base64 形式の鍵データがある場合に限り報告されます。アプリにバンドルされた暗号ライブラリには、文字列定数としてこのヘッダーが含まれます。
- 重複:30 個のチャンクに含まれる 1 つの鍵は、1 件の検出結果(「ほか 29 個のファイルにもあります」)として扱われます。また、難読化されていないファイルの長い一覧は 1 件にまとめられます。
クイックスタート
{
"mcpServers": {
"guardbee-reverse-shield": {
"command": "npx",
"args": ["-y", "@guardbee/mcp-reverse-shield"]
}
}
}
次に、エージェントにこう尋ねてください:「./release/MyApp.app のリバースエンジニアリングはどれほど簡単ですか?ビルド設定で対応できる箇所を修正してください。」
npx @guardbee/mcp-reverse-shield scan ./dist --fail-on=high
npx @guardbee/mcp-reverse-shield scan ./app/build/outputs/apk/release/app-release.apk
npx @guardbee/mcp-reverse-shield scan "/Applications/My App.app" --format=json
npx @guardbee/mcp-reverse-shield scan https://app.example.com --format=sarif > reverse-shield.sarif
ツール
| ツール | 目的 |
|---|---|
scan_artifact | ファイルまたはディレクトリをスキャンします:APK、.app、Electron フォルダー、app.asar、ELF/Mach-O/PE/.NET バイナリ、JS バンドル、ソースマップ、またはビルド出力フォルダー |
scan_url | ライブページを取得し、同一サイトのバンドルを確認し、sourceMappingURL をたどって <bundle>.map をプローブします(サードパーティのスクリプトは取得しません) |
list_checks | 各検出結果から何が分かるか、および修正方法をまとめたチェック項目一覧 |
dist/、build/、out/ を含むディレクトリを走査します(それが目的です)。node_modules、VCS、キャッシュのフォルダーはスキップします。また、内部に見つかった macOS の .app または Electron フォルダーは、バンドルされたサードパーティのフレームワークを除き、ヒューズ、ASAR、独自の実行ファイルを含む1つの単位としてスキャンします。
guardbee.yml:
reverse-shield:
fail-on: high
max-files: 5000
exclude:
- "vendor/"
CI
- run: npx @guardbee/mcp-reverse-shield scan ./dist --fail-on=high --format=sarif > reverse-shield.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: reverse-shield.sarif
制限事項
- 難読化は制御フローではなく名前に基づいて判定されます。名前を変更しただけのビルドは合格しますが、文字列の暗号化や制御フローの平坦化は測定されません。
- Web のチェックでは、配布されるものを確認します。キーが公開を想定したものかどうかは判定できません(Firebase の Web キーなど、一部のキーはサーバー側で制限されています)。キーをローテーションするか制限したうえで、パスを
excludeに追加してください。 - ネイティブのハードニングチェック(PIE/NX/RELRO/canary)は、リバースエンジニアリング対策ではなくエクスプロイト緩和の指標です。そのため、重大度は低または中として報告されます。
- iOS の
.ipaと Android App Bundle(.aab)は、まだ展開されません。.ipa内の.app、またはバンドルからビルドしたユニバーサル APK をスキャンしてください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。