J'ai reçu un jeu de plateau nommé "Hitster" en cadeau. C'est un jeu où vous identifiez des chansons et devinez l'année de sortie, les artistes, etc. Sur chaque carte, vous trouverez le nom de l'artiste ou du groupe, l'année à laquelle la chanson est sortie et le titre de la chanson. Au dos, il y a un code QR que vous scannez à l'aide de l'application Hitster, qui joue ensuite la musique via Spotify ou Apple Music. Malheureusement, l'application nécessite un abonnement Apple Music ou Spotify pour fonctionner. Dans ce billet de blog, je vais descendre dans le trou noir de l'ingénierie inverse de l'application Android et contourner leur très malhonnête tentative de cacher les données.
Sur le recto de chaque carte, vous trouverez le nom de l'artiste ou du groupe, l'année à laquelle la chanson est sortie et le titre de la chanson. Au dos, il y a un code QR. Le scanner vous amène à une URL dont le chemin contient deux éléments : la région du jeu (DE dans mon cas) et l'ID de la carte. La musique commence ensuite à jouer dans l'application ou via Spotify. Cela signifie qu'il existe un mappage de ID de carte ⇒ piste Spotify. Il y a également plusieurs versions de cartes par région, donc l'ID de la carte seul n'est pas suffisant pour identifier une chanson.
J'ai obtenu l'APK de l'application depuis un site web téléchargant des APK Android douteux, j'ai utilisé jadx pour obtenir le code Java décompilé. Après avoir fouillé un moment, j'ai trouvé plusieurs fichiers JSON sous res/raw. L'un d'eux était nommé gameset_database_4.json et semblait être chiffré. J'ai exécuté un outil pour identifier le format, et il m'a répondu en Base64. C'est un encodage, donc je l'ai décodé en premier. Le résultat n'était toujours pas lisible, et j'ai deviné qu'il était chiffré avec AES ou quelque chose de similaire. Je n'avais jamais fait d'ingénierie inverse d'une application Android, donc je me suis simplement lancé dans une recherche globale de AES. Et devinez quoi ? Il y avait un fichier nommé k43.java avec tout le processus de déchiffrement entièrement mis en évidence devant moi !
FAQ Q : Comment l'application Hitster déchiffre-t-elle sa base de données de jeu ?
FAQ R : L'application utilise un fichier JSON chiffré avec Base64 et AES/GCM/NoPadding. La clé de déchiffrement est dérivée à l'aide de SHA-256 d'une concaténation d'une chaîne numérique et d'une chaîne secrète. L'IV est les premiers 12 octets des données décodées.
Source: Hacker News · Résumé par HeadlinesBriefing