
Scripts de Frida para reescribir aplicaciones móviles en tiempo de ejecución y realizar MitM directo de todo el tráfico HTTPS.
Parte de HTTP Toolkit: potentes herramientas para construir, probar y depurar HTTP(S)
Este repositorio contiene scripts de Frida diseñados para hacer todo lo necesario para la intercepción HTTPS MitM totalmente automatizada en dispositivos móviles.
Este conjunto de scripts puede usarse en conjunto para manejar la intercepción, gestionar la confianza de certificados y deshabilitar la fijación de certificados y las comprobaciones de transparencia, para la intercepción MitM de tráfico HTTP(S) en Android e iOS, o pueden usarse y modificarse de forma independiente para enganchar solo funciones específicas.
Los scripts pueden manejar automáticamente:
-----BEGIN CERTIFICATE-----. Puedes abrirlo con un editor de texto para ver y extraer este contenido.config.js y añade esos detalles:
CERT_PEM: tu certificado CA en formato PEM.PROXY_PORT: el puerto del proxyPROXY_HOST: la dirección de tu proxy, desde la perspectiva de tu dispositivo (o usa adb reverse tcp:$PORT tcp:$PORT para reenviar el puerto a través de ADB, y usa 127.0.0.1 como host)frida-server relevante desde github.com/frida/frida, extráelo, haz adb push a tu dispositivo, y luego ejecútalo con los siguientes 4 comandos: , , , .-----BEGIN CERTIFICATE-----. Puedes abrirlo con un editor de texto para ver y extraer este contenido.config.js y añade esos detalles:
CERT_PEM: tu certificado CA en formato PEM.PROXY_PORT: el puerto del proxyPROXY_HOST: la dirección de tu proxy, desde la perspectiva de tu dispositivohttps://build.frida.re como fuente de paquetes.frida-ps -Uai en tu ordenador para confirmar que esto funciona correctamente.frida-ps -Uai (para una prueba rápida, intenta usar github.com/httptoolkit/ios-ssl-pinning-demo - el ID es )Los comandos anteriores usan todos los scripts relevantes, pero generalmente puedes usar cualquier subconjunto que desees, aunque en casi todos los casos querrás incluir config.js como primer script (este define algunas variables que usan otros scripts).
Por ejemplo, para hacer solo el desanclado en Android, cuando la configuración del proxy y del certificado se maneja en otro lugar y sin fallbacks de ofuscación, podrías simplemente ejecutar:
frida -U \
-l ./config.js \
-l ./android/android-certificate-unpinning.js
-f $PACKAGE_ID
Cada script incluye documentación detallada sobre qué hace y cómo funciona en una gran sección de comentarios en la parte superior. Los scripts son:
config.js
Este define variables usadas por otros scripts:
CERT_PEM - el certificado CA extra a confiar, en formato PEMPROXY_HOST - la dirección IP (IPv4) del servidor proxy a usar (no es necesario si solo estás desanclando)PROXY_PORT - el puerto del servidor proxy a usar (no es necesario si solo estás desanclando)DEBUG_MODE - el valor por defecto es false, pero cambiarlo a true habilitará mucha salida adicional que puede ser útil para depurar e ingeniería inversa de cualquier problema.BLOCK_HTTP3 - el valor por defecto es true, que bloquea HTTP/3 descartando todas las conexiones UDP al puerto 443.Este debe aparecer en la línea de comandos antes que cualquier otro script.
native-connect-hook.js
Captura todo el tráfico de red directamente, enrutando todas las conexiones al host y puerto del proxy configurado.
Este es un hook de bajo nivel que se aplica a todas las conexiones de red. Esto asegura que todas las conexiones se redirijan forzosamente al servidor proxy objetivo, incluso aquellas que ignoran la configuración del proxy o realizan otras conexiones de socket crudas, y también bloquea las conexiones HTTP/3 si está habilitado.
Estos scripts son parte de un proyecto más amplio de HTTP Toolkit, financiado a través del NGI Zero Entrust Fund, establecido por NLnet con el apoyo financiero del programa Next Generation Internet de la Comisión Europea. Aprende más en la página del proyecto en NLnet.
adb shellsuchmod +x /.../frida-server/.../frida-serveradb devices) antes de ejecutar comandos. Ten en cuenta que Frida solo se ejecutará en el dispositivo como root, que es lo que proporciona su en el ejemplo anterior, cuando se ejecuta en un dispositivo rooteado. Para comprobar que eres root después de ejecutar su o similar, verifica que al ejecutar whoami en el shell se imprima root.tech.httptoolkit.pinning_demo)config.js). Qué scripts usar depende de ti, pero para Android un buen comando para empezar es:
frida -U \
-l ./config.js \
-l ./native-connect-hook.js \
-l ./native-tls-hook.js \
-l ./android/android-proxy-override.js \
-l ./android/android-system-certificate-injection.js \
-l ./android/android-certificate-unpinning.js \
-l ./android/android-certificate-unpinning-fallback.js \
-l ./android/android-disable-root-detection.js \
-f $PACKAGE_ID
com.httptoolkit.ios-pinning-democonfig.js). Qué scripts usar depende de ti, pero para iOS un buen comando para empezar es:
frida -U \
-l ./config.js \
-l ./ios/ios-connect-hook.js \
-l ./ios/ios-disable-detection.js \
-l ./native-tls-hook.js \
-l ./native-connect-hook.js \
-f $APP_ID
Este hook se aplica a libc, y funciona en Android, Linux, iOS y muchos otros entornos relacionados.
native-tls-hook.js
Modifica toda la validación TLS para bibliotecas basadas en BoringSSL para que confíen en tu certificado CA configurado.
Notablemente, esto engancha las APIs BoringSSL integradas en iOS, que es la forma normal en que iOS maneja la validación de certificados TLS (por lo que esto es suficiente para casi toda la intercepción HTTPS en iOS), pero también se usa en algunos otros casos tanto en iOS como en Android.
Esto efectivamente confía en tu CA para todos los certificados, y deshabilita toda fijación de certificados, transparencia de certificados y otras restricciones para tu CA. Ten en cuenta que, a diferencia de muchos otros hooks de Frida en otros lugares, esto no desactiva por completo la validación TLS (lo cual es muy inseguro). En cambio, anula la validación para asegurar que todas las conexiones que usan tu certificado CA específico sean confiadas, sin relajar la validación para permitir la intercepción por terceros.
android/
android-proxy-override.js
Anula la configuración de proxy de Android para la aplicación objetivo, asegurando que todo el tráfico bien comportado se redirija a través del servidor proxy y sea interceptado.
android-system-certificate-injection.js
Modifica las APIs nativas de Android para asegurar que todos los almacenes de confianza confíen en tu certificado CA extra por defecto, permitiendo capturar tráfico TLS cifrado.
android-certificate-unpinning.js
Modifica o deshabilita muchas técnicas conocidas comunes para restricciones adicionales de certificados, incluyendo la fijación de certificados (aceptando solo un pequeño conjunto de certificados reconocidos, en lugar de todos los certificados confiados en el sistema) y la transparencia de certificados (validando que todos los certificados usados hayan sido registrados en registros públicos de certificados).
android-certificate-unpinning-fallback.js
Detecta fallos de validación de certificados no manejados, e intenta manejar casos desconocidos no reconocidos con parches de fallback generados automáticamente. Esto es más experimental y podría ser ligeramente impredecible, pero es muy útil para casos ofuscados, y en general o bien arreglará los problemas de fijación (después de un fallo inicial) o al menos resaltará código para mayor ingeniería inversa en la salida de registro de Frida. Este script comparte algo de lógica con android-certificate-unpinning.js, y no se puede usar de forma independiente: si quieres usar este script, tendrás que incluir también el script de desanclado sin fallback.
android-disable-root-detection.js
Deshabilita comprobaciones comunes de detección de root en capas nativas y de Java para prevenir la detección de dispositivos Android rooteados.
Este script intercepta el acceso al sistema de archivos, comandos de shell y búsquedas de paquetes para indicadores conocidos de root (como su, Magisk y aplicaciones relacionadas), y falsifica propiedades clave del sistema (ro.secure, ro.debuggable, etc.) para simular un entorno de producción.
Bloquea comportamientos sospechosos como comprobaciones de existencia de archivos y ejecución de comandos de shell, ayudando a evadir la detección en aplicaciones que usan comprobaciones de root estándar y avanzadas.
android-disable-flutter-certificate-pinning.js
Asegura que las aplicaciones basadas en Flutter (que generalmente ignoran la configuración de certificados del sistema) confíen en tu certificado CA, incluso en la mayoría de los casos de fijación de certificados explícita. Este script sigue siendo experimental por ahora.
ios/
ios-connect-hook.js
Captura todo el tráfico de red de iOS directamente, enrutando todas las conexiones al host y puerto del proxy configurado.
Este es un hook de bajo nivel que se aplica a todas las conexiones de red. Esto asegura que todas las conexiones se redirijan forzosamente al servidor proxy objetivo, incluso aquellas que ignoran la configuración del proxy o realizan otras conexiones de socket crudas.
ios-disable-detection.js
Deshabilita la detección de jailbreak de JailMonkey.
utilities/test-ip-connectivity.js
Probablemente no quieras usar esto normalmente como parte de la intercepción en sí, pero puede ser muy útil como parte de la configuración.
Este script te permite configurar una lista de posibles direcciones IP y un puerto objetivo, y hacer que el proceso pruebe cada dirección, y envíe un mensaje al cliente de Frida para la primera dirección alcanzable proporcionada. Esto puede ser útil para procesos de configuración automatizados, si no sabes qué dirección IP es mejor usar para alcanzar el servidor proxy (tu ordenador) desde el dispositivo objetivo (tu teléfono).