· Droidwatch Security Research team · 7 min de lectura · Investigación de amenazas hook troyano-bancario rat play-protect
🌐 Read in English →

Variantes del RAT Hook que Google Play Protect no detecta — análisis técnico

Hook es un RAT bancario Android derivado de Ermac. Desglosamos las señales de variante que se cuelan ante Play Protect pero encienden el análisis estático y din

Variantes del RAT Hook que Google Play Protect no detecta — análisis técnico

Publicado el 2026-05-16 por el equipo de investigación de seguridad de Droidwatch


Hook es un RAT bancario de Android (troyano de acceso remoto) documentado
públicamente por primera vez por ThreatFabric en enero de 2023. A diferencia de
su predecesor ERMAC, centrado de forma acotada en ataques de overlay para robo
de credenciales, Hook es un RAT con todas las funciones: ofrece streaming en
tiempo real de la pantalla del dispositivo, exfiltración de archivos,
interceptación de SMS y la capacidad de cometer fraude on-device simulando la
entrada del usuario mediante la API de Accesibilidad.

Pese a sus capacidades, las variantes recientes de Hook (v2.1+) eluden de forma
consistente el escáner ML on-device de Google Play Protect. Este post explica
exactamente cómo Hook evita la detección, cómo el análisis estático de Droidwatch
lo atrapa igualmente, y aporta un mapeo MITRE ATT&CK y una tabla de IOCs para
equipos de threat intelligence.


¿Qué es Hook?

Hook se vende como una suscripción Malware-as-a-Service (MaaS) a cibercriminales,
apuntando principalmente a clientes de entidades financieras en Europa,
Norteamérica y Australia. Capacidades clave:


Cómo se le escapa a Play Protect

Google Play Protect combina análisis estático server-side y clasificación ML
on-device. Hook v2.1+ evade ambas capas con tres técnicas concretas:

1. Puente nativo para operaciones sensibles

Las versiones anteriores de Hook llamaban a AccessibilityService y a las APIs
de overlay directamente desde el bytecode DEX en Java/Kotlin, lo que el
clasificador estático de Play Protect detectaba trivialmente.

Las variantes nuevas mueven el código sensible a una librería nativa compilada
(libhook_bridge.so, a veces disfrazada como libutil_core.so). El código
nativo usa JNI para invocar las mismas APIs de Android, pero los call sites ya no
son visibles para el análisis estático a nivel de DEX.

El analizador nativo de Droidwatch (src/analyzer/native_analyzer.py)
desensambla los archivos .so con objdump / readelf y extrae los símbolos
importados. La presencia de exports JNI como
Java_com_hook_bridge_CoreBridge_initOverlay junto a imports de librerías de
sistema Android (libandroid.so, liblog.so) con strings de símbolos
relacionados con accesibilidad es una señal fiable.

2. Carga dinámica de DEX

Hook incluye un archivo DEX secundario cifrado almacenado en assets/. El DEX
primario lo descifra y lo carga en runtime usando DexClassLoader, de modo que
los archivos de clase maliciosos nunca están presentes en el APK en su forma
ejecutable.

// Primary DEX bootstrap (simplified decompile)
File optimizedDir = getDir("dex_opt", MODE_PRIVATE);
DexClassLoader loader = new DexClassLoader(
    getAssets().extractAssetToFile("payload.dex.enc"),  // encrypted blob
    optimizedDir.getAbsolutePath(),
    null,
    getClassLoader()
);
Class<?> core = loader.loadClass("com.hook.internal.Core");
core.getMethod("init", Context.class).invoke(null, this);

Droidwatch detecta este patrón de forma estática:
- Se marca la instanciación de DexClassLoader o PathClassLoader con una ruta
que apunta a assets/ o getFilesDir().
- Se marca por separado la presencia de blobs binarios cifrados en assets/
(detectados por la baja variación de entropía de Shannon — los datos cifrados
se agrupan cerca de 7,9–8,0 bits/byte).
- La combinación puntúa RULE_DYNAMIC_DEX_LOAD (severidad: high) y
RULE_ENCRYPTED_PAYLOAD (severidad: critical).

3. Abuso de intents de accesibilidad legítimos

En lugar de declarar un AccessibilityService directamente (lo que Play Protect
marca), algunas variantes de Hook usan un enfoque en dos etapas:
1. Primero se instala una app dropper (disfrazada de lector de PDF o
actualización del sistema).
2. El dropper usa
startActivity(Intent("android.settings.ACCESSIBILITY_SETTINGS")) para guiar
al usuario a la pantalla de ajustes de accesibilidad y luego usa eventos
TYPE_VIEW_SCROLLED de AccessibilityService para detectar cuándo el usuario
ha habilitado el servicio para la segunda app (el payload).

La app del payload nunca parece pedir accesibilidad en su propio manifest.
Droidwatch lo detecta cruzando los strings de acción de intent en el DEX con la
ausencia de una declaración de AccessibilityService en el manifest — una
incongruencia característica de las apps dropper.


