Мапхак и как его едят

Первый принцип  WC3 — воспроизводимость. Все компьютеры должны владеть всей ситуацией, знать о каждом объекте, существующем в игре, на равных. В противном случае быстро возникнет десинхронизация. Но, раз и клиент, и сервер знают, где находятся юниты врага, можно об этом узнать и самому игроку, разобравшись в строении памяти игры?



Быстренько по фактам

Каждый компьютер знает, где находится каждый юнит. Хакеру остается лишь подсмотреть в нужные зоны памяти и обозначить их как-то на своём экране. Но, как правило, такие сложности вовсе ни к чему, ведь именно процесс отрисовки экрана знает, какие юниты должны быть видимы, а какие нет. Обнаружив одну эту функцию и подменив условие «Юнит видим» на "true", хакер будет видеть всех юнитов без каких-либо проблем. Игра будет сама отрисовывать юнитов, которые, как она считает, видно в данный момент времени, независимо от их местонахождения.

Этот хак затрагивает только функцию отрисовки экрана и ничего кроме. Конечно, в далеком прошлом были более тупые хаки, которые прямо меняли видимость юнитов внутри игры, но это небезопасно — вероятность десинхронизации крайне высока. Простой пример:
  • Враг стоит в тумане войны, его не видно, но рядом с ним — нейтральный монстр;
  • Хакер видит нейтрального монстра и бросает в него цепную молнию;
  • Цепная молния, считая, что врага видно, прыгает на него и наносит урон;
  • На компьютере обычного игрока молния не прыгнула, т.к. юнит считается невидимым.
Поэтому все мапхаки, которые можно найти сейчас, работают чисто с функцией отрисовки. Конечно, есть и авторские наработки, но в публичный доступ они вряд ли попадут — слишком дороги найденные абузы с точки зрения самого хакера, чтобы разглашать их кому попало.

Навороты
Наверное, все слышали про Dream Dota, творение безбашенных китайцев, позволяющее поставить на скрипты половину игрового процесса. Эти ребята действительно знают толк в извращениях и умеют программировать так, чтобы не оставлять следов. Такие дополнения включают в себя хак-составляющую, т.к. читают данные из памяти игры, но называть их мапхаком некорректно. Скорее, комплекс инструментов для автоматизации игры.



Именно мапхаки показали, сколько возможностей движка  варкрафта Blizzard оставили за кадром, не дав никакого доступа к ним и их модификациям. По сути, именно благодаря стараниям хакеров было получено столько информации о внутренностях игры, адресах памяти и технических особенностях реализации тех или иных функций. Конечно, куда-то продвинуться получилось крайне слабо (мы всё так же вынуждены ждать патча 1.27, а не создавать его саморучно), но шансы были неплохие.

Особенности работы мапхаков

Будем говорить о типичном таком легком мапхаке, который показывает юнитов на карте и ничего кроме. Туман войны при этом не раскрывается.

Юниты подсвечены только на уровне видеообработчика. Если кликнуть по ним, то будет отдан приказ по координате, а не по юниту. Если приказать сделать что-то, что работает только на юнита, то высветится ошибка «нужно разведать». С точки зрения игры цель закрыта, а тот факт, что ошибка «нужно разведать» обрабатывается локально и никак не пересылается другим игрокам, делает обнаружение этого хака невозможным.

Выделения в тумане — атрибут очень старых мапхаков, и сегодня таких почти не осталось. Технически, ничего и никогда не мешает выделить любого юнита. Нельзя лишь надеяться, что он будет следовать приказам игрока — контроля над ними нет, поэтому функция абсолютно безопасна с точки зрения синхронизации. Хак лишь вмешивается в процесс отрисовки панели навыков и отображает абилки так, словно юнит находится под контролем игрока.



Клики в туман — самый старый, банальный и верный способ выявить хакера. Но, с ростом популярности этой методики, таких хаков почти не осталось. От неё чаще страдают обычные игроки, чем сами хакеры.

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

Отложенное выделение
Для экономии трафика и количества пересылаемых данных  WC3 откладывает синхронизацию выделенных юнитов на некоторое время. Пакет «игрок выделил таких-то юнитов» отправляется с задержкой, которая увеличивается пингом до сервера, затем пингом от сервера до клиентов, а затем подтверждением сервера, что все игроки получили пакет. При этом на компьютере игрока юнит становится выделен мгновенно — просто нельзя отдать никакой приказ или повлиять на юнита, пока другие клиенты не узнают от этом. Приказы будут просто поставлены в очередь.

