
Descompila arquivos Android APK/XAPK/JAR/AAR e extrai APIs HTTP, padrões de autenticação e fluxos de chamada usando jadx, com recuperação de nomes Kotlin resistente a R8 para pesquisa de segurança e testes de penetração.
Uma habilidade do Claude Code que descompila arquivos APK/XAPK/JAR/AAR do Android e extrai as APIs HTTP usadas pelo aplicativo — endpoints Retrofit, chamadas OkHttp, URLs codificadas, padrões de autenticação — para que você possa documentá-las e reproduzi-las sem o código-fonte original.
Suporte de primeira classe para Kotlin: aplicativos Android modernos são Kotlin/KMP, fortemente ofuscados com R8. Esta habilidade recupera os nomes originais de classes Kotlin a partir de metadados que o R8 não pode remover, e extrai APIs de Ktor, Apollo (GraphQL) e Koin — não apenas da pilha clássica Retrofit/OkHttp. Veja Recuperação de nomes Kotlin abaixo.
Suporte para Windows / PowerShell (experimental): Os scripts
*.ps1que acompanham os bash são uma contribuição recente da comunidade, ainda em estabilização. Para quaisquer problemas, por favor abra uma issue neste repositório (não nos forks upstream dos contribuidores): os scripts PowerShell são mantidos aqui por @SimoneAvogadro.
| Capacidade | Descrição |
|---|---|
| Impressão digital primeiro (Fase 0) | Triagem de um APK/XAPK em segundos — detecta o framework (Flutter / React Native / Cordova / Xamarin / Kotlin nativo), pilha HTTP, nível de ofuscação e bibliotecas nativas antes de gastar tempo numa descompilação completa |
| Descompilar | Arquivos APK, XAPK, JAR e AAR usando jadx e Fernflower/Vineflower (motor único ou comparação lado a lado) |
| Recuperar nomes Kotlin | Reconstruir nomes de classes originais *Repository / *ViewModel / *UseCase a partir de binários ofuscados por R8 usando metadados Kotlin que o R8 não pode remover |
| Extrair APIs | Retrofit, OkHttp, Volley e pilhas modernas Kotlin/KMP: Ktor, Apollo (GraphQL), Koin DI — endpoints, URLs codificadas, cabeçalhos de autenticação, tokens e esquemas de assinatura de requisição HMAC |
| Rastrear fluxos de chamada | De Activities/Fragments através de ViewModels e repositórios até chamadas HTTP |
| Analisar estrutura | Manifesto, pacotes, padrões de arquitetura |
| Lidar com ofuscação | Extração de caminhos/URLs resistente ao R8, além de estratégias para navegar na saída do ProGuard/R8 |
Obrigatório:
Opcional (recomendado):
Consulte plugins/android-reverse-engineering/skills/android-reverse-engineering/references/setup-guide.md para instruções detalhadas de instalação.
Dentro do Claude Code, execute:
/plugin marketplace add SimoneAvogadro/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
A habilidade estará permanentemente disponível em todas as sessões futuras.
git clone https://github.com/SimoneAvogadro/android-reverse-engineering-skill.git
Em seguida, no Claude Code:
/plugin marketplace add /caminho/para/android-reverse-engineering-skill
/plugin install android-reverse-engineering@android-reverse-engineering-skill
/decompile caminho/para/app.apk
Isso executa o fluxo de trabalho completo: verificação de dependências, descompilação e análise de estrutura inicial.
A habilidade ativa com frases como:
Os scripts também podem ser usados de forma independente:
# Verificar dependências
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/check-deps.sh
# Instalar uma dependência ausente (detecta automaticamente o SO e gerenciador de pacotes)
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
# Impressão digital de um APK/XAPK ANTES de descompilar (triagem Fase 0):
# framework, pilha HTTP, nível de ofuscação, bibliotecas nativas, SDKs notáveis
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/fingerprint.sh app.apk
# Descompilar APK com jadx (padrão)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app.apk
# Descompilar XAPK (extrai e descompila automaticamente cada APK interno)
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh app-bundle.xapk
# Descompilar com Fernflower
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine fernflower library.jar
# Executar ambos os motores e comparar
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/decompile.sh --engine both --deobf app.apk
# Encontrar chamadas de API — padrão para uma varredura completa em todas as pilhas suportadas
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
# Pilhas modernas Kotlin/KMP e extração resistente a ofuscação
bash plugins/android-reverse-engineering/skills/android-reverse-engineering/scripts/find-api-calls.sh output/sources/ --ktor # Cliente 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 # literais de caminho entre aspas que sobrevivem à inlining do R8
A maioria dos aplicativos Kotlin/KMP do mundo real é distribuída através do R8, então as classes descompiladas aparecem como a.b.c. O R8 renomeia os símbolos JVM, mas não pode remover as strings de metadados Kotlin — o runtime Kotlin (reflexão, corrotinas) precisa dos nomes totalmente qualificados originais em tempo de execução. Esta habilidade extrai essas anotações @DebugMetadata / @Metadata para reconstruir um mapa de nomes de classe ofuscado → real. Em um aplicativo típico, recupera ~100% das classes *Repository / *ViewModel / *UseCase / *Impl que você realmente deseja ler.