Mapeo MITRE ATT&CK for Mobile

Táctica Técnica ID de técnica Implementación en Hook
Acceso a credenciales Input Capture: GUI Input Capture T1417.002 Overlay sobre apps bancarias
Acceso a credenciales Input Capture: Keylogging T1417.001 Accesibilidad TYPE_VIEW_TEXT_CHANGED
Recolección Screen Capture T1513 Streaming MJPEG vía MediaProjection
Recolección Access Notifications T1517 Notification listener para interceptar OTP
Recolección Clipboard Data T1414 ContentObserver sobre ClipboardManager
Recolección Access SMS Messages T1636.004 BroadcastReceiver de SMS
Evasión de defensas Obfuscated Files or Information T1406 DEX secundario cifrado en assets/
Evasión de defensas Virtualization/Sandbox Evasion T1633 Detección de emulador vía Build.FINGERPRINT
Exfiltración Exfiltration Over C2 Channel T1041 WebSocket + POST HTTPS al C2
Comando y control Web Protocols T1071.001 C2 HTTPS con certificate pinning propio
Comando y control Application Layer Protocol T1437 WebSocket para comandos ODF en tiempo real
Persistencia Foreground Persistence T1624.001 Servicio en foreground con notificación de baja prioridad

Tabla de IOCs

Los siguientes indicadores se asocian a la oleada de la campaña de Hook v2.1–v2.3
analizada entre febrero y mayo de 2026. Los hashes SHA-256 provienen de muestras
enviadas al threat feed público de Droidwatch.

Tipo Indicador Notas
Nombre de paquete com.security.protect.update Dropper (oleada 1)
Nombre de paquete com.document.reader.pdf.lite Dropper (oleada 2)
Nombre de paquete com.system.service.notification App payload
Nombre de paquete com.mobile.security.scan.pro Dropper (oleada 3)
SHA-256 a1b2c3d4e5f6... (placeholder — ver feed) Dropper Hook v2.1
SHA-256 f6e5d4c3b2a1... (placeholder — ver feed) Payload Hook v2.2
SHA-256 0a1b2c3d4e5f... (placeholder — ver feed) Dropper Hook v2.3
Dominio C2 api.mobservice-update[.]com C2 oleada 1
Dominio C2 cdn.secure-doc-viewer[.]net C2 oleada 2
Dominio C2 panel.androidservices-cdn[.]com C2 oleada 3
Patrón de URL C2 wss://*/ws/device/{device_id} Canal ODF WebSocket
Patrón de URL C2 https://*/bot/overlay/{package} Endpoint de inyección de overlay
Librería nativa libhook_bridge.so Nombre interno en v2.1
Librería nativa libutil_core.so Nombre disfrazado en v2.2–v2.3
Nombre de asset payload.dex.enc DEX secundario cifrado (v2.1)
Nombre de asset res/raw/config.bin DEX secundario cifrado (v2.2+)

Nota: todos los IOCs llevan [.] en los dominios para evitar clics
accidentales. Defang antes de usarlos. Los hashes SHA-256 completos están
disponibles vía la
API del threat feed de Droidwatch.


Divulgación responsable

Las apps dropper descritas en este post no se distribuyeron por Google Play. Se
distribuyeron mediante:
- Campañas de smishing suplantando servicios de paquetería.
- Enlaces de descarga de APK maliciosos en grupos de apps de mensajería.
- Tiendas de APK de terceros dirigidas a usuarios en regiones con acceso limitado
a Play Store.

Droidwatch envió todas las muestras identificadas al equipo de Android Security
de Google vía la Android Partner Vulnerability Initiative (APVI) y al portal de
envío público de ThreatFabric. Las firmas de Google Play Protect se actualizaron
en 72 horas tras nuestra divulgación inicial para las muestras de la oleada 1.
Las oleadas 2 y 3 siguen sin ser detectadas por Play Protect a la fecha de esta
publicación.

Animamos a los investigadores de seguridad que encuentren variantes de Hook a
enviar muestras al feed comunitario de Droidwatch (todos los envíos públicos se
anonimizan) y al programa de bug bounty de
Android Security de Google.


Detectar Hook con Droidwatch

Sube una muestra sospechosa de Hook en droidwatch.app.
Las siguientes reglas de detección se activan ante las variantes de Hook:

Una muestra de Hook v2.2 puntúa 88–94 / 100, veredicto: Malicioso.

Para equipos de threat intelligence enterprise que necesiten exports STIX 2.1,
alertas por webhook o acceso por API a IOCs en bloque, ve nuestro
plan Enterprise o contacta a
[email protected].

Threat Research

Droidwatch's research team analyzes Android & iOS malware — banking trojans, spyware, droppers and overlay kits — and writes up the static and dynamic signals that give them away. Every post is grounded in real platform output.

Analyze your first app free — drag an APK or iOS .ipa onto the homepage for a full static report in about a minute. Get started free