HeadlinesBriefing HeadlinesBriefing.com

Обратная инженерия приложения настольной игры Hitster

Hacker News •
×

Я получил настольную игру под названием "Hitster" в подарок. Это игра, в которой вы определяете песни и угадываете год выпуска, исполнителей и прочее. На каждой карте вы найдёте имя исполнителя или группы, год выхода песни и название песни. Сзади есть QR-код, который вы сканируете с помощью приложения Hitster, которое затем воспроизводит музыку через Spotify или Apple Music. К сожалению, приложение требует подписки на Apple Music или Spotify. В этом блоге я погрузюсь в бездну обратной инженерии приложения Android и обойду их очень некомпетентную попытку скрыть данные.

На лице каждой карты вы найдёте имя исполнителя или группы, год выхода песни и название песни. Сзади есть QR-код. Сканирование его перенаправляет вас на URL с двумя элементами в пути: регион игры (у меня DE) и идентификатор карты. Затем музыка начинает воспроизводиться в приложении или через Spotify. Это означает наличие соответствия между Идентификатором карты ⇒ треком Spotify. Также существует несколько версий карт на каждый регион, поэтому идентификатор карты сам по себе недостаточен для определения песни.

Я получил APK приложения с какого-то подозрительного сайта загрузки APK Android, использовал jadx для получения декомпилированного Java-кода. После изучения я нашёл несколько файлов JSON под res/raw. Один из них назывался gameset_database_4.json и похоже был зашифрован. Я запустил инструмент для определения формата, и он вернул Base64. Это кодировка, поэтому я сначала раскодировал её. Результат всё ещё не был читаем, и я предположил, что он зашифрован с помощью AES или чего-то подобного. Я никогда не делал обратную инженерию приложения Android, поэтому просто начал глобально искать AES. И угадайте что? Был файл с названием k43.java, в котором вся процедура расшифровки была полностью раскрыта передо мной!

FAQ Вопрос: Как приложение Hitster расшифровывает свою игровую базу данных?

FAQ Ответ: Приложение использует зашифрованный файл JSON с кодированием Base64 и AES/GCM/NoPadding. Ключ расшифровки производится с помощью SHA-256 из конкатенации числовой строки и секретной строки. IV является первыми 12 байтами декодированных данных.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing