«Взлом» Telegram-игры или минусы вайбкодинга
Сегодня вечером в одном популярном телеграм-канале увидел вот такой пост:
Игра была знакомой, классический Flappy Bird.
Ранее я уже сталкивался с плохой безопасностью приложения на iOS, разработанного с помощью ИИ. Если кому интересно, почитать можно здесь.
Ставим цель
Цель простая: используя недочеты нейросети, забраться на верхушку лидерборда. Опыт показал, что выходить на первое место нужно без лишнего внимания. Поэтому никаких красивых и огромных чисел в результатах, просто обойдем текущего чемпиона на несколько очков.
Начало исследования
В первую очередь запустим игру с браузера на ПК, чтобы удобно работать с инструментами разработчика devtools.
Сыграв первую тестовую игру сразу видим запрос к api, отправляющий результаты.
В запросе не оказалось авторизации, поэтому просто копируем его (copy -> copy as curl
) и работаем напрямую с api.
Примечание: у меня уже был открыт Postman, поэтому дальше я работал с ним. Но вообще, измененный запрос можно было отправить и из консоли браузера.
Вставляю в Postman: он из под коробки распознает curl и сам заполняет все атрибуты.
В теле запроса ничего хитрого не оказалось, initData
- строка, которую передает сам телеграм, поэтому ее не меняем. Следующий объект gameplayData
- это то что нам надо.
Для правдоподобности в новых значениях решил пропорционально увеличить количество прыжков и длительность игры. Ну и, конечно, сам счет.
Как видим из скрина выше - запрос прошел, а значит самое время обновить лидерборд.
Что можно было бы улучшить?
Реализовать проверку целостности данных.
Каждый запрос должен быть подписан с использованием секретного ключа. Это позволило бы серверу отклонять попытки подмены данных.Перенести расчёты на сервер.
Не доверять данным, присылаемым с клиента. Вместо этого отправлять на сервер события (например, прыжок, столкновение) и вычислять прогресс и очки на стороне сервера.Ввести базовые проверки на аномалии.
Например, валидировать, что длительность сессии соответствует ожидаемому времени игры и не выходит за реалистичные пределы.
Ну а мы в очередной раз забираем первое место и убеждаемся, что контроль качества должен оставаться за человеком (да простят меня нейросети).
Кстати, в своем телеграм-канале «Деплой в пятницу» я публикую всё, что не тянет на полноценную статью, и иногда туда попадает даже что-то полезное.