Saltar al contenido
Categoria: Pentest9 min de lectura

Pentest de Aplicaciones Mobile Android: Frida, MobSF y Lab con Genymotion

Por Lucas Andrade ·

Setup completo para analisis dinamico de APKs propios con Frida, MobSF y Genymotion, con hooks practicos y checklist tecnico.

Pentest de Aplicaciones Mobile Android: Frida, MobSF y Lab con Genymotion
En este artículo

Un APK es un archivo zip disfrazado, y eso es justamente lo que vuelve al pentest mobile Android tan divertido como quirurgico. En Basilisk OffSec armamos labs donde solo probamos binarios de aplicaciones propias o con autorizacion escrita del dueno del producto, porque hacer ingenieria inversa de apps de terceros sin consentimiento es delito federal en casi cualquier jurisdiccion. Esta guia recorre el flujo completo: alcance y ley, un lab reproducible, analisis estatico, intercepcion de trafico, ataque al backend, hooks personalizados, almacenamiento local, defensas runtime y un informe limpio - en el orden en que corre un engagement real.

Primero: alcance, contrato, modelo de amenazas#

Antes de cualquier hook con Frida, definimos alcance, contrato y modelo de amenazas, en el mismo espiritu de Threat Modeling con STRIDE en Sprints: Ejemplo Completo de un Microservicio. Fija por escrito: que package names estan en alcance, si el backend puede probarse, que clases de datos son intocables y quien es el contacto de emergencia ante un hallazgo real. Sin eso, no estas investigando: estas coleccionando procesos judiciales. Deja tambien establecido que los hallazgos solo viajan por canales cifrados.

El stack base para 2026#

El stack es simple: Genymotion Personal para emulacion x86_64 con Google Apps opcional, MobSF corriendo en Docker para analisis estatico y dinamico automatizado, Frida 16.x con frida-tools en el host, objection para acelerar flujos y jadx-gui para leer smali decompilado. Genymotion gana al AVD por velocidad de IO y expone ADB en el puerto 5555. Levanta una maquina Android 13 con root, instala Magisk via setup-frida y sube el frida-server-arm64 a /data/local/tmp con permisos 755. En menos de quince minutos tenes ambiente reproducible, aislado de tu red productiva, coherente con la filosofia de Analisis de Malware en Lab Aislado: Setup Seguro con FlareVM y REMnux.

Analisis estatico con MobSF#

MobSF es tu primer pivote. Levantalo con docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest, arrastra el APK a la interfaz y extrae AndroidManifest, permisos peligrosos, secretos hardcodeados, uso de Janus, WebView con setJavaScriptEnabled habilitado e incluso dominios expuestos en network_security_config. El escaneo estatico suele encontrar tokens AWS olvidados, claves Firebase con reglas publicas y endpoints de staging que nadie deberia ver. Usa ese mapa de superficie para guiar hipotesis dinamicas, y no caigas en tratar el score numerico de MobSF como verdad absoluta. Como cualquier SAST, genera ruido, igual que discutimos en AppSec Shift-Left: SAST, SCA y Escaneo de Secretos sin Frenar al Equipo.

Decompilar y leer smali#

Abre el APK en jadx-gui y lee el Java decompilado mientras mantenes a mano la capa smali para detalles que el decompilador se traga. Busca los clasicos: Log.d con tokens, endpoints hardcodeados, WebView.addJavascriptInterface, activities y receivers exportados en el manifest, y constantes string para claves cripto. Componentes exportados con android:exported="true" sin permiso son punto de entrada directo para una app maliciosa en el mismo dispositivo. Marca cada componente asi como candidato de prueba dinamica para el siguiente paso.

Bypass de SSL pinning con Frida#

Con la superficie mapeada, abri Frida. Un ejemplo clasico es el bypass de SSL pinning para inspeccionar trafico TLS en Burp o mitmproxy. Carga el script con frida -U -f com.empresa.app -l ssl-bypass.js --no-pause; el hook reescribe checkServerTrusted de TrustManagerImpl y neutraliza okhttp3 CertificatePinner. Sin pinning activo, te volves proxy man-in-the-middle dentro del emulador, capturas JSON autenticados y testeas la API trasera como en pentest web tradicional, con burp configurado como en Pentest Web desde Cero: Montando un Lab Seguro con DVWA, Juice Shop y Burp Suite. Recorda: el bypass solo es legitimo en la app que tenes derecho a auditar.

Ataque a la API backend#

Despues del trafico limpio, empeza a jugar con la API. Los vectores clasicos vuelven: mass assignment, IDOR en /v2/users/{id}, JWT con algoritmo none, GraphQL con introspeccion abierta. Aplica la metodologia de Pentest de APIs REST y GraphQL: Checklist Tecnico para Bug Bounty Legal y, para inyeccion en backend, valida candidatos con payloads parametrizados como mostramos en SQL Injection en la Practica: Explotar, Detectar y Mitigar en Lab Controlado. Recorda que la app mobile es solo un cliente: el fallo real de autorizacion casi siempre esta del lado servidor, donde se trato erroneamente la UI de la app como frontera de seguridad.

WebView y addJavascriptInterface#

Otro objetivo subestimado es el WebView interno. Si la app carga HTML remoto sin allowlist, podes encadenar XSS en contexto privilegiado usando addJavascriptInterface, llamando metodos Java expuestos desde JS - en API levels viejos incluso hasta ejecucion remota via reflection. Verifica si setAllowFileAccess, setAllowUniversalAccessFromFileURLs y loadUrl se combinan con datos controlados por el usuario. La mecanica de payload la cubrimos en XSS Moderno: DOM, Stored y Reflected con Ejemplos Reales en Entorno de Pruebas. Un WebView que resuelve URLs intent:// sin filtro es tambien candidato a deep-link hijacking.

Hooks personalizados: donde brilla el pentester#

Tres scripts Frida que valen oro: dump de claves AES pasadas a Cipher.init capturando el primer argumento de SecretKeySpec; instrumentacion de SharedPreferences.Editor.putString para detectar tokens guardados en claro; y hook en java.io.File para listar todo lo escrito en /data/data/com.empresa.app durante el login. Combina con adb shell run-as com.empresa.app para extraer sqlite e inspeccionar con sqlitebrowser. En una auditoria reciente encontramos refresh_token persistido sin keystore, problema que rapidamente derivo en account takeover.

Almacenamiento local y keystore#

Los datos sensibles van al Android Keystore con claves respaldadas por hardware, nunca en SharedPreferences en claro ni en un SQLite sin cifrar. Revisa sistematicamente databases/, shared_prefs/, el cache y rutas de almacenamiento externo buscando tokens, PII y material cripto. Un hallazgo comun es una capa cripto casera cuya clave esta justo al lado de los datos - efectivamente texto plano. Recomienda EncryptedSharedPreferences o Jetpack Security, con claves atadas a StrongBox o el TEE y no extraibles bajo root.

Revisar las defensas runtime#

No termines sin revisar las runtime defenses. Verifica deteccion de root via RootBeer, deteccion de Frida por escaneo de puertos locales (27042), deteccion de emulador via Build.FINGERPRINT e integridad via Play Integrity API. Documenta como se evadio cada proteccion y propone defensa en profundidad, no balas de plata - un unico chequeo de root que mata un one-liner de objection no es proteccion. Del lado servidor, asegura hardening de SSH en el bastion segun Hardening de SSH 2026: Algoritmos, Certificados y Bastion Hosts.

Informe y limpieza#

El informe es el producto: por hallazgo, CVSS, pasos de reproduccion, la clase o endpoint afectado y una remediacion concreta. Higieniza artefactos, capturas y PDFs antes de enviar el informe, como en Higiene de Metadatos: Limpiando EXIF, PDF y Office antes de Publicar, para que no filtren rutas internas ni nombres de cliente. Al final, borra los datos de app extraidos y revierte el snapshot. Un buen informe prioriza por riesgo real, no por la cantidad de lineas del output de la herramienta.

objection para iteracion rapida#

Donde un script Frida a medida es demasiado esfuerzo, objection acelera el ciclo. Tras objection -g com.empresa.app explore, los comandos android sslpinning disable, android keystore list, android hooking list classes y memory search --string "token" pegan a los objetivos mas comunes en minutos. android hooking watch class_method ... --dump-args --dump-return muestra argumentos y retornos de un metodo en vivo sin escribir una linea de JavaScript. Objection es un wrapper de Frida, no un reemplazo: para cualquier cosa no trivial segui escribiendo tus hooks, pero para recon y bypass de pinning el one-liner es imbatible en velocidad. Recorda que cada accion de objection corre en la memoria del proceso de la app y desaparece al reiniciar.

Revisa los intent-filter en el manifest: un handler de deep link con android:autoVerify="false" o un redirect de custom scheme (miapp://callback) puede ser interceptado por una app maliciosa en el mismo dispositivo. El hit clasico es un flujo OAuth que devuelve el authorization code a un custom scheme no verificado: una segunda app registra el mismo scheme y captura el code. La contramedida son App Links verificados (HTTPS con assetlinks.json) mas PKCE, para que un code interceptado sea inutil sin el verifier. Prueba cada endpoint de deep link exportado con adb shell am start -a android.intent.action.VIEW -d "..." y observa que activity arranca sin autenticacion.

FAQ: Emulador o dispositivo fisico?#

Para la mayor parte del trabajo alcanza un emulador Genymotion con root, y es mas rapido y desechable. Necesitas dispositivos fisicos cuando la app usa attestation atada al hardware, SafetyNet/Play Integrity con veredicto estricto, NFC, perifericos Bluetooth o sensores especificos del dispositivo que el emulador no reproduce limpio. Una mezcla pragmatica: emulador para iteracion rapida, un telefono de prueba dedicado para los casos que el emulador bloquea.

FAQ: Como salto Play Integrity sin root fisico?#

Honestamente: no siempre, y es a proposito. Play Integrity con MEETS_STRONG_INTEGRITY esta atestiguado por hardware y busca rechazar justo los entornos modificados que corres. En un test autorizado documentas que el control aguanta, en vez de romperlo a cualquier costo - un chequeo de integridad que pasa es un resultado positivo. Donde la app solo chequea el veredicto debil o evalua el resultado del lado cliente, ese es precisamente el fallo que reportas.

Conclusion y takeaway practico#

Ejecuta Genymotion, MobSF y Frida en una VM dedicada, con snapshot limpio por engagement, y nunca atada a tu identidad personal. Recorre el flujo en orden fijo: alcance, estatico, decompilar, trafico, backend, hooks personalizados, storage, defensas runtime, informe. La mayoria de los hallazgos serios no viven en cripto exotica sino en autorizacion banal del lado servidor y en tokens persistidos en claro - ahi buscas primero, y ahi esta el valor para el cliente.

Related posts

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly