Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Хаки к играм и их создание

#разработка_игр #взлом


Возник такой вопрос, ответ на который хочется уточнить. Иногда можно встретить различные
"хаки" к играм, к примеру в warcraft 3/dota пишут различные maphack: запускаем приложение
и оно, к примеру, показывает в цифрах скорость регенерации health points, открывает
всю карту и т.п.

В Call Of Duty : Modern Warfare 3 можно запустить приложение и сделать inject dll
файла в запущенных экзэшник игры, после чего бот ходит и стреляет за тебя, в смысле
стоит лишь, чтобы враг попал в область видимости - бот сразу же точно сам стреляет
и убивает.

Почему возник вопрос... Я-то в игры играю редко, но само то, как делаются такие хаки
- стало интересно, задумался... Как это они так делают? Что ли как-то модифицируют
какие-то игровые значения или что? Reverse Engineering может быть?

Допустим, как в Modern Warfare 3 выделяет оппонента издалека красным квадратом -
как? Как программа знает об этом? И что вообще даст inject dll файла?

А как заставляет бота стрелять автоматически..

Сложно ли это и что за сферы нужно учить? (может кому-то вопрос покажется легким
или даже тупым, но я, к сожалению, не профи в этом деле, поэтому хотел бы задать такой
вот вопрос)
    


Ответы

Ответ 1



Допустим, как в Modern Warfare 3 выделяет оппонента издалека красным квадратом - как? Если очень примитивно, то на карте вы расположены с определенными координатами. Между машинами играющих идет постоянный обмен пакетами, в которых содержаться координаты всех игроков. Именно поэтому вы и видите или не видите каждого игрока в определенный промежуток времени. Но эти координаты предназначены в первую очередь для машины, которая должна знать, где "отрисовать" того или иного игрока. Хак перехватывает эти пакеты и "рассказывает" вам где кто находится, даже если он не в поле вашего зрения. А подсветить красным квадратиком - уже дело техники ))

Ответ 2



Сильно упрощенно пример отрисовки прямоугольника можно представить следующим образом. Исходный код игры: class GlobalContext { static GameDev.IGame Game = new GameDev.Game(); // ..... } Злоумышленник разрабатывает следующий код: namespace GameHack { // наследуемся от класса разработчика игры class Game : GameDev.Game { protected override DrawPlayer(PlayerInfo pi) { // рисуем все что было раньше base(pi); // получаем координаты прямоугольника, ограничивающего модель игрока Coordinates border = this.GetPlayerBorderRectangle(pi); // рисуем закрашенный прямоугольник по этим координатам this.DrawBar(border, Color.Red); } } } И при inject dll внедряет в программу этот код и выполняет дополнительно следующий: GlobalContext.Game = new GameHack.Game(); Таким образом при отрисовке изобретать велосипед не обязательно, а можно использовать уже готовую функциональность игры. Злоумышленнику достаточно лишь добавить небольшой штрих в урпавлении программой. В моем примере для создания этого штриха использовался шаблон проектирования декоратор. Кстати мультиплеер в МВ2 был реализован на .NET и за него отвечал интерфейс IWNet. "Сторонние разработчики" создали свою реализацию интерфейса IWNet и назвали ее AlterIWNet. Альтернативный мультиплеер AlterIWNet - пример высокоуровневого хака игры :). Ссылку дать не могу, т.к. на данный момент насколько я понял этот проект прекратил свое существование.

Комментариев нет:

Отправить комментарий