Limpiar el malware de fabrica de un Magcubic HY300 Pro (Allwinner H726)

Limpiar el malware de un Magcubic HY300 Pro

Me compre un proyector Magcubic HY300 Pro por 18 EUR en el 11.11, basicamente para trastear: un Android barato con el que experimentar y ver hasta donde se puede llegar. Lo que no esperaba es que, a los pocos minutos de darle red, una app del sistema se actualizara sola, viene con malware de fabrica, de la familia BADBOX 2.0: un dropper preinstalado y un backdoor con permisos de root. En este articulo vamos a ver como lo detectamos, como lo limpiamos y como lo dejamos usable sin depender del fabricante.

El SoC es un Allwinner H726 (board p2) con Android 14. Un detalle curioso de entrada: el aparato miente sobre su propia identidad. ro.product.model dice rk3566_rgo (un Rockchip), pero el chip real es Allwinner, se ve en ro.hardware=sun50iw15p1 y en /proc/device-tree/compatible. Esto es habitual en estos firmwares clonados.

Que trae dentro

Antes de tocar nada, lo primero es ver con que estamos lidiando. Conectamos por ADB y hacemos inventario. En nuestra unidad el malware vive en:

  • com.hy.storeos (/product/app/HY_StoreOs_QZ/): un instalador silencioso que corre como system con permisos para instalar y borrar paquetes. Se autoactualizo solo en los minutos que tuvo internet, sin que se lo pidieramos.
  • com.hy.hyotaupdate: el OTA del fabricante, que puede reinstalar el malware.
  • com.android.vending: no es Play Store, es un APK renombrado (Tubesky.apk) de procedencia dudosa.
  • /system/xbin/hotacksu: el plato fuerte. Es el su de Android renombrado, con setuid root y sin pedir ninguna autorizacion. Cualquier proceso que lo ejecute se hace root. Un backdoor de libro.

Como guinda, el eMMC entero es escribible por cualquier app (/dev/block/mmcblk0 con permisos 0666) y SELinux viene en Permissive. El aparato es un coladero.

(Aviso importante: hay varias variantes de este firmware. Otras guias describen paquetes com.hotack.*; la nuestra es la variante com.hy.*. Conviene hacer el inventario y no ejecutar nada a ciegas.)

Nivel 1: limpieza sin root

Esto lo puede hacer cualquiera, solo con ADB y sin rootear. Lo primero: no conectar el proyector a internet hasta terminar. En el asistente de primer arranque, saltamos la Wi-Fi (recordemos que storeos se autoactualiza en cuanto tiene red).

Para activar ADB: Ajustes - Informacion del sistema - "Modelo del equipo", pulsamos varias veces hasta activar el modo desarrollador, y luego Ajustes - Otras configuraciones - Modo desarrollador - "ADB debug".

Un apunte: el ADB por Wi-Fi en este modelo exige emparejamiento TLS (el puerto 5555 responde con STLS) y en nuestra unidad no conseguimos completarlo, asi que tiramos de cable USB-A a USB-A.

Con el inventario hecho, la limpieza son unos pocos comandos. El de storeos tiene truco:

# storeos: quitarlo Y borrar la actualizacion que se bajo de internet
adb shell pm uninstall --user 0 com.hy.storeos
adb shell pm uninstall-system-updates com.hy.storeos

Ojo con esto: pm uninstall --user 0 por si solo NO vuelve a la version de fabrica, deja la actualizacion en /data/app. Hay que rematarlo con uninstall-system-updates para que revierta a la de /product (en nuestra unidad, de la v2609042030 a la v2606150950). El resto se desactiva, que es reversible:

adb shell pm disable-user --user 0 com.hy.hyotaupdate
adb shell pm disable-user --user 0 com.android.vending
adb reboot

Lo que NO tocamos: com.htc.magcubicos (es el launcher y ademas los ajustes de Wi-Fi y Bluetooth), ni el soporte de hardware (enfoque, mando, HDMI). Todos los comandos, con sus verificaciones, estan en el repo.

El Nivel 1 deja el aparato mucho mejor, pero no arregla el backdoor hotacksu: esta en una particion de solo lectura. Para eso necesitamos root.

Nivel 2: root y sistema usable

Aqui es donde se pone interesante. Este firmware viene con el bootloader desbloqueado (verifiedbootstate=orange), SELinux en Permissive y el eMMC escribible. Eso, que es un desastre de seguridad, es justo lo que nos permite rootear sin necesidad de FEL ni PhoenixSuit: parcheamos init_boot con Magisk y lo escribimos directamente por ADB.

Antes de nada, un backup completo del eMMC (es nuestra unica red de seguridad real: este aparato no tiene slot A de sistema, asi que si algo rompe super, el backup es lo unico que lo recupera). El volcado incluye private.img, que lleva el numero de serie y las MAC, asi que ese fichero no se publica ni se comparte.

El paso de riesgo es escribir init_boot. Lo hacemos con dos comprobaciones de hash que abortan antes de escribir si algo no cuadra: una verifica que el fichero es el parcheado, otra que el destino contiene exactamente el init_boot original. Es la unica proteccion contra un error de offset. Con el bootloader desbloqueado arranca con el aviso naranja y no hace falta tocar vbmeta.

Una vez tenemos root, en lugar de borrar el malware a lo bruto escribiendo en super, usamos un modulo de Magisk (hy300-clean) que oculta el backdoor y los APK maliciosos de forma systemless, con whiteouts. No escribe nada en super y es reversible borrando el modulo. Tras instalarlo y reiniciar, hotacksu desaparece y ya no aparece como binario setuid del sistema.

Para dejarlo usable montamos FLauncher de launcher (ligero, open source) y las apps por ADB desde sus fuentes oficiales: Jellyfin, SmartTube, VLC, Kodi, mas Obtainium y F-Droid para mantenerlas al dia sin depender de Play Store ni de una cuenta de Google. Todo en variante armeabi-v7a, que el userspace es de 32 bits.

Un detalle del launcher: al arrancar sigue saliendo magcubicos porque esta marcado para arranque directo y FLauncher no. No podemos desactivar magcubicos entero (es tambien la pantalla de ajustes de Wi-Fi y Bluetooth), asi que desactivamos solo su actividad de launcher:

adb shell "su -c 'pm disable --user 0 com.htc.magcubicos/.activity.MainActivity'"

Para la entrada HDMI, el tile AwSource de FLauncher abre el selector de fuentes (HDMI1/2/3).

Lo que queda despues:

Aqui viene la parte honesta. Con el proyector ya en una VLAN aislada y pasando por AdGuard Home, miramos que resuelve filtrando por su IP. La buena noticia: ni rastro del BADBOX. No hay dominios de SOAX, ni los puertos 12341/12342, ni storeos llamando a casa. El dropper esta neutralizado.

Pero el aparato no se queda mudo. Sigue haciendo telemetria del fabricante (relay.luminago.app) y de Google, Baidu y Firebase (app-measurement.com, hmma.baidu.com, firebase-settings.crashlytics.com). Las listas DNS bloquean la mayor parte, pero no todo.

O sea: quitar el BADBOX no convierte este aparato en un dispositivo de confianza. La recomendacion final no cambia: en VLAN aislada con DNS filtrado, y nunca en la red principal.

Conclusion

Por 18 EUR tenemos un proyector Android limpio del malware mas agresivo, rooteado, con un launcher decente y apps que mantenemos nosotros, no el fabricante. No es un dispositivo en el que confiar a ciegas (ningun Android chino de marca blanca lo es), pero si uno que podemos tener controlado y aislado para lo que queramos trastear.

Todos los comandos, scripts y el modulo de Magisk, en el repo: cmos486/magcubic-hy300-pro-h726-debloat.

Un aviso para quien quiera replicarlo: esto esta probado en una unidad concreta (variante com.hy.*, board p2). Tu firmware, tus rutas y tus offsets pueden ser distintos. Comprueba tu board antes de tocar particiones: flashear la de la board equivocada brickea el aparato.