Parte: 13 — Seguridad móvil, IoT e inalámbrica · Fuente: The Mobile Application Hacker's Handbook (Chell et al.) y documentación de Ghidra/Frida ⏱️ Duración estimada: 120 min · Nivel: Avanzado
Dominar la ingeniería inversa (RE) de aplicaciones móviles combinando análisis estático (desensamblado y decompilación de bytecode/nativo) con análisis dinámico (instrumentación con Frida). El alumno recuperará la lógica de una app, entenderá algoritmos ofuscados, localizará y evadirá controles anti-tampering, y parcheará una app para modificar su comportamiento en laboratorio.
⚠️ Nota ética: el RE se realiza sobre apps propias, de código abierto o CrackMes/retos diseñados para ello, o con autorización. Modificar o redistribuir software de terceros puede infringir derechos de autor y contratos de licencia.
Al finalizar, el alumno podrá:
.so).| # | Tema | Por qué importa |
|---|---|---|
| 1 | Formatos: DEX, Mach-O, ELF, .so |
Determinan la herramienta de RE |
| 2 | Desensamblado y decompilación | Recupera lógica legible |
| 3 | Análisis dinámico con Frida | Observa el comportamiento real |
| 4 | Tracing y hooking | Localiza funciones clave rápido |
| 5 | Ofuscación y su análisis | Complica pero no impide el RE |
| 6 | Anti-tampering y anti-debug | Controles que hay que evadir |
| 7 | Parcheo y reempaquetado | Modificar comportamiento en laboratorio |
.so/Mach-O.# Estático
apktool d app.apk -o out # smali + recursos
jadx-gui app.apk # decompilación a Java
# Ghidra para binarios nativos .so / Mach-O
# Dinámico
frida-trace -U -i "recv*" -f <paquete> # traza funciones que empiezan por recv
frida -U -l script.js -f <paquete> # inyecta un script propio
# Reempaquetado (app propia)
apktool b out -o mod.apk
apksigner sign --ks mykey.jks mod.apk
.so, cárgalo en Ghidra y estudia la función exportada relevante.true) y observa el cambio de comportamiento.Toma un CrackMe móvil y recupera su secreto/flag por dos vías independientes: una estática (leyendo/parcheando el código) y una dinámica (hook con Frida). Criterio de aceptación: documentas ambos métodos con evidencia (captura del flag y el script/parche usado) y explicas cuál fue más eficiente y por qué.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
jadx muestra // decompilation failed |
Ofuscación agresiva; recurre a smali o análisis dinámico |
| Frida no engancha la función | Nombre/firma mal escritos o cargada tarde; usa frida-trace para descubrir símbolos |
| App reempaquetada no instala | No está firmada o firma inválida; fírmala con apksigner |
| App detecta el parche | Anti-tampering activo; evádelo con un hook antes de parchear |
Ghidra no reconoce el .so |
Arquitectura equivocada; selecciona el binario ARM correcto |
❓ ¿Estático o dinámico: cuál uso primero? Suelen combinarse. El estático da el mapa general; el dinámico confirma comportamiento y sortea ofuscación de cadenas y control de flujo.
❓ ¿La ofuscación hace imposible el RE? No. Aumenta el tiempo y la dificultad, pero el código debe ejecutarse en el dispositivo, así que la instrumentación dinámica siempre observa el comportamiento real.
❓ ¿Por qué el .so requiere Ghidra y el DEX no?
El DEX es bytecode de alto nivel decompilable casi a Java; el .so es código máquina ARM/x86 que necesita un decompilador de binarios nativos como Ghidra.
Clase 264 — Pentest de aplicaciones iOS
Clase 266 — Seguridad de IoT: panorama y superficie de ataque