
Uma ferramenta para automatizar o processo tedioso de reconhecimento de APK.
Uma ferramenta para automatizar o processo de reconhecimento em um arquivo APK.
O Slicer aceita um caminho para um diretório de APK extraído e retorna todas as activities, receivers e services que estão exportados e possuem permissões null e podem ser provocados externamente.
Nota: O APK deve ser extraído via jadx ou apktool.
Por quê?
Comecei com bug bounty há cerca de 3 semanas (em junho de 2020) e tenho me esforçado ao máximo em aplicativos Android. Mas notei uma coisa: em todos os aplicativos, havia certas tarefas que eu precisava fazer antes de mergulhar fundo. Então pensei que seria legal automatizar esse processo com uma ferramenta simples.
Por que não o drozer?
Bem, o drozer é uma fera diferente. Embora ele encontre todos os componentes acessíveis, eu estava cansado de executar aqueles comandos repetidamente.
Por que não automatizar usando o drozer?
Na verdade, escrevi um script bash para executar alguns comandos do drozer, assim não precisaria executá-los manualmente, mas ainda havia algumas tarefas chatas que precisavam ser feitas. Como verificar o strings.xml em busca de várias chaves de API, testar se o banco de dados Firebase era publicamente acessível ou se essas chaves de API do Google possuíam algum limite de uso ou algo do tipo, e muitas outras coisas.
Por que não pesquisar em todos os arquivos?
Acho que uma ferramenta como grep ou ripgrep seria muito mais rápida para pesquisar em todos os arquivos. Portanto, se houver algo específico que você queira pesquisar, é melhor usar essas ferramentas. Mas se você achar que há algo que deveria ser verificado em todos os arquivos Android, sinta-se à vontade para abrir uma issue.
Verificar se o APK definiu android:allowbackup como true
Verificar se o APK definiu android:debuggable como true.
Retornar todas as activities, services e broadcast receivers que estão exportados e possuem permissão nula. Isso é decidido com base em duas coisas:
android:exporte=true está presente em algum componente e não possui permissão definida.Intent-filter está definido para aquele componente; se sim, isso significa que o componente é exportado por padrão (esta é a regra fornecida na documentação do Android).Verificar a URL do Firebase do APK, testando-a pelo truque do .json.
myapp.firebaseio.com, então ele verificará se https://myapp.firebaseio.com/.json retorna algo ou dá permissão negada.Verificar se as chaves de API do Google são publicamente acessíveis ou não.
git clone https://github.com/mzfr/slicer
cd slicerpython3 slicer.py -hÉ muito simples de usar. As seguintes opções estão disponíveis:
Extrair informações do Manifest e strings de um APK
Uso:
slicer [OPÇÃO] [Diretório do APK extraído]
Opções:
-d, --dir caminho para o diretório de saída do jadx
-o, --output Nome do arquivo de saída (não implementado)
Ainda não implementei a flag output porque acho que, se você redirecionar a saída do slicer para um arquivo yaml, terá um formato adequado.
python3 slicer.py -d caminho/para/o/apk/extraido -c config.json
O módulo extrator usado para extrair URLs e caminhos foi retirado do apkurlgrep por @ndelphit
Todas as funcionalidades implementadas aqui são coisas que aprendi nas últimas semanas. Se você acha que há várias outras coisas que deveriam ser verificadas em um APK, por favor, abra uma issue para essa funcionalidade e ficarei feliz em implementá-la :)
Se quiser, pode me comprar um café:
Retornar outras chaves de API presentes em strings.xml e em AndroidManifest.xml
Listar todos os nomes de arquivos presentes nos diretórios /res/raw e res/xml.
Extrair todas as URLs e caminhos.