Например, твоего героя убили и ты нажал на героя врага, который тут же скрывается в тумане. На твоей стороне это выглядит так:
Выделение юнита;
  • Постановка пакета «юнит выделен» в очередь;
  • Отправка пакета до сервера — +пинг;
  • Отправка сервером пакетов клиентов — +пинг;
  • Подтверждение сервера «да, юнит выделен, можешь работать с ним» — +пинг.

К концу этого процесса юнит уже будет в тумане войны, а твоё выделение — пустым. Потому что юнит перебежал в туман и игра локально сбросила выделение.

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



Сброс выделения доверен внутренним функциям игры, поэтому оно не пишется в реплей. Если выделенный юнит уходит в туман, выделение сбрасывается и игрок наблюдает пустую панель. В реплее же, если туман войны отключен, сброса не произойдет — ведь юнит не ушел в туман! И кружок выделения будет крутиться под ним, пока игрок снова не произведет выделение.

Важно отметить, что в доте при возрождении выделение производится посредством триггеров и не является реальным действием. Оно пишется в реплей, но, по каким-то причинам, не всегда срабатывает. Поэтому, если ты возродился и начал управлять героем, но не выделил его заново, отдельно, камера выделения продолжит висеть на последем выделенном юните. Это не 100% инфа, т.к. в разных реплеях игра реагировала по-разному и часто «отлипала» самостоятельно, но дает хоть какое-то объяснение зависшему выделению.

Из-за высокого пинга в некоторых случаях выделение может задержаться очень надолго. Такие клики еще сложнее проверить — ведь пинг в игре никак не записывается и неизвестно, был ли это клик в туман или просто долгий ответ-подтверждение.

Противодействие

Мапхаки мешали нормальной игре на многих картах, особенно в ладдере. В связи с этим было предпринято немало попыток избавиться от хакеров.

Самая банальная технология — отлов кликов в туман. Естественно, эффективность крайне низкая из-за редкости таких старых хаков и большого количества ложноположительных срабатываний.

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

Были и некоторые другие попытки, в частности — завалить хак при помощи демонстрации невидимых моделей. Проблема в том, что эта технология подразумевает полное отсутствие настоящего True Sight в игре, который бы мог увидеть эти битые модели и вызвать fatal error. Даже если бы подобное произошло, то добавить отсев невидимых юнитов в мапхак не составило бы труда. Да и намного проще просто избавиться от некорректной модели — ничто не способно скрыть название модели так, чтобы её нельзя было обнаружить.

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



Ответы на ваши заявки

iberville поинтересовался корректностью заявления:
Любое использование МХ, включая safe click и т.д. может быть определено по логам реплея. Детально расписывать нет желания, а если в кратце, то МХ и ему подобные программы используют системные прерывания ОС и прямой запись в ОЗУ компьютера, что при работе клиент-серверно приложения вызывает сбои в протоколе синхронизации. Что в свою очередь можно отследить по логам игры.

Как выше уже отмечено, никаких следов мапхаки давно уже не оставляют. Как заметил Martichora , максимум — можно увидеть пакеты пред-выделения, но лично я подобных не видел в логах. Да и зачем бы их пропускать? И смешно слышать про «сбои в протоколе синхронизации», когда речь идет о простых выделениях, ни на что не влияющих. Неважно, дойдут они до сервера или нет, воспользоваться ими нельзя.

Action Log не даст однозначного вопроса по причине отложенного выделения юнитов из-за пинга. Конечно, если речь идет о том, что где-то кто-то выделил врага, который стоял на фонтане и не был видим последних секунд 5, то да, это наверняка хак. Но сколько таких идиотов осталось в дни, когда полноценные мапхаки лежат в открытом доступе? По пальцам пересчитать

Заключение

Бороться с мапхаками можно только на износ и явно не создателям карт.

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

27 комментариев

avatar
Только самые последние мх, ловят отрисовку варика. А так в основном ловят основные функции и параметры, и подгоняют их хуками. только есть одно но, многие мх проверяют состояния видимости/скрытности с каким-то промежутком времени к примеру каждые 0.05 сек. В принципе этого хватит, чтобы поймать варовскими способами. Мх которые работают с хуками ( внедряются в код функции и получают параметры). Здесь можно их повернуть против хака, сделав игру с мх не комфортным (ловушки). Сейчас на новой версии лода, которую готовлю, ловятся все мх, либо с ними просто невозможно играть.
avatar
Реальный способ нагадить мхашником близзарды выпилили в патче 1.24 c ReturnBug
Тогда можно было из кода карты шариться в памяти варкравта и проверять что там как у читера и вызывать FatallError, чтобы чувак грешил на мх а не на мапу.
Но увы чуваки написали таким образом вирус для читеров (или нет уже неважно) и близзарды закрыли эту возможность.
avatar
а можно сделать мап хаксамому?
avatar
их тлько так и делают. но нужны руки и знания
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.