Recibí un juego de mesa llamado "Hitster" como regalo. Es un juego donde identificas canciones y adivinas el año de lanzamiento, artistas, etc. En cada tarjeta encontrarás el nombre del artista o banda, el año en que salió la canción y el título de la canción. En la parte de atrás hay un código QR que escaneas usando la aplicación Hitster, que luego reproduce la música a través de Spotify o Apple Music. Lamentablemente, la aplicación requiere una suscripción de Apple Music o Spotify. En este artículo de blog, me sumergiré en el agujero negro de ingeniería inversa de la aplicación Android y eludiré su muy desastrado intento de ocultar los datos.
En el frente de cada tarjeta encontrarás el nombre del artista o banda, el año en que se lanzó la canción y el título de la canción. En la parte de atrás hay un código QR. Escanearlo te lleva a una URL con dos cosas en su ruta: la región del juego (DE en mi caso) y el ID de la tarjeta. La música luego comienza a reproducirse en la aplicación o a través de Spotify. Esto significa que hay un mapeo de ID de tarjeta ⇒ pista de Spotify. También hay múltiples versiones de tarjetas por región, por lo que el ID de la tarjeta por sí solo no es suficiente para identificar una canción.
Obtuve el APK de la aplicación de algún sitio web sospechoso de descarga de APK de Android, usé jadx para obtener el código Java decompilado. Después de indagar un poco, encontré algunos archivos JSON bajo res/raw. Uno de ellos se llamaba gameset_database_4.json y parecía estar encriptado. Ejecuté una herramienta para identificar el formato y me respondió como Base64. Esto es una codificación, así que lo decodifiqué primero. El resultado aún no era legible y adiviné que estaba encriptado con AES o algo similar. Nunca había hecho ingeniería inversa de una aplicación Android antes, así que simplemente busqué globalmente AES. ¿Adivinas qué? ¡Hubo un archivo llamado k43.java con todo el proceso de descifrado completamente expuesto ante mí!
FAQ P: ¿Cómo descifra la aplicación Hitster su base de datos de juego?
FAQ R: La aplicación utiliza un archivo JSON encriptado con Base64 y AES/GCM/NoPadding. La clave de descifrado se deriva usando SHA-256 de una concatenación de una cadena numérica y una cadena secreta. El IV es los primeros 12 bytes de los datos decodificados.
Fuente: Hacker News · Resumido por HeadlinesBriefing