Взламываем игры в тг. Часть 2

Взламываем игры в тг. Часть 2

100 Баксов [100$]

Сегодня удалось хакнуть еще одну игрушку в тг, рассказываю как это было.

По сути, я просто обошел алгоритмы игры, и заставил ее сохранить мне тот счет, который я хочу

История

В одном из чатов ребята соревновались в игрушке Karate Kido 2, и чтобы выйти на первое место нужно было набрать более 40 тысяч очков.

Так как ранее я уже успешно накручивал себе счет в телеграм-игре, решил попробовать повторить опыт, тем более механика многих тг-игр похожа.

Историю о моем первом хаке игры можно почитать здесь - https://telegra.ph/Kak-ya-vzlomal-igru-i-vyshel-v-top-11-25


Начало исследования

Первым делом, запускаем игру с пк, а не с телефона. Для этого я авторизовался в телеграме через Google Chrome, открыл инструменты разработчика (DevTools) и запустил игру.

Сыграв коротенькую игру, обратил внимание, что на сервер уходит http запрос, в котором передается мой текущий счет (score) и секретный хэш checksum, который генерится в игре автоматически.

Чисто теоретически, нет никаких сложностей заменить score на свое значение и отправить запрос снова.

Но предыдущий опыт показал, что checksum здесь не просто так, и в нем шифруется наш счет.

Соответственно, остается понять как формируется этот самый checksum.

Ищем загадочное checksum

Для этого открываю DevTools - Sources - Find All, фильтруем контент по слову checksum и видим, что на этот раз разработчики явно заморочились.


Вот как формируется checksum:

checksum: l()("".concat(n || 0, ":").concat(t || 0, ":").concat(s, ":").concat(d || "", ":crmjbjm3lczhlgnek9uaxz2l9svlfjw14npauhen"))

Как видим, в нем используются переменные n,t,s,d, чуть выше по коду можно увидеть, что n - это счет (score), t - игровое время (playtime), s - ссылка на игру (gameUrl), а d - какое-то gameStateData

Плюс они применяют механизм замыкания, применяя метод l(), который хоть убейся я так и не нашел откуда импортируется.

Поняв, что самостоятельно checksum я не сгенерирую, меня посетила такая мысль: а что если я очень быстро приостановлю выполнение кода, подменю некоторые цифры на свои, и заставлю игру "схавать" измененные значения.

Подмена счета

Для того, чтобы приостановить выполнение JavaScript в браузере, можно воспользоваться такой технологией как брейкпоинт (breakpoint)

Для этого я просто кликаю чуть левее перед той строчкой кода, где хочу поставить игру на паузу. Я выбрал кусочек кода прямо перед рассчетом checksum. Запускаем игру снова.

Как видно на скриншоте, я проиграл, но результат игры еще не известен, так как игра приостановилась именно на указанной мной строке кода. Теперь в правой части экрана я заменяю набранный счет 110 на желаемый (я захотел 50505, выглядит красиво), и просто жмем кнопку продолжить.

Ура!

То самое checksum "схавало" подставленный мной счет, и сгенерировал такой хэш, который для сервера стал валидным.

Таким образом снова удалось забрать первое место, затратив на исследования всего несколько минут.

Игра, в которую мы играли, называется Karate Kido 2
Запускается в телеграме через бот @gamee


P.S. Исследовать игру мне помогли знания и навыки, которыми обладают тестировщики (или QA инженеры). Освоить эти навыки можно здесь 👉 https://telegra.ph/Dostupnaya-professiya-s-zarplatoj-bolee-200-tysyach-rublej-03-03


Другие мои проекты: @baxproject
Мой канал - @bax_100



Report Page