
🤖 Uma aplicação CLI que prepara automaticamente arquivos APK Android para inspeção HTTPS
Uma aplicação CLI que prepara automaticamente ficheiros APK Android para inspeção HTTPS
Inspecionar o tráfego HTTPS de uma aplicação móvel usando um proxy é provavelmente a forma mais fácil de perceber como funciona. No entanto, com a Network Security Configuration introduzida no Android 7 e com os programadores de aplicações a tentar prevenir ataques MITM usando certificate pinning, tornar uma aplicação compatível com um proxy HTTPS tornou-se bastante tedioso.
O apk-mitm automatiza todo o processo. Tudo o que tens de fazer é fornecer um ficheiro APK e o apk-mitm vai:
Também podes usar o apk-mitm para modificar aplicações usando Android App Bundle e não é necessário ter o telefone com root.
Modificar o comportamento normal de uma aplicação para contornar funcionalidades de segurança como o certificate pinning requer ou modificar o código fonte da aplicação antes de a executar ou "enganchar" (hooking) a aplicação enquanto está a ser executada para intercetar chamadas de funções.
O apk-mitm atualmente adota a primeira abordagem de modificar o código da aplicação, primeiro "desassemblando" a aplicação usando Apktool, fazendo alterações a vários ficheiros e depois montando-a novamente (usando novamente o Apktool).
Esta abordagem tem a vantagem de não necessitar de um dispositivo com root, mas também tem várias desvantagens. O maior problema é que as aplicações não foram realmente feitas para serem desassembladas. O Apktool tenta fazer isso de qualquer forma, mas, especialmente com aplicações grandes e complexas, encontra frequentemente problemas.
Outro problema com esta abordagem é que alguns métodos de certificate pinning, como verificações realizadas dentro de binários nativos (como é o caso de frameworks como Flutter), são muito difíceis ou impossíveis de contornar. Por este motivo, pode ser benéfico experimentar outras abordagens para aplicações mais complicadas.
Especificamente, gostaria de destacar o projeto android-unpinner do mitmproxy e os scripts frida-interception-and-unpinning subjacentes da HTTP Toolkit. A abordagem deles aplica correções em tempo de execução usando Frida, o que é muito mais poderoso, mas também significa que ou não pode ser usado ou é mais difícil de usar sem um dispositivo com root.
Se tiveres uma versão atualizada do Node.js (14+) e Java (8+), podes instalar o apk-mitm executando:
npm install -g apk-mitm
Depois de instalado, podes executar este comando para modificar uma aplicação:
apk-mitm <caminho-para-apk>
Modificar um ficheiro APK chamado example.apk pode ser assim:
$ apk-mitm example.apk
✔ A descodificar ficheiro APK
✔ A modificar manifesto da aplicação
✔ A substituir configuração de segurança de rede
✔ A desativar certificate pinning
✔ A codificar ficheiro APK modificado
✔ A assinar ficheiro APK modificado
Concluído! APK modificado: ./example-patched.apk
Agora podes instalar o ficheiro example-patched.apk no teu dispositivo Android e usar um proxy como Charles ou mitmproxy para ver o tráfego da aplicação.
Também podes modificar aplicações usando Android App Bundle com o apk-mitm fornecendo-lhe um ficheiro *.xapk (por exemplo do APKPure) ou um ficheiro *.apks (que podes exportar tu próprio usando SAI). Se estiveres a fazer isto no Linux, certifica-te de que tanto o zip como o unzip estão instalados.
Por vezes precisarás de fazer alterações manuais a uma aplicação para a fazer funcionar. Nestes casos, a opção --wait é o que precisas. Ativá-la fará com que o apk-mitm espere antes de recodificar a aplicação, permitindo-te fazer alterações aos ficheiros no diretório temporário.
Se quiseres experimentar diferentes alterações a um APK, usar --wait provavelmente não é a opção mais conveniente, pois força-te a começar do zero sempre que a usas. Neste caso, podes querer dar uma olhada no APKLab. É uma bancada de trabalho de engenharia reversa Android construída sobre o VS Code que vem com suporte para apk-mitm e deve permitir-te iterar muito mais rapidamente.
Em alguns dispositivos (como Android TVs) podes não conseguir adicionar um novo certificado aos certificados de raiz do sistema. Nesses casos, ainda podes adicionar o certificado do teu proxy diretamente à Network Security Config da aplicação, pois isso funcionará em qualquer dispositivo. Podes fazer isso executando o apk-mitm com a opção --certificate definida para o caminho do certificado (ficheiro .pem ou .der) usado pelo teu proxy.
Se a aplicação usa o Google Maps e o mapa estiver quebrado após a modificação, então a chave de API da aplicação está provavelmente restrita ao certificado do programador. Terás de criar a tua própria chave de API sem restrições e executar o apk-mitm com a opção --wait para conseguir substituir o valor com.google.android.geo.API_KEY no ficheiro AndroidManifest.xml da aplicação.
Se o apk-mitm falhar durante a descodificação ou codificação, o problema está provavelmente relacionado com o Apktool. Verifica os problemas deles no GitHub para encontrar possíveis soluções alternativas. Se encontrares uma versão do Apktool que não seja afetada pelo problema, podes instruir o apk-mitm a usá-la especificando o caminho do seu ficheiro JAR através da opção --apktool.
MIT © Niklas Higi