Вступление
Здравствуй, пользователь форума. В этой статье поговорим об античите который используется в основном играх от Valve, как он работает и т.д. Информации в публичном доступе достаточно много, но в этой статье я постараюсь объединить все источники и добавить своей информации которую я узнал в ходе разработки читов под этот античит. Итак.
VAC (Valve Allows Cheats Valve Anti-Cheat) — ring3 (usermode) античит компании Valve (далее античит) который используется в популярных играх как: CS:GO, Dota 2, TF2, Garry’s Mod, и так далее…
Модули
Для начала, отмечу, что античит разделён на множество модулей которые скачиваются с серверов, проще говоря, им не обязательно обновлять игру либо Steam чтобы добавить новый модуль либо модифицировать старый. У каждого модуля своя роль, допустим, один модуль отвечает за получение информации о системе, второй получает список всех активных процессов и хэндлов и т.д. Также, у античита есть два сценария загрузки модулей в процесс: Manual Map, LoadLibrary. При версии VAC2 всё грузилось через LoadLibrary, распаковывая модули в папку %temp%. Сейчас же при версии VAC3 античит грузит модули напрямую из памяти используя Manual Map. У каждого из модулей есть экспортируемая функция которую можно назвать точкой входа: _runfunc@20
. Как вы наверное поняли, она вызывается после загрузки модуля в процесс игры. Им довольно удобно использовать модули для своей нейронной сети, т.е если античит обнаружил читера наверняка, они могут не блокировать его сразу, а подпитать свою нейронную сеть информацией. Также у модулей зашифрованы импорты, используется ICE шифрование для общения с сервером.
Спойлер: steamservice.dll pseudo
Сводка
IDB довольно старая (год), но не важно, скорее всего ничего не поменялось.
Кому интересно посмотреть самому, вот string xref:
Assertion Failed: pModule->m_pModule == NULL
Запуск
Люди почему-то думают, что античит активен только при игре на защищённых серверах, и это отчасти верно, все основные модули грузятся только уже при игре на сервере. Но и есть модули которые грузятся и в сам Steam, и при параметре -insecure
;). Но ничего опасного как правило в них нет, кроме отдельных случаев конечно же (распишу чуть позже) . При запуске игры, одним из первых грузится модуль отвечающий за получение информации о системе, вне зависимости от параметра -insecure
(размер .text секции: 0x5C00) . Чуть позже грузится модуль который я описывал выше, получающий список активных процессов и хэндлов (размер .text секции: 0x4A00) . Эти модули можно назвать “безобидными”, остальные же грузятся при непосредственной игре на серверах защищенных античитом. Ну и одним из преимуществ того, что античит раздроблен на множество частей это то, что сразу все модули не сдампить, а некоторые из них могут быть неактивными до поры до времени и вообще не загружаться.
Серверные проверки
Затрону тему с серверными проверками, при нарушении которых выдается статус “ненадежный”.
Позиция углов игрока: если
x
меньше -89 или больше 89; еслиy
меньше чем -180 или больше чем 180; еслиz
меньше чем -50 или больше 50.
Использование уязвимостей ломающие игру (краши серверов, телепорты и т.д)
На самом деле, это не совсем относится к античиту, но всё же
Доверенный режим
Инновации компании Valve которые по началу конфликтовали со сторонними античитами, и сломали работу некоторых программ для записи (как OBS) . На самом деле, интересная мера защиты от ньюфаг читеров, усложняя им жизнь. А ведь что было нужно раньше? Качаешь ProcessHacker, любую DLL с форума и пошёл играть. Данная мера хоть немного, но думаю снизила наплыв новых читеров, хотя некоторые личности вообще называли это “новым античитом”, забавно. Данная мера, в основном от LoadLibrary инжекторов, Manual Map инжекторы как работали так и работают (хотя античит и так проверял по PEB все загруженные модули, Manual Map изначально не оставляет там следа, чего не скажешь о LoadLibrary) . Как это работает?
Спойлер: csgo.exe pseudo
Сводка
Хук ntdll
функции. Данный хук неактивен при параметре -insecure
, также пропускает DLL при условии, что она в системной директории Windows
Это можно обойти путём обычного патча jmp hook_func
на адрес оригинальной функции. Либо использовать “лазейки” описанные раннее.
Фактор доверия
А теперь самое интересное Slightly smiling face . Система, которая определяет в какой пул кидать игрока. Когда аккаунт только создан, у него изначально зелёный траст, который после будет меняться в зависимости от % побед и репортов. Достаточно интересная система, которая отделяет явных читеров от “честных” игроков. Кстати, фактор доверия будет всегда красным если вас пометили для блокировки, а также будет загружаться больше модулей для получения большей информации о читерах/чите. Помните, я говорил про модуль который собирает информацию о системе? Так вот, теперь вспоминаем волну блокировок “честных” людей, которые рейджили на твинках :D. Кстати, если у вашего компьютера “плохая репутация” и множество забанненых аккаунтов за плечами, то при создании твинка, либо при покупке аккаунта, на аккаунте сразу будет красный фактор доверия и скорее всего, последует блокировка. Возможно эта система уже неактивна, кто знает.
Итоги
Компания Valve могла пойти по стопам BattleEye, VanGuard и т.д, но решила создать своё решение от нечестных игроков, которое имеет потенциал в будущем. Я не стал описывать тут всё, что есть т.к времени особо не было, описал лишь основную часть.
Надеюсь я описал всё, если что упустил пишите — я дополню. Лично для меня интересно, на сколько аудитория форума поменялась, что вам интересно и сколько таковых, так что возможно ещё напишу пару статеек. Хорошего дня и с рождеством Slightly smiling face .