
Android APK/XAPK/JAR/AARファイルを逆コンパイルし、jadxを使用してHTTP API、認証パターン、コールフローを抽出します。また、セキュリティ研究やペネトレーションテストのためのR8耐性のあるKotlin名の復元機能を備えています。
Android APK/XAPK/JAR/AAR ファイルを逆コンパイルし、アプリが使用する HTTP API(Retrofit エンドポイント、OkHttp 呼び出し、ハードコードされた URL、認証パターン)を抽出する Claude Code スキルです。元のソースコードがなくても API を文書化・再現できます。
Kotlin ファースト対応: 最近の Android アプリは Kotlin/KMP で書かれ、R8 で強く難読化されています。このスキルは、R8 が除去できないメタデータから 元の Kotlin クラス名 を復元し、Ktor、Apollo (GraphQL)、Koin といったモダンなスタックからも API を抽出します(従来の Retrofit/OkHttp スタックだけではありません)。詳細は下記「Kotlin 名復元 (R8 難読化解除)」を参照してください。
Windows / PowerShell 対応 (実験的): bash スクリプトと共に提供される
*.ps1スクリプトは最近コミュニティから寄稿されたもので、まだ安定化中です。問題が発生した場合は、このリポジトリ(寄稿者の上流フォークではなく)に issue を開いてください。PowerShell スクリプトは @SimoneAvogadro によってここでメンテナンスされています。
必須:
推奨 (任意):
詳細なインストール手順は plugins/android-reverse-engineering/skills/android-reverse-engineering/references/setup-guide.md を参照してください。
Claude Code 内で以下を実行:
/plugin marketplace add SimoneAvogadro/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
このスキルは今後のすべてのセッションで永続的に利用可能になります。
git clone https://github.com/SimoneAvogadro/android-reverse-engineering-skill.git
その後、Claude Code 内で:
/plugin marketplace add /path/to/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
/decompile path/to/app.apk
依存関係チェック、逆コンパイル、初期構造分析を含む完全なワークフローを実行します。
以下のようなフレーズでスキルが起動します:
スクリプトは単独でも使用できます:
# 依存関係チェック
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/check-deps.sh
# 不足している依存関係をインストール(OS とパッケージマネージャーを自動検出)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/install-dep.sh jadx
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/install-dep.sh vineflower
# 逆コンパイル前に APK/XAPK をフィンガープリント (Phase 0 トリアージ):
# フレームワーク、HTTP スタック、難読化レベル、ネイティブライブラリ、注目すべき SDK
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/fingerprint.sh app.apk
# jadx で APK を逆コンパイル(デフォルト)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app.apk
# XAPK を逆コンパイル(自動で各 APK を抽出・逆コンパイル)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app-bundle.xapk
# Fernflower で逆コンパイル
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine fernflower library.jar
# 両方のエンジンを実行して比較
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine both --deobf app.apk
# API 呼び出しを検索 — デフォルトではサポートされているすべてのスタックをフルスキャン
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --retrofit
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --urls
# モダンな Kotlin/KMP スタックと難読化耐性抽出
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --ktor # Ktor クライアント
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --apollo # Apollo / GraphQL
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --paths # R8 インライン化を生き延びる引用符付きパスリテラル
実際の Kotlin/KMP アプリのほとんどは R8 を通して出荷されるため、逆コンパイルされたクラスは a.b.c のような名前になります。R8 は JVM シンボルをリネームしますが、Kotlin メタデータ文字列は除去できません — Kotlin ランタイム(リフレクション、コルーチン)は実行時に元の完全修飾名を必要とします。このスキルは、@DebugMetadata / @Metadata アノテーションをマイニングして 難読化後→本来の クラス名マップを再構築します。典型的なアプリでは、本来読みたい *Repository / *ViewModel / *UseCase / *Impl クラスの約 100% を復元します。
# 1. 逆コンパイルされたソースからマッピングを構築
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/recover-kotlin-names.sh output/sources/ output/names/
# → output/names/mapping.tsv, mapping.json, by_package/
# 2. クエリ: 難読化名を解決、本来の名前で検索、または各ヒットに復元されたクラス名を注釈してソースを grep
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/lookup-name.sh output/names/ LoginRepository
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/lookup-name.sh output/names/ -o a.b.c
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/lookup-name.sh output/names/ --grep 'login' output/sources/
android-reverse-engineering-skill/
├── .claude-plugin/
│ └── marketplace.json # マーケットプレイスカタログ
├── plugins/
│ └── android-reverse-engineering/
│ ├── .claude-plugin/
│ │ └── plugin.json # プラグインマニフェスト
│ ├── skills/
│ │ └── android-reverse-engineering/
│ │ ├── SKILL.md # コアワークフロー (Phase 0–5)
│ │ ├── references/
│ │ │ ├── setup-guide.md
│ │ │ ├── jadx-usage.md
│ │ │ ├── fernflower-usage.md
│ │ │ ├── api-extraction-patterns.md
│ │ │ ├── kotlin-name-recovery.md
│ │ │ ├── third_party_hosts.txt # ファーストパーティ/サードパーティの振り分け用拒否リスト
│ │ │ └── call-flow-analysis.md
│ │ └── scripts/
│ │ ├── check-deps.sh # Bash
│ │ ├── check-deps.ps1 # PowerShell
│ │ ├── install-dep.sh
│ │ ├── install-dep.ps1
│ │ ├── decompile.sh
│ │ ├── decompile.ps1
│ │ ├── fingerprint.sh # Phase 0 — 逆コンパイル前のトリアージ
│ │ ├── recover-kotlin-names.sh # R8 → 本来の Kotlin クラス名
│ │ ├── lookup-name.sh # 復元された名前マップをクエリ
│ │ ├── find-api-calls.sh
│ │ └── find-api-calls.ps1
│ └── commands/
│ └── decompile.md # /decompile スラッシュコマンド
├── LICENSE
└── README.md
このスキルの形成に貢献してくださった方々に感謝します:
recover-kotlin-names.sh、lookup-name.sh)、および Ktor / Apollo / Koin / HMAC 抽出パターン (#16)check-deps.ps1、install-dep.ps1、decompile.ps1、find-api-calls.ps1)、および decompile.sh における分割/バンドル APK 検出 (#8)ThexXTURBOXx/dex2jar フォークへの移行 (#12)SKILL.md 発見キーワード)(#4)このプラグインは合法的な目的にのみ提供されます。これには以下が含まれますが、これらに限定されません:
お客様は単独で、このツールの使用がすべての適用される法律、規制、およびサービス利用規約に準拠していることを確認する責任を負います。お客様が所有していない、または分析する許可を得ていないソフトウェアの無許可のリバースエンジニアリングは、お客様の管轄区域における知的財産法やコンピュータ詐欺法に違反する可能性があります。
著作者は、このツールの誤用に対する一切の責任を否認します。
Apache 2.0 — LICENSE を参照
| 機能 | 説明 |
|---|
| まずフィンガープリント (Phase 0) | 数秒で APK/XAPK をトリアージ — フルデコンパイルの前に、フレームワーク(Flutter / React Native / Cordova / Xamarin / ネイティブ Kotlin)、HTTP スタック、難読化レベル、ネイティブライブラリを検出 |
| 逆コンパイル | jadx および Fernflower/Vineflower を使用して APK、XAPK、JAR、AAR ファイルを逆コンパイル(単一エンジンまたはサイドバイサイド比較) |
| Kotlin 名を復元 | R8 が除去できない Kotlin メタデータを使用して、R8 難読化バイナリから元の *Repository / *ViewModel / *UseCase クラス名を再構築 |
| API を抽出 | Retrofit、OkHttp、Volley およびモダンな Kotlin/KMP スタック: Ktor、Apollo (GraphQL)、Koin DI — エンドポイント、ハードコードされた URL、認証ヘッダー、トークン、HMAC リクエスト署名スキーム |
| 呼び出しフローを追跡 | Activity/Fragment から ViewModel、リポジトリを経て HTTP 呼び出しまで |
| 構造を分析 | マニフェスト、パッケージ、アーキテクチャパターン |
| 難読化への対応 | R8 耐性のあるパス/URL 抽出に加え、ProGuard/R8 出力をナビゲートする戦略 |