Age of Empires 2: Age of Kings 24799
Аватар Evernews Evernews

Абсолютный чит: как взломали мультиплеер Age of Empires 2 Definitive Edition

0
0
Поделиться
Телеграфировать

И сумели научить персонажей уворачиваться от выстрелов.

Абсолютный чит: как взломали мультиплеер Age of Empires 2 Definitive Edition

В 2019 году вышел ремастер Age of Empires 2 Definitive Edition с обновленной графикой и кое-каким новым контентом. Картинка поменялась, но в основе игры лежал старый движок — в том числе та часть, что отвечала за мультиплеер.

Команда исследователей безопасности RedRocket сумела взломать мультиплеерный режим Age of Empires 2 Definitive Edition, используя материалы, описывавшие реализацию мультиплеера еще в оригинальных играх серии. В процессе исследователям удалось провернуть несколько интересных трюков.

В мультиплеере Age of Empires 2 нет сервера, хранящего все данные о сессии. Вместо этого игровая логика построена на концепции ходов:

  • Клиент каждого игрока в мультиплеере обсчитывает игру самостоятельно.
  • Любая команда, которую отправляет игрок, должна выполняться двумя ходами позже.
  • Все команды должны верифицироваться и исполняться на всех клиентах.
  • Если клиент не может верифицировать данные и выполнить команду, игра десинхронизируется и матч прерывается.

В идеальном мире, отмечают исследователи, такая архитектура должна хорошо противостоять взлому: если данные верифицируются, то хакеру не удастся манипулировать состоянием игры. Но мультиплеер Age of Empires 2 работает не в идеальном мире.

Сперва исследователи научились управлять своими юнитами. Для этого вручную, с помощью CheatEngine, в памяти процесса Age of Empires 2 Definitive Edition был найден объект одного из юнитов. После изучения объекта исследователи получили представление о его функциях и методах.

Затем был написан бот, внедрявшийся в процесс и управлявший передвижением юнитов с помощью вызова стандартных функций. Он мог, например, автоматически уводить войска из зоны, куда должны упасть снаряды катапульт.

Была проблема — такой трюк можно провернуть только в одиночном режиме. Если запустить бота в мультиплеере, ожидаемо происходит десинхронизация: команды бота не отправляются другим игрокам в сессии.

С помощью реверс-инжиниринга удалось найти функцию, отвечающую за отправку команд передвижения юнитов другим игрокам. Выяснив параметры вызова функции, исследователи переделали своего бота так, чтобы он работал и в одиночном режиме, и в мультиплеере. Тут же выяснился любопытный момент.

Движку игры без разницы, чьи отряды вы передвигаете. Интерфейс Age of Empires 2 позволяет выбирать и контролировать только собственные юниты или здания игрока. Но оказалось, что эта проверка есть только в части кода, отвечающей за интерфейс: в других местах она отсутствует.

Бота модифицировали еще раз: теперь он не управлял юнитами, а просто подменял указатели так, чтобы интерфейс думал, будто игрок имеет право выбрать любого юнита. У остальных частей движка вопросов не возникло: подделка указателей позволила управлять чужими юнитами.

Эксперименты показали, что все проверки делаются только в интерфейсной части игры — как в одиночном режиме, так и в мультиплеере. Внедрившись в код и подменяя указатели, можно делать все, что угодно и в обычном мультиплеере, и в рейтинговом режиме.

Если честно, не ожидал, что это вообще возможно. Запрет игроку передвигать юниты, принадлежащие другому игроку, это одна из первых проверок безопасности, что приходит мне в голову, когда речь идет о стратегии в реальном времени. Но оказалось, что пределов нет: похоже, проверки безопасности вообще отсутствуют.

RedRocket

На всякий случай было решено проделать еще один опыт. В играх серии Age of Empires игроки могут уничтожать свои юниты — например, чтобы вместо них построить кого-то еще. Что будет, если отправить команду убить юнит, который не принадлежит игроку?

Оказалось, что проверок нет и в этом случае. В результате исследователи превратили Age of Empires 2 Definitive Edition в кликер, где можно вручную перебить любое количество противников.

Последним экспериментом стала кнопка «убить всех», реализованная в актуальной версии Age of Empires 2 Definitive Edition для Steam. Она позволяла игроку уничтожить противника в мультиплеере, просто введя его идентификатор.

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

Скорее всего, полагают исследователи, примерно так же устроен мультиплеер и в остальных частях серии. Способов защититься тут не очень много: разработчикам надо реализовать проверки данных для всех методов, вызывающихся при игре в мультиплеер.

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

Теги: Age of Empires 2: Age of Kings, Игры
Аватар Evernews
Evernews
8066 подписчиков