
🤖 Una aplicación CLI que prepara automáticamente archivos APK de Android para inspección HTTPS.
Una aplicación CLI que prepara automáticamente archivos APK de Android para inspección HTTPS
Inspeccionar el tráfico HTTPS de una aplicación móvil usando un proxy es probablemente la forma más fácil de descubrir cómo funciona. Sin embargo, con la Network Security Configuration introducida en Android 7 y los desarrolladores que intentan prevenir ataques MITM mediante certificate pinning, lograr que una aplicación funcione con un proxy HTTPS se ha vuelto bastante tedioso.
apk-mitm automatiza todo el proceso. Todo lo que tienes que hacer es proporcionarle un archivo APK y apk-mitm:
También puedes usar apk-mitm para modificar aplicaciones usando Android App Bundle y no es necesario rootear tu teléfono.
Modificar el comportamiento normal de una aplicación para evitar funciones de seguridad como el certificate pinning requiere modificar el código fuente de la aplicación antes de ejecutarla o "enganchar" la aplicación mientras se ejecuta para interceptar llamadas a funciones.
Actualmente, apk-mitm adopta el primer enfoque de modificar el código de la aplicación "desensamblando" primero la aplicación con Apktool, realizando cambios en varios archivos y luego volviéndola a ensamblar (nuevamente con Apktool).
Este enfoque tiene la ventaja de que no requiere un dispositivo rooteado, pero también tiene varios inconvenientes. El mayor problema es que las aplicaciones no están realmente diseñadas para ser desensambladas. Apktool intenta lograrlo de todos modos, pero especialmente con aplicaciones grandes y complejas, a menudo surgen problemas.
Otro problema con este enfoque es que algunos métodos de certificate pinning, como las comprobaciones realizadas dentro de binarios nativos (como es el caso de frameworks como Flutter), son muy difíciles o imposibles de eludir. Por esta razón, puede ser beneficioso probar otros enfoques para aplicaciones más complicadas.
Específicamente, me gustaría destacar el proyecto android-unpinner de mitmproxy y los scripts subyacentes frida-interception-and-unpinning de HTTP Toolkit. Su enfoque aplica parches en tiempo de ejecución usando Frida, lo cual es mucho más potente pero también significa que no se puede usar o es más difícil de usar sin un dispositivo rooteado.
Si tienes una versión actualizada de Node.js (14+) y Java (8+), puedes instalar apk-mitm ejecutando:
npm install -g apk-mitm
Una vez instalado, puedes ejecutar este comando para modificar una aplicación:
apk-mitm <ruta-al-apk>
Modificar un archivo APK llamado example.apk podría verse así:
$ apk-mitm example.apk
✔ Decodificando archivo APK
✔ Modificando manifiesto de la aplicación
✔ Reemplazando configuración de seguridad de red
✔ Deshabilitando certificate pinning
✔ Codificando archivo APK modificado
✔ Firmando archivo APK modificado
¡Hecho! APK modificado: ./example-patched.apk
Ahora puedes instalar el archivo example-patched.apk en tu dispositivo Android y usar un proxy como Charles o mitmproxy para inspeccionar el tráfico de la aplicación.
También puedes modificar aplicaciones usando Android App Bundle con apk-mitm proporcionándole un archivo *.xapk (por ejemplo de APKPure) o un archivo *.apks (que puedes exportar tú mismo usando SAI). Si haces esto en Linux, asegúrate de que tanto zip como unzip estén instalados.
A veces necesitarás hacer cambios manuales en una aplicación para que funcione. En estos casos, la opción --wait es lo que necesitas. Activarla hará que apk-mitm espere antes de volver a codificar la aplicación, permitiéndote realizar cambios en los archivos del directorio temporal.
Si quieres experimentar con diferentes cambios en un APK, usar --wait probablemente no sea la opción más conveniente, ya que te obliga a empezar desde cero cada vez que lo usas. En este caso, quizás quieras echar un vistazo a APKLab. Es un entorno de trabajo de ingeniería inversa para Android construido sobre VS Code que incluye soporte para apk-mitm y debería permitirte iterar mucho más rápido.
En algunos dispositivos (como Android TV) es posible que no puedas agregar un nuevo certificado a los certificados raíz del sistema. En esos casos, aún puedes agregar el certificado de tu proxy directamente a la Network Security Config de la aplicación, ya que eso funcionará en cualquier dispositivo. Puedes lograr esto ejecutando apk-mitm con la opción --certificate establecida en la ruta del certificado (archivo .pem o .der) utilizado por tu proxy.
Si la aplicación usa Google Maps y el mapa se rompe después de la modificación, es probable que la clave API de la aplicación esté restringida al certificado del desarrollador. Tendrás que crear tu propia clave API sin restricciones y ejecutar apk-mitm con la opción --wait para poder reemplazar el valor com.google.android.geo.API_KEY en el archivo AndroidManifest.xml de la aplicación.
Si apk-mitm falla durante la decodificación o codificación, el problema probablemente esté relacionado con Apktool. Revisa sus problemas en GitHub para encontrar posibles soluciones. Si encuentras una versión de Apktool que no esté afectada por el problema, puedes indicarle a apk-mitm que la use especificando la ruta de su archivo JAR a través de la opción --apktool.
MIT © Niklas Higi