El juego de mesa "Hitster" funciona proporcionando a los jugadores tarjetas físicas que contienen códigos QR. Cuando se escanean a través de la aplicación móvil Hitster, estos códigos activan la reproducción de canciones específicas mediante suscripciones de Spotify o Apple Music. Debido a que la aplicación requiere una suscripción activa para funcionar correctamente, un investigador se propuso investigar cómo se almacena y protege el mapeo entre los IDs de las tarjetas y las pistas musicales dentro del software.

Un primer plano de un código QR en una tarjeta física
La aplicación móvil Hitster escanea códigos QR en tarjetas físicas para activar la reproducción de música.wuemeli.com

El investigador investigó cómo la aplicación mapea estos códigos QR escaneados a pistas musicales específicas.

Una tarjeta física del juego de mesa Hitster
Las tarjetas físicas sirven como la interfaz principal para la selección de música del juego Hitster.wuemeli.com

El juego funciona proporcionando a los jugadores tarjetas físicas que contienen códigos QR.

Al descompilar el APK de Android utilizando `jadx`, el investigador identificó varios archivos JSON en los recursos de la aplicación, incluido uno llamado `gameset_database_4.json`. Este archivo parecía estar cifrado mediante codificación Base64 seguida de cifrado AES (Advanced Encryption Standard). Al analizar el código fuente Java, específicamente un archivo etiquetado como `k43.java`, el investigador trazó la lógica de descifrado. El proceso reveló que la aplicación utiliza el modo AES-GCM, donde deriva una clave secreta a partir de una cadena codificada en el código combinada con un hash de la longitud restante de los datos. A través de la colaboración con otros miembros de una comunidad de desarrolladores, el investigador finalmente recuperó esta cadena oculta aplicando una operación XOR a dos arreglos de bytes encontrados en el código base, lo que le permitió escribir un script personalizado en Rust para descifrar la base de datos localmente.

Este esfuerzo produjo un archivo que contenía aproximadamente 31,000 mapeos de IDs de tarjetas a pistas musicales en múltiples regiones. Sin embargo, la investigación finalmente reveló un camino más simple: mientras que la aplicación local intentaba ocultar estos activos mediante un cifrado complejo, la misma información era accesible sin ninguna medida de seguridad en un servidor público. Al navegar a una URL de activos específica (`hitster.jumboplay.com/hitster-assets/`), el investigador descubrió el archivo completo `gameset_database.json` en un estado sin cifrar. Esto resalta una discrepancia común entre la ofuscación en el lado del cliente y la exposición en el lado del servidor, donde los desarrolladores pueden centrarse en ocultar los datos dentro del binario de la aplicación mientras los dejan disponibles públicamente en su infraestructura web.