Um aplicativo CLI que prepara automaticamente arquivos APK do Android para inspeção HTTPS
Inspecionar o tráfego HTTPS de um aplicativo móvel usando um proxy é provavelmente a maneira mais fácil de descobrir como ele funciona. No entanto, com a configuração de segurança de rede introduzida no Android 7 e os desenvolvedores de aplicativos tentando evitar ataques MITM usando fixação de certificado, fazer com que um aplicativo funcione com um proxy HTTPS tornou-se bastante tedioso.
apk-mitm
automatiza todo o processo. Tudo o que você precisa fazer é fornecer um arquivo APK e apk-mitm
irá:
Você também pode usar apk-mitm
para corrigir aplicativos usando o Android App Bundle e não é necessário fazer root no seu telefone.
Modificar o comportamento regular de um aplicativo para contornar recursos de segurança, como fixação de certificado, requer a modificação do código-fonte do aplicativo antes de executá-lo ou "conectar" o aplicativo enquanto ele está em execução para interceptar chamadas de função.
Atualmente, apk-mitm
está adotando a abordagem anterior de modificar o código do aplicativo, primeiro "desmontando" o aplicativo usando o Apktool, fazendo alterações em vários arquivos e, em seguida, montando-o novamente (novamente usando o Apktool).
Essa abordagem tem a vantagem de não exigir um dispositivo com acesso root, mas também apresenta várias desvantagens. O maior problema é que os aplicativos não foram feitos para serem desmontados. O Apktool tenta fazer isso de qualquer maneira, mas, especialmente com aplicativos grandes e complexos, muitas vezes apresenta problemas.
Outro problema com essa abordagem é que alguns métodos de fixação de certificados, como verificações realizadas em binários nativos (como é o caso de estruturas como Flutter), são muito difíceis ou impossíveis de contornar. Por esse motivo, pode ser benéfico experimentar outras abordagens para aplicativos mais complicados.
Especificamente, gostaria de destacar o projeto android-unpinner
do mitmproxy e os scripts subjacentes frida-interception-and-unpinning
do HTTP Toolkit. A abordagem deles aplica patches em tempo de execução usando o Frida, que é muito mais poderoso, mas também significa que não pode ser usado ou é mais difícil de usar sem um dispositivo com acesso root.
Se você tiver uma versão atualizada do Node.js (14+) e Java (8+), poderá instalar apk-mitm
executando:
npm install -g apk-mitm
Depois de instalado, você pode executar este comando para corrigir um aplicativo:
apk-mitm < path-to-apk >
A correção de um arquivo APK chamado example.apk
pode ser assim:
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done ! Patched APK: ./example-patched.apk
Agora você pode instalar o arquivo example-patched.apk
em seu dispositivo Android e usar um proxy como Charles ou mitmproxy para observar o tráfego do aplicativo.
Você também pode corrigir aplicativos usando o Android App Bundle com apk-mitm
fornecendo-lhe um arquivo *.xapk
(por exemplo, do APKPure) ou um arquivo *.apks
(que você mesmo pode exportar usando SAI). Se você estiver fazendo isso no Linux, certifique-se de que zip
e unzip
estejam instalados.
Às vezes, você precisará fazer alterações manuais em um aplicativo para que ele funcione. Nestes casos, a opção --wait
é o que você precisa. Ativá-lo fará com que apk-mitm
espere antes de recodificar o aplicativo, permitindo que você faça alterações nos arquivos no diretório temporário.
Se você quiser experimentar diferentes alterações em um APK, usar --wait
provavelmente não é a opção mais conveniente, pois força você a começar do zero sempre que usá-lo. Nesse caso, você pode querer dar uma olhada no APKLab. É um ambiente de trabalho de engenharia reversa do Android construído sobre o VS Code que vem com suporte apk-mitm
e deve permitir que você itere muito mais rapidamente.
Em alguns dispositivos (como Android TVs), talvez você não consiga adicionar um novo certificado aos certificados raiz do sistema. Nesses casos, você ainda pode adicionar o certificado do seu proxy diretamente à configuração de segurança de rede do aplicativo, pois funcionará em qualquer dispositivo. Você pode fazer isso executando apk-mitm
com o sinalizador --certificate
definido como o caminho do certificado (arquivo .pem
ou .der
) usado pelo seu proxy.
Se o aplicativo usar o Google Maps e o mapa for corrompido após a correção, a chave de API do aplicativo provavelmente estará restrita ao certificado do desenvolvedor. Você terá que criar sua própria chave de API sem restrições e executar apk-mitm
com a opção --wait
para poder substituir o valor com.google.android.geo.API_KEY
no arquivo AndroidManifest.xml
do aplicativo.
Se apk-mitm
travar durante a decodificação ou codificação, o problema provavelmente está relacionado ao Apktool. Verifique seus problemas no GitHub para encontrar possíveis soluções alternativas. Se acontecer de você encontrar uma versão do Apktool que não seja afetada pelo problema, você pode instruir apk-mitm
a usá-la especificando o caminho de seu arquivo JAR por meio da opção --apktool
.
MIT © Niklas Higi