¿Cómo puede una imagen simple bloquear un teléfono Android hasta el punto de que se vuelve inutilizable?

Es una pregunta que surgió con frecuencia en las últimas 24 horas, ya que la noticia de un “fondo de pantalla maldito” se extendió por la web.

El bloqueo del fondo de pantalla explicó

Aquí hay un resumen: configurar una imagen particular como fondo de pantalla puede enviar algunos teléfonos a un círculo de bloqueos que los deja inutilizables.

Hay algunas soluciones, dependiendo de cuán fuerte sea golpeado el teléfono. Algunos usuarios pudieron cambiar el fondo de pantalla en el corto intervalo entre bloqueos. Otros tuvieron éxito al eliminar el fondo de pantalla utilizando la herramienta de recuperación TWRP. Pero en la mayoría de los casos, la única solución era restablecer el teléfono a la configuración de fábrica, perdiendo cualquier dato que no esté respaldado.

El problema fue sacado a la luz por Ice Universe, los usuarios chinos de Twitter conocidos por las filtraciones. Según los informes de los usuarios, muchos modelos de Samsung y Google se ven afectados, mientras que también hemos visto algunos informes de usuarios de dispositivos OnePlus, Nokia y Xiaomi (no está claro si estos últimos dispositivos ejecutaban software de stock o ROM personalizadas). A partir de nuestras propias pruebas y análisis de los informes de los usuarios, los dispositivos Huawei parecen estar menos expuestos al problema del bloqueo del fondo de pantalla.

¡¡¡ADVERTENCIA!!!
¡Nunca establezca esta imagen como fondo de pantalla, especialmente para usuarios de teléfonos móviles Samsung!
¡Hará que su teléfono se bloquee!
¡No lo intentes!
Si alguien te envía esta foto, ignórala. pic.twitter.com/rVbozJdhkL

– Universo de hielo (@UniverseIce) 31 de mayo de 2020

El problema afecta a los teléfonos actualizados con Android 10, pero resulta que, en realidad, no es nuevo. Los usuarios han estado informando problemas similares durante un par de años, y el mes pasado Android Police informó sobre lo que parece ser un problema estrechamente relacionado que afecta específicamente a los teléfonos Pixel que ejecutan la aplicación Google Wallpapers.

Le preguntamos a un desarrollador qué está pasando

Es un problema extraño que tiene el potencial de convertirse en un problema más amplio, especialmente si los trolls se involucran. Es fácil imaginar personajes desagradables que atrapan fondos de pantalla y los envían a usuarios desprevenidos como una “broma”.

Entonces, ¿qué está pasando?

Hemos visto algunas explicaciones sobre el problema, la mayoría de ellas relacionadas con el espacio de color de la imagen, que va más allá de lo que puede manejar SystemUI de Android y provoca un bloqueo.

Para tener una mejor idea de lo que está sucediendo con este bloqueo de fondo de pantalla de Android, nos comunicamos con Davide Bianco, un desarrollador de Android que lidera el proyecto ROM personalizado POSP, quien envió un parche inicial para el problema al rastreador de errores AOSP.

Davide explicó gentilmente a los lectores de Android Authority cómo una imagen puede causar tales problemas, advirtiendo que es su “toma personal”. A continuación hay una explicación ligeramente editada de él:

El problema principal aquí es que SystemUI solo maneja imágenes sRGB para el fondo de pantalla y no tiene ninguna verificación contra fondos de pantalla que no sean sRGB. Esto puede conducir a un bloqueo particular en la clase ImageProcessHelper, ya que una variable utilizada para acceder a una matriz supera los límites de la matriz.

Como referencia, aquí está la definición del método.

Esta variable se llama y, y es la suma de los valores actuales de píxeles rgb escaneados. Este píxel se obtiene escaneando cada fila y columna de la superficie de la imagen en escala de grises. Cada vez que obtenemos un píxel, le asignamos a y la suma de sus valores rgb (generalmente max es 255) y usamos dicha variable para acceder a un elemento de la matriz de histograma (cuyo tamaño es 256 max) y hacemos cosas con dicho elemento.

Ahora, para imágenes en escala de grises normales, la suma de los valores rgb es siempre 255, pero esta no es una imagen normal. La variable y supera 255, y genera una excepción fuera de los límites (cualquier excepción en SysUI se trata como fatal, lo que lleva a un bucle infinito de bloqueos porque la imagen se procesa cada vez que se inicia SysUI). Ahora, una solución podría ser agregar una verificación después de que a y se le asigne un valor que básicamente establece y a 255 si alguna vez supera el límite máximo. Esto realmente funciona, pero tenemos una peor calidad por alguna razón.

Los muchachos de LineageOS pudieron descubrir que este problema en particular ocurre debido al redondeo deficiente, principalmente porque los valores de rgb siempre se redondearon al techo en lugar del redondeo normal. Pudieron arreglarlo redondeando manualmente los valores y aparentemente este método también conserva la calidad, pero realmente no veo cómo, principalmente porque SysUI parece siempre convertir la imagen a sRGB, lo que lleva a una pérdida de color cuando el espacio de color es más grande

También fue descubierto por un desarrollador de 9to5Google (Nota del editor: el desarrollador es Dylan Roussel, un desarrollador de Android y colaborador de 9to5Google) que el problema no ocurre en Android 11 ya que la imagen siempre se convierte a sRGB antes de que se procese de alguna manera.

También intenté crear mi propia imagen rota con Photoshop o Gimp, pero SysUI siempre convirtió la imagen en un espacio de color seguro, lo que no provocó ningún bloqueo (sino una pérdida de colores). Incluso intenté extraer el perfil de color de la imagen rota y usarlo en una nueva imagen, pero aún así no pude bloquear SysUI.

Hay buenas noticias, y hay malas noticias.

La mala noticia es que el problema ahora está a la vista, y puede apostar que algunas personas lo usarán para hacer travesuras. Más preocupantemente, este error (o uno muy similar) parece haber sido un problema durante al menos un par de años, sin ninguna acción visible de Google.

También son malas noticias: si eres víctima de una broma (o de tu propia curiosidad), no hay un método fácil y sin dolor para deshacerla. Al menos, el restablecimiento de fábrica permanece como último recurso, pero aún no recomendamos probarlo en su propio dispositivo.

Lee a continuación: Los mejores fondos de pantalla de Android: fondos de pantalla predeterminados de más de 125 dispositivos Android

La buena noticia es que esto parece ser un error directo, en lugar de malware o algo más nefasto. Decimos “parece” porque no hemos recibido noticias de Google para confirmar. También buenas noticias: este error no será un problema una vez que Android 11 aterrice a finales de este año.