
Decompila file APK/XAPK/JAR/AAR Android ed estrae API HTTP, pattern di autenticazione e flussi di chiamata utilizzando jadx, con recupero dei nomi Kotlin resistenti a R8 per ricerca sulla sicurezza e penetration testing.
Una skill per Claude Code che decompila file APK/XAPK/JAR/AAR di Android ed estrae le API HTTP utilizzate dall'app — endpoint Retrofit, chiamate OkHttp, URL hardcoded, pattern di autenticazione — così puoi documentarle e riprodurle senza il codice sorgente originale.
Supporto Kotlin di prima classe: le app Android moderne sono Kotlin/KMP, pesantemente offuscate con R8. Questa skill recupera i nomi originali delle classi Kotlin dai metadati che R8 non può rimuovere, ed estrae le API da Ktor, Apollo (GraphQL) e Koin — non solo dal classico stack Retrofit/OkHttp. Vedi Recupero dei nomi Kotlin di seguito.
Supporto Windows / PowerShell (sperimentale): gli script
*.ps1affiancati a quelli bash sono un recente contributo della community, ancora in fase di stabilizzazione. Per qualsiasi problema, apri una issue su questo repository (non sui fork upstream dei contributori): gli script PowerShell sono mantenuti qui da @SimoneAvogadro.
| Funzionalità | Descrizione |
|---|---|
| Fingerprint first (Fase 0) | Analizza un APK/XAPK in pochi secondi — rileva il framework (Flutter / React Native / Cordova / Xamarin / native-Kotlin), lo stack HTTP, il livello di offuscamento e le librerie native prima di dedicare tempo a una decompilazione completa |
| Decompila | File APK, XAPK, JAR e AAR usando jadx e Fernflower/Vineflower (motore singolo o confronto affiancato) |
| Recupera i nomi Kotlin | Ricostruisce i nomi originali delle classi *Repository / *ViewModel / *UseCase da binari offuscati con R8 usando i metadati Kotlin che R8 non può rimuovere |
| Estrae le API | Retrofit, OkHttp, Volley e stack moderni Kotlin/KMP: Ktor, Apollo (GraphQL), Koin DI — endpoint, URL hardcoded, header di autenticazione, token e schemi di firma delle richieste HMAC |
| Traccia i flussi di chiamata | Da Activities/Fragments attraverso ViewModels e repository fino alle chiamate HTTP |
| Analizza la struttura | Manifest, package, pattern architetturali |
| Gestisce l'offuscamento | Estrazione di path/URL resistente a R8 e strategie per navigare l'output di ProGuard/R8 |
Obbligatori:
Opzionali (consigliati):
Vedi plugins/android-reverse-engineering/skills/android-reverse-engineering/references/setup-guide.md per istruzioni dettagliate sull'installazione.
All'interno di Claude Code, esegui:
/plugin marketplace add SimoneAvogadro/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
La skill sarà disponibile in modo permanente in tutte le sessioni future.
git clone https://github.com/SimoneAvogadro/android-reverse-engineering-skill.git
Poi 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
Questo esegue il flusso di lavoro completo: verifica delle dipendenze, decompilazione e analisi iniziale della struttura.
La skill si attiva con frasi come:
Gli script possono anche essere usati in modo autonomo:
# 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
La maggior parte delle app Kotlin/KMP reali viene distribuita attraverso R8, quindi le classi decompilate risultano come a.b.c. R8 rinomina i simboli JVM ma non può rimuovere le stringhe dei metadati Kotlin — il runtime Kotlin (reflection, coroutine) necessita dei nomi completi originali a runtime. Questa skill estrae quelle annotazioni @DebugMetadata / @Metadata per ricostruire una mappa offuscato → reale dei nomi delle classi. Su un'app tipica recupera circa il 100% delle classi *Repository / *ViewModel / *UseCase / *Impl che vuoi effettivamente leggere.
# 1. Build the mapping from the decompiled sources
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/