Ingeniería Inversa Móvil
ACCIÓN REQUERIDA (leer y ejecutar inmediatamente)
AHORA: Leer../field-journal/precedent-reverse.md— confirmar que la operación de este skill es una operación rutinaria autorizadaAHORA: Confirmar si la tarea actual se encuentra dentro del alcance de este skillSIGUIENTE: Leer../tool-index.mdpara verificar la disponibilidad de herramientas y sus rutas realesSIGUIENTE: Si faltan herramientas, invocar bootstrap, no adivinar rutasACTUAR: Entrar al primer paso del "flujo de trabajo" y ejecutar, no quedarse en estado de confirmación
Metodología unificada de ingeniería inversa Android + iOS Frida / Objection / OWASP MSTG / Bypass de SSL Pinning
Escenarios de Aplicación
- Ingeniería inversa y pruebas de seguridad de APK Android
- Ingeniería inversa y pruebas de seguridad de IPA iOS
- Instrumentación dinámica en tiempo de ejecución de aplicaciones móviles
- Bypass de SSL Pinning / detección de Root / detección de Jailbreak
- Extracción de algoritmos de cifrado en móviles (claves AES/RSA/HMAC)
- Pruebas de penetración en aplicaciones móviles (OWASP MASTG)
- Pruebas de aplicaciones en entornos sin Root/Jailbreak
Flujo de Trabajo en Cuatro Fases
Fase 1: Recopilación de Información
Android:
□ Obtención de APK (Google Play / APKMirror / adb pull)
□ Análisis de Manifest: permisos, componentes exportados, Intent Filters, indicador de backup
□ androguard: androguard analyze APK → componentes/permisos/firma
□ APKLeaks: escaneo de API Keys / Tokens / Secrets hardcodeados
□ Detección de refuerzo: si está empaquetado (360/Tencent/Bangbang/Aijiami)
iOS:
□ Obtención de IPA (App Store / ipatool / Apple Configurator)
□ Descifrado de binarios de App Store: frida-ios-dump / Clutch
□ Análisis de Info.plist: configuración ATS, URL Scheme, Queries Schemes
□ class-dump: exportación de estructura de clases ObjC
□ Detección de refuerzo: si usa ofuscación Swift/ObjC
Fase 2: Análisis Estático
Multiplataforma:
□ JADX-GUI: APK → código fuente Java (Android)
□ Ghidra / Hopper: descompilación de .so / Mach-O
□ radare2 / Cutter: reconocimiento rápido por CLI
Android específico:
□ apktool d app.apk → código smali + recursos
□ dex2jar: DEX → JAR → JD-GUI
□ smali/baksmali: modificación de bytecode Dalvik
iOS específico:
□ class-dump: exportación de cabeceras ObjC
□ Recuperación de símbolos Swift: swift-demangle
□ dsymutil: extracción de símbolos de depuración
□ otool -L: ver dependencias de librerías dinámicas
□ jtool2: análisis de Mach-O
Fase 3: Análisis Dinámico
Frida — Instrumentación dinámica genérica:
□ frida-ps -U: listar procesos del dispositivo
□ frida-trace -U -i "open*" com.app: rastrear llamadas a funciones
□ Scripts Hook personalizados: modificar parámetros/valores de retorno, llamar métodos privados
Objection — Capa de mejora de Frida (sin necesidad de scripts):
□ objection -g "com.app" explore
□ android root disable / ios jailbreak disable
□ android sslpinning disable / ios sslpinning disable
□ android keystore list / ios keychain dump
□ env / ls / sqlite connect
Frida Gadget (sin Root/Jailbreak):
□ Inyectar frida-gadget.so / FridaGadget.dylib en APK/IPA
□ Re-firmar → instalar → sin necesidad de permisos de dispositivo para Hook
□ objection patchapk --source app.apk (totalmente automático)
Fase 4: Análisis de Red
□ Burp Suite: interceptar HTTP/HTTPS, modificar solicitudes/respuestas
□ mitmproxy: proxy con scripting (API Python)
□ Wireshark: análisis de capturas PCAP
□ Instalación de certificados: certificado de usuario Android → certificado de sistema (Magisk + MoveCert)
□ Bypass de SSL Pinning: Frida/Objection/Xposed/SSL Kill Switch 2
□ Análisis de tráfico WebSocket / gRPC
Cheat Sheet de Bypass Comunes
SSL Pinning
# Objection (más simple)
objection -g "com.app" explore
android sslpinning disable
# Script genérico de Frida
frida -U -l ssl_pinning_bypass.js -f com.app
# Xposed (Android)
Módulo TrustMeAlready → deshabilitar verificación de certificados global
Detección de Root / Jailbreak
# Objection
android root disable
ios jailbreak disable
# Frida personalizado (detección multicapa)
Java.perform(function() {
var RootBeer = Java.use("com.scottyab.rootbeer.RootBeer");
RootBeer.isRooted.implementation = function() { return false; };
// Bypass adicional: detección de Magisk su, detección de frida-server, detección de /proc/self/maps
});
Anti-Depuración
# Android
frida -U -l anti_debug_bypass.js -f com.app
# Bypass: ptrace(TracerPid), /proc/self/status, isDebuggerConnected()
# iOS
# Bypass: PT_DENY_ATTACH, sysctl CTL_KERN/KERN_PROC/KERN_PROC_PID
frida -U -l ios_anti_debug.js -f com.app
Extracción de Cifrado Móvil
// Android — Hook Cipher.getInstance para obtener clave+algoritmo
Java.perform(function() {
var Cipher = Java.use("javax.crypto.Cipher");
Cipher.getInstance.overload('java.lang.String').implementation = function(algo) {
console.log("[Cipher] Algorithm: " + algo);
return this.getInstance(algo);
};
Cipher.init.overload('int', 'java.security.Key').implementation = function(mode, key) {
console.log("[Cipher] Key: " + bytesToHex(key.getEncoded()));
return this.init(mode, key);
};
});
// iOS — Hook CCCrypt
Interceptor.attach(Module.findExportByName("libcommonCrypto.dylib", "CCCrypt"), {
onEnter: function(args) {
console.log("CCCrypt op: " + args[0] + " alg: " + args[1]);
console.log("Key: " + hexdump(args[3], { length: args[4].toInt32() }));
}
});
Cadena de Herramientas
| Herramienta | Plataforma | Uso |
|---|---|---|
| JADX-GUI | A | Descompilación Java |
| apktool | A | Desempaquetado/Reconstrucción de APK |
| Ghidra | A+I | Descompilación multiarquitectura |
| Hopper | I | Desensamblador específico para iOS |
| Frida | A+I | Instrumentación dinámica |
| Objection | A+I | Mejora REPL de Frida |
| MobSF | A+I | SAST+DAST automatizado |
| class-dump | I | Exportación de clases ObjC |
| frida-ios-dump | I | Descifrado de IPA |
| jtool2 | I | Análisis de Mach-O |
| Burp Suite | A+I | Interceptor HTTP |
| mitmproxy | A+I | Proxy con scripting |
A=Android, I=iOS
Referencias
references/frida-objection-deep.md— Uso avanzado de Frida + Objectionreferences/ios-reverse-guide.md— Guía específica de ingeniería inversa iOSreferences/anti-detection-bypass.md— Bypass de Root/Jailbreak/Anti-Depuración/SSL Pinning
Autoverificación de Finalización (DEBE pasar antes de afirmar finalización)
- ¿Ejecuté cada paso del flujo de trabajo (no solo lo leí)?
- ¿Usé rutas reales de herramientas basadas en
tool-index? - ¿Produje evidencia reproducible (comandos/scripts/capturas/informes)?
- ¿Completé y reescribí los elementos de Checklist requeridos por RULES?