Una aplicación CLI que prepara automáticamente archivos APK de Android para la inspección HTTPS
Inspeccionar el tráfico HTTPS de una aplicación móvil mediante un proxy es probablemente la forma más sencilla de descubrir cómo funciona. Sin embargo, con la configuración de seguridad de red introducida en Android 7 y los desarrolladores de aplicaciones que intentan evitar ataques MITM mediante la fijación de certificados, 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 darle un archivo APK y apk-mitm
:
También puedes usar apk-mitm
para parchear aplicaciones usando Android App Bundle y no es necesario rootear tu teléfono.
Modificar el comportamiento normal de una aplicación para evitar características de seguridad como la fijación de certificados requiere modificar el código fuente de la aplicación antes de ejecutarla o "enganchar" la aplicación mientras se está ejecutando para interceptar llamadas a funciones.
Actualmente, apk-mitm
está adoptando el enfoque anterior de modificar el código de la aplicación "desensamblando" primero la aplicación usando Apktool, realizando cambios en varios archivos y luego volviéndola a ensamblar (nuevamente usando 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 diseñadas para ser desensambladas. Apktool intenta lograrlo de todos modos pero, especialmente con aplicaciones grandes y complejas, a menudo tiene problemas.
Otro problema con este enfoque es que algunos métodos de fijación de certificados, como las comprobaciones realizadas dentro de binarios nativos (como es el caso de marcos como Flutter), son muy difíciles o imposibles de eludir. Por este motivo, puede resultar beneficioso probar otros enfoques para aplicaciones más complicadas.
Específicamente, me gustaría resaltar el proyecto android-unpinner
de mitmproxy y los scripts subyacentes frida-interception-and-unpinning
mediante HTTP Toolkit. Su enfoque aplica parches en tiempo de ejecución usando Frida, que 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 tiene una versión actualizada de Node.js (14+) y Java (8+), puede instalar apk-mitm
ejecutando:
npm install -g apk-mitm
Una vez instalada, puede ejecutar este comando para parchear una aplicación:
apk-mitm < path-to-apk >
Parchear un archivo APK llamado example.apk
podría verse así:
$ 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
Ahora puede instalar el archivo example-patched.apk
en su dispositivo Android y usar un proxy como Charles o mitmproxy para observar el tráfico de la aplicación.
También puede parchear aplicaciones usando Android App Bundle con apk-mitm
proporcionándole un archivo *.xapk
(por ejemplo, de APKPure) o un archivo *.apks
(que puede exportar usted mismo usando SAI). Si está haciendo esto en Linux, asegúrese de que tanto zip
como unzip
estén instalados.
A veces necesitarás realizar cambios manuales en una aplicación para que funcione. En estos casos, la opción --wait
es lo que necesita. Habilitarlo hará que apk-mitm
espere antes de volver a codificar la aplicación, lo que le permitirá realizar cambios en los archivos en el directorio temporal.
Si desea experimentar con diferentes cambios en un APK, entonces usar --wait
probablemente no sea la opción más conveniente, ya que lo obliga a comenzar desde cero cada vez que lo usa. En este caso, es posible que desees echar un vistazo a APKLab. Es un banco de trabajo de ingeniería inversa de Android construido sobre VS Code que viene con soporte apk-mitm
y debería permitirle iterar mucho más rápidamente.
En algunos dispositivos (como televisores Android) 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 Configuración de seguridad de red de la aplicación, ya que funcionará en cualquier dispositivo. Puede lograr esto ejecutando apk-mitm
con el indicador --certificate
configurado en la ruta del certificado (archivo .pem
o .der
) utilizado por su proxy.
Si la aplicación utiliza Google Maps y el mapa no funciona después del parche, entonces la clave API de la aplicación probablemente 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. Consulte sus problemas en GitHub para encontrar posibles soluciones. Si encuentra una versión de Apktool que no se ve afectada por el problema, puede indicarle apk-mitm
que la use especificando la ruta de su archivo JAR a través de la opción --apktool
.
MIT © Niklas Higi