Qué se puede retirar de un televisor Android de consumo sin romperlo, qué lo revierte y qué deja expuesto.

Este artículo documenta el debloat de un TCL C06 (MediaTek mt5867, Android 11, SDK 30) y el reemplazo de su pantalla de inicio. Todo se hizo sobre un equipo propio, sin root y sin desinstalar paquetes.


Origen

Durante mis clases de Criptografía, un estudiante, Aldahir, me comentó la tendencia en X para eliminar el bloatware de las smart TV. Ese fue el punto de partida del estudio. El proyecto de referencia es Gathin23/cleanyourtv, cuyo prompt (PROMPT.md) describe cómo hacer el debloat por Wi-Fi con un asistente de programación. Según el autor, la herramienta nació de un anuncio a pantalla completa de un banco que aparecía antes de Netflix en el TV de sus padres.

El prompt usado en este estudio es una versión abreviada y específica para el TCL C06 de ese PROMPT.md. Compartir las mismas herramientas (disable.sh, adb-closed.py) indica que el proyecto parte de ese repositorio, aunque no prueba copia de código. La versión del repositorio es más amplia: incluye compatibilidad con otras marcas, advertencias de firmware y la redirección para televisores que no son Android. La versión local omite todo eso.

Pregunta de investigación

¿Es posible reducir la superficie de software de un TV de consumo sin romper su funcionalidad, y qué mecanismos del fabricante lo impiden o lo revierten?

Se trabajó con ADB por red (puerto 5555) y pm disable-user --user 0. El objetivo secundario fue reemplazar el launcher por uno propio.

Metodología

  1. Reconocimiento: getprop y lista de paquetes.
  2. Línea base: settings globales, seguros y del sistema, y lista de paquetes deshabilitados.
  3. Lotes: cuatro listas por categoría, con verificación después de cada una.
  4. Verificación: capturas del TV y dumpsys, no solo el código de salida.
  5. Reinicio: comprobar si lo deshabilitado persiste.
  6. Launcher: compilación, instalación y comprobación de HOME.

Resultados

Superficie

Se encontraron 127 paquetes instalados. El proyecto deshabilitó 15, y otros 2 quedaron deshabilitados antes del estudio o por el firmware. Tras el segundo reinicio, la lista de deshabilitados coincidió con el snapshot anterior.

Categoría Paquetes Motivo
Contenido y anuncios TCL 6 Promociones, EULA, cuenta y sticker energético
Telemetría y tienda Google 4 Recomendaciones, storefront, feedback, sincronización de calendario
Asistente de voz 2 No utilizado
Streaming 1 No utilizado (Rakuten)
Launchers sustituidos 2 Reemplazo por launcher propio
Forzado por firmware 1 com.tcl.smartalexa, ver más abajo

El firmware revierte decisiones del usuario

En cada arranque, el servicio OverSeasAppShow descarga una lista blanca regional desde servidores del fabricante y deshabilita lo que no aparece en ella. Alexa no está en la lista para Panamá. El paquete queda marcado como protegido, así que pm enable devuelve SecurityException. La reversión no es posible desde ADB, y así se documenta como límite del estudio.

Un “Success” no es verificación

cmd package set-home-activity imprime Success, pero HOME siguió abriendo com.google.android.tvlauncher. Lo que sí cambió HOME fue deshabilitar ese launcher. La comprobación válida es visual y con dumpsys activity activities | grep mFocusedApp.

Un manifiesto incompleto cambia el comportamiento

Sin <uses-sdk>, aapt2 compila con targetSdk=0. El sistema aplica el modo de compatibilidad y la app se muestra en una ventana de 569×320. La solución es declarar targetSdk explícitamente.

Capturas en blanco

Netflix y Live TV producen fotogramas negros al capturar. Es protección de contenido, no un fallo del debloat. Para confirmar qué app tiene el foco se usa dumpsys activity activities | grep mFocusedApp.

ADB en texto plano

El puerto 5555 usa texto plano. Cualquier equipo de la red que llegue a ese puerto puede ejecutar comandos si la depuración está activa. El cierre solo se da por bueno cuando la herramienta devuelve connection refused. Un no route to host no demuestra nada.

DNS privado y anuncios

El DNS privado con dns.adguard-dns.com funciona y YouTube reproduce, pero no bloquea sus anuncios: se sirven desde el mismo dominio que el contenido.

Servicios de voz

Paquete Función según la configuración del TV Estado
com.google.android.katniss Servicio de voz de Google. Figura como voice_interaction_service y voice_recognition_service en el backup de settings. Deshabilitado (lote 3)
com.google.android.tv.assistant App del asistente de Google TV. Deshabilitado (lote 3)
com.tcl.smartalexa App de Alexa de TCL. sys.enablealexa y sys.showalexa están en false. Forzado a deshabilitado por el firmware

Estas funciones son las que indican los nombres y la configuración del backup. No se han comprobado en el dispositivo.

Instalado no es lo mismo que capturar audio. La pantalla de inicio original tenía un botón «Click to speak», que es un punto de entrada de voz. Mostrarlo no prueba que el TV escuchara.

Antes y después

Pantalla de inicio original:

Pantalla de inicio original

Pantalla de inicio con el launcher propio, con dock de cuatro aplicaciones, Inputs, Wi-Fi y Settings:

Pantalla de inicio con el launcher propio

Hipótesis del micrófono: sin confirmar

Hay dos fuentes externas que sostienen la hipótesis de un micrófono activo en smart TV:

  • Un artículo de prensa del 28 de octubre de 2026 sobre televisores Samsung. Atribuye las afirmaciones a un analista citado como «Log4j», sin identificar y sin enlace a su análisis. No presenta capturas, tráfico ni metodología. No menciona ningún modelo de TCL.
  • Tres publicaciones de X que no se pudieron leer.

En el TV estudiado hay indicios, pero no pruebas:

  • com.tcl.micmanager está instalado y no aparece en ningún snapshot de paquetes deshabilitados.
  • odm.tcl.micmanager.enable está en false en getprop, lo que contradice el estado del paquete. No se puede interpretar sin medirlo.
  • Hay servicios de voz instalados, pero instalado no equivale a capturar audio.

Lo que falta para confirmar o descartar la hipótesis es medir en el TV: permisos RECORD_AUDIO (dumpsys appops), actividad de captura (dumpsys media.audio_flinger) y registros (logcat) en una ventana de tiempo, con un control positivo. Hasta entonces, la conclusión es que no hay evidencia de captura en este TV.

Límites del estudio

  • Las funciones de los paquetes de voz se infieren de sus nombres y de la configuración del backup, no de pruebas en el dispositivo.
  • La lista blanca del firmware solo se observó en un TCL C06; no generalizo a otros modelos.
  • No hay medición de audio. La hipótesis del micrófono sigue sin comprobar.
  • El emulador Android TV (API 30) no reproduce el firmware del fabricante, así que no sirve para probar los hallazgos de firmware.

Recomendaciones

Para el fabricante

  • No revertir en cada arranque los cambios que hace el usuario.
  • Publicar la lista de paquetes forzados y el motivo.
  • Ofrecer una depuración con TLS o autenticación.
  • Mostrar al usuario el estado del micrófono y de los servicios de voz.

Para el usuario

  • Cerrar el puerto 5555 después de cada sesión.
  • No publicar números de serie ni IP en la documentación.
  • Verificar cada cambio por su efecto, no por el código de salida.

Conclusión

Sí es posible retirar la mayor parte del software no deseado sin tocar el sistema base. El firmware impone una lista regional que no se puede revertir desde ADB. La verificación visual y con dumpsys es necesaria para dar por válido un cambio. El micrófono sigue sin comprobarse: los snapshots muestran configuración, no captura de audio.