optimalnee писал(а):
По идее есть некоторые защищенные процессы в win (те же процессы антивируса), только я не в курсе - можно ли получить к их памяти доступ. И лазить по памяти для них нормально. BIMSantiwowus звучит
. Возможно разграничение прав в системе может как-то помочь. Ну или драйвером мышки прикинуться и кликать, кликать, кликать
Но о реализации подобного нет знаний судить.
Для начала, пожалуй, стоит выяснить, что собой представляет Warden. Система состоит из двух частей: серверной и клиентской, и, само собой, мы будем иметь дело только с клиентской частью. Warden не является неотъемлемой частью игрового кода. Код клиентской части подгружается динамически с Battle.net в виде образов, отдаленно напоминающих по своей структуре Portable Executable, которые затем отображаются по случайным адресам в адресном пространстве игрового процесса. Стоит также отметить, что большая часть кода клиентской части Warden обфусцирована и может изменяться от одной игровой сессии к другой.
Warden представляет собой пассивный механизм защиты, и все, чем занимается клиентская часть Warden, — это сбор информации, которая впоследствии отправляется серверной части. В целом примерный алгоритм работы клиентской части Warden выглядит следующим образом:
Получение списка относительных адресов для сканирования.
Считывание необходимого количества байт по каждому из адресов.
Расчет хешей.
Компоновка пакета с хешами и отправка его на сервер.
Процедура повторяется с некоторой периодичностью несколько раз в минуту. Если серверная часть обнаруживает несоответствие хешей эталонным значениям, считается, что используются запрещенные модификации кода. Каких-либо незамедлительных действий при этом не предпринимается — аккаунт просто помечается как нарушающий правила, а о том, что ты «попался» можно будет узнать лишь через некоторое время, когда учетная запись уже будет заблокирована. Целиком аккаунт Battle.net (который может содержать множество прикрепленных лицензий) при этом не блокируется — только учетная запись игры.
Нейтрализовать Warden, просто отключив его либо заблокировав его работу, не удастся: система устроена таким образом, что серверная часть в любом случае должна получать от клиентской ответные пакеты, которые, в свою очередь, должны содержать информацию о сканировании. Следовательно, выход только один — не попадаться. Добиться этого можно как минимум тремя способами:
Обходить стороной заведомо опасные адреса при внесении модификаций в код.
Использовать косвенное внедрение, перехватывая один из методов DirectX — Device.EndScene().
Прятать все совершенные модификации на лету (при сканировании).
Первый вариант будет работать до поры до времени и по большому счету обходом как таковым не является. Второй вариант (перехват EndScene()) действительно неплохо работает, функция вызывается после завершения построения каждого выводимого на экран кадра и перехватывается, например вполне легальными программами видеозахвата, что не дает Warden возможности однозначно трактовать изменения в коде функции как запрещенные модификации. Тем не менее вариант больше годится для ботов и успешно ими эксплуатируется на протяжении уже нескольких лет. Третий вариант идеально подходит для статичных модификаций (как, например, включение отрисовки всей карты в Star Craft — maphack), кроме того, его реализация сама по себе интереснее и технологичнее.