Saltearse al contenido

Frida y análisis dinámico

Frida es la herramienta central del pentest móvil dinámico: un toolkit de instrumentación que inyecta JavaScript en el proceso de una app en ejecución, permitiéndote interceptar y modificar llamadas a funciones, leer y cambiar variables en memoria, saltarte comprobaciones (root/jailbreak detection, SSL pinning) y entender qué hace la app por dentro en tiempo real. Es lo que convierte “leer el código” en “controlar la app mientras corre”.

- Hooking: interceptar cualquier función (nativa, Java, Objective-C/Swift) antes/después de ejecutarse
- Leer/modificar argumentos, valores de retorno y variables en memoria
- Llamar a funciones internas de la app desde fuera
- Saltar comprobaciones: root/jailbreak detection, SSL pinning, anti-debugging
- Volcar secretos, claves de cifrado, datos descifrados en memoria
# en el equipo
pip install frida-tools
# en el dispositivo
# Android (root): frida-server que coincida con la versión; ejecutarlo
adb push frida-server /data/local/tmp/ ; adb shell "/data/local/tmp/frida-server &"
# iOS (jailbreak): instalar Frida desde Cydia/Sileo
# listar procesos/apps
frida-ps -U # procesos del dispositivo (USB)
frida-ps -Ua # apps instaladas

Objection envuelve Frida con comandos listos para las tareas más comunes:

objection -g com.target.app explore
# dentro:
android hooking list classes # listar clases
android hooking watch class com.target.Crypto # observar una clase
android sslpinning disable # saltar SSL pinning
android root disable # saltar root detection
android keystore list ; ios keychain dump # secretos
memory search / dump # buscar en memoria

Objection es el punto de partida; para lógica específica se escriben scripts Frida.

# Android (Java): hookear un método y ver/cambiar su comportamiento
Java.perform(function() {
var Login = Java.use("com.target.LoginManager");
Login.checkPassword.implementation = function(pw) {
console.log("password introducida: " + pw); // interceptar
return true; // forzar login OK
};
});
# iOS (Objective-C): hookear un método
Interceptor.attach(ObjC.classes.LoginManager["- isValid:"].implementation, {
onEnter: function(args) { ... },
onLeave: function(ret) { ret.replace(0x1); } // forzar true
});
# ejecutar el script
frida -U -f com.target.app -l script.js --no-pause
# saltar protecciones cliente (que NUNCA deben ser la única seguridad)
- bypass de SSL pinning (ver mob-ssl)
- bypass de root/jailbreak detection
- bypass de biometría / PIN local
# extraer secretos en runtime
- claves de cifrado, datos descifrados, tokens en memoria
# entender/forzar lógica
- cambiar valores de retorno (isPremium -> true), saltar validaciones
# descubrir el flujo interno y alimentar el ataque al backend

Algunas apps detectan Frida (puertos, nombres de hilos, frida-gadget) o usan anti-debugging. Se puede evadir (scripts anti-anti-Frida, renombrar frida-server, gadget), pero recuerda: estas protecciones elevan el coste, no sustituyen la seguridad del backend.

  • No confiar en comprobaciones del cliente (pinning, root/jailbreak, biometría local): un atacante con Frida las salta. La seguridad real está en el backend.
  • RESILIENCE (MASVS): detección de instrumentación/Frida, anti-debugging, integridad del código, ofuscación — como capas que encarecen, no como barrera absoluta.
  • Datos sensibles mínimos en memoria/cliente; cifrado con claves no extraíbles (hardware-backed keystore/Secure Enclave).
  • Asumir que el dispositivo puede estar comprometido: validar y autorizar siempre en el servidor.
  • frida-server/gadget funcionando y app detectada (frida-ps)
  • Objection: explorar, listar clases, hooks básicos
  • Bypass de SSL pinning (SSL pinning y bypass) y root/jailbreak detection
  • Hooks a medida: interceptar argumentos/retornos clave
  • Extraer secretos/claves/datos descifrados en memoria
  • Forzar lógica (isPremium, validaciones, login)
  • Evadir anti-Frida si la app lo implementa
  • Usar lo aprendido para atacar el backend (sección Web)