#разработка_игр #взлом
Возник такой вопрос, ответ на который хочется уточнить. Иногда можно встретить различные "хаки" к играм, к примеру в 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 - пример высокоуровневого хака игры :). Ссылку дать не могу, т.к. на данный момент насколько я понял этот проект прекратил свое существование.
Комментариев нет:
Отправить комментарий