
Dekompiliert Android-APK/XAPK/JAR/AAR-Dateien und extrahiert HTTP-APIs, Authentifizierungsmuster und Aufrufabläufe mithilfe von jadx, mit R8-resistenter Kotlin-Namenswiederherstellung für Sicherheitsforschung und Penetrationstests.
Eine Claude Code Skill, die Android APK/XAPK/JAR/AAR-Dateien dekompiliert und die von der App verwendeten HTTP-APIs extrahiert — Retrofit-Endpunkte, OkHttp-Aufrufe, hartcodierte URLs, Authentifizierungsmuster — damit du sie dokumentieren und reproduzieren kannst, ohne den ursprünglichen Quellcode zu haben.
Erstklassige Kotlin-Unterstützung: Moderne Android-Apps sind Kotlin/KMP und stark mit R8 obfuskiert. Diese Skill rekonstruiert die ursprünglichen Kotlin-Klassennamen aus Metadaten, die R8 nicht entfernen kann, und extrahiert APIs aus Ktor, Apollo (GraphQL) und Koin — nicht nur aus dem klassischen Retrofit/OkHttp-Stack. Siehe Kotlin name recovery unten.
Windows / PowerShell-Unterstützung (experimentell): Die
*.ps1-Skripte neben den Bash-Varianten sind ein kürzlicher Community-Beitrag und werden noch stabilisiert. Bei Problemen öffne bitte ein Issue in diesem Repository (nicht in den Upstream-Forks der Beitragenden): Die PowerShell-Skripte werden hier von @SimoneAvogadro gepflegt.
| Fähigkeit | Beschreibung |
|---|---|
| Fingerprint zuerst (Phase 0) | Triage einer APK/XAPK in Sekunden — erkennt das Framework (Flutter / React Native / Cordova / Xamarin / native-Kotlin), den HTTP-Stack, den Obfuskationsgrad und native Libs, bevor Zeit in eine vollständige Dekompilierung investiert wird |
| Dekompilieren | APK-, XAPK-, JAR- und AAR-Dateien mit jadx und Fernflower/Vineflower (einzelne Engine oder Side-by-Side-Vergleich) |
| Kotlin-Namen wiederherstellen | Rekonstruiert ursprüngliche *Repository / *ViewModel / *UseCase-Klassennamen aus R8-obfuskierten Binärdateien mithilfe von Kotlin-Metadaten, die R8 nicht entfernen kann |
| APIs extrahieren | Retrofit, OkHttp, Volley und moderne Kotlin/KMP-Stacks: Ktor, Apollo (GraphQL), Koin DI — Endpunkte, hartcodierte URLs, Auth-Header, Tokens und HMAC-Request-Signaturverfahren |
| Aufrufabläufe verfolgen | Von Activities/Fragments über ViewModels und Repositories bis hin zu HTTP-Aufrufen |
| Struktur analysieren | Manifest, Pakete, Architekturmuster |
| Obfuskation behandeln | R8-resistente Pfad-/URL-Extraktion sowie Strategien zur Navigation durch ProGuard/R8-Ausgaben |
Erforderlich:
Optional (empfohlen):
Detaillierte Installationsanweisungen findest du in plugins/android-reverse-engineering/skills/android-reverse-engineering/references/setup-guide.md.
Führe in Claude Code aus:
/plugin marketplace add SimoneAvogadro/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
Die Skill ist dauerhaft in allen zukünftigen Sitzungen verfügbar.
git clone https://github.com/SimoneAvogadro/android-reverse-engineering-skill.git
Dann in 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
Dies führt den vollständigen Workflow aus: Abhängigkeitsprüfung, Dekompilierung und initiale Strukturanalyse.
Die Skill wird durch Formulierungen wie die folgenden aktiviert:
Die Skripte können auch eigenständig verwendet werden:
# Check dependencies
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/check-deps.sh
# Install a missing dependency (auto-detects OS and package manager)
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
# Fingerprint an APK/XAPK BEFORE decompiling (Phase 0 triage):
# framework, HTTP stack, obfuscation level, native libs, notable SDKs
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/fingerprint.sh app.apk
# Decompile APK with jadx (default)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app.apk
# Decompile XAPK (auto-extracts and decompiles each APK inside)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app-bundle.xapk
# Decompile with Fernflower
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine fernflower library.jar
# Run both engines and compare
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine both --deobf app.apk
# Find API calls — defaults to a full scan across every supported stack
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
# Modern Kotlin/KMP stacks and obfuscation-resistant extraction
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --ktor # Ktor client
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 # quoted path literals that survive R8 inlining
Die meisten realen Kotlin/KMP-Apps werden durch R8 geschickt, sodass die dekompilierten Klassen als a.b.c herauskommen. R8 benennt die JVM-Symbole um, kann aber die Kotlin-Metadaten-Strings nicht entfernen — die Kotlin-Runtime (Reflection, Coroutines) benötigt die ursprünglichen vollqualifizierten Namen zur Laufzeit. Diese Skill durchsucht diese @DebugMetadata / @Metadata-Annotationen, um eine obfuscated → real-Klassennamen-Zuordnung zu rekonstruieren. Bei einer typischen App werden etwa 100 % der *Repository / *ViewModel / *UseCase / *Impl-Klassen wiederhergestellt, die man tatsächlich lesen möchte.