Pull to refresh

«Взлом» Telegram-игры или минусы вайбкодинга

Level of difficultyEasy
Reading time2 min
Views2.1K

Сегодня вечером в одном популярном телеграм-канале увидел вот такой пост:

Не указываю ссылок, чтобы не тыкать пальцем
Не указываю ссылок, чтобы не тыкать пальцем

Игра была знакомой, классический Flappy Bird.

Вот так она выглядит
Вот так она выглядит

Ранее я уже сталкивался с плохой безопасностью приложения на iOS, разработанного с помощью ИИ. Если кому интересно, почитать можно здесь.

Ставим цель

Цель простая: используя недочеты нейросети, забраться на верхушку лидерборда. Опыт показал, что выходить на первое место нужно без лишнего внимания. Поэтому никаких красивых и огромных чисел в результатах, просто обойдем текущего чемпиона на несколько очков.

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

В первую очередь запустим игру с браузера на ПК, чтобы удобно работать с инструментами разработчика devtools.

запустилось, теперь очень удобно
запустилось, теперь очень удобно

Сыграв первую тестовую игру сразу видим запрос к api, отправляющий результаты.

В запросе не оказалось авторизации, поэтому просто копируем его (copy -> copy as curl) и работаем напрямую с api.

Примечание: у меня уже был открыт Postman, поэтому дальше я работал с ним. Но вообще, измененный запрос можно было отправить и из консоли браузера.

Вставляю в Postman: он из под коробки распознает curl и сам заполняет все атрибуты.

В теле запроса ничего хитрого не оказалось, initData - строка, которую передает сам телеграм, поэтому ее не меняем. Следующий объект gameplayData- это то что нам надо.

Для правдоподобности в новых значениях решил пропорционально увеличить количество прыжков и длительность игры. Ну и, конечно, сам счет.

Как видим из скрина выше - запрос прошел, а значит самое время обновить лидерборд.

Что можно было бы улучшить?

  1. Реализовать проверку целостности данных.
    Каждый запрос должен быть подписан с использованием секретного ключа. Это позволило бы серверу отклонять попытки подмены данных.

  2. Перенести расчёты на сервер.
    Не доверять данным, присылаемым с клиента. Вместо этого отправлять на сервер события (например, прыжок, столкновение) и вычислять прогресс и очки на стороне сервера.

  3. Ввести базовые проверки на аномалии.
    Например, валидировать, что длительность сессии соответствует ожидаемому времени игры и не выходит за реалистичные пределы.

Ну а мы в очередной раз забираем первое место и убеждаемся, что контроль качества должен оставаться за человеком (да простят меня нейросети).

Кстати, в своем телеграм-канале «Деплой в пятницу» я публикую всё, что не тянет на полноценную статью, и иногда туда попадает даже что-то полезное.

Tags:
Hubs:
+7
Comments9

Articles