Информация о Valve Anti-Cheat

5sBPFsJ
Вступление​

Здравствуй, пользователь форума. В этой статье поговорим об античите который используется в основном играх от 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

Сводка

image
Хук ntdll функции. Данный хук неактивен при параметре -insecure , также пропускает DLL при условии, что она в системной директории Windows :smiley:
Это можно обойти путём обычного патча jmp hook_func на адрес оригинальной функции. Либо использовать “лазейки” описанные раннее.

Фактор доверия
А теперь самое интересное Slightly smiling face :slight_smile:. Система, которая определяет в какой пул кидать игрока. Когда аккаунт только создан, у него изначально зелёный траст, который после будет меняться в зависимости от % побед и репортов. Достаточно интересная система, которая отделяет явных читеров от “честных” игроков. Кстати, фактор доверия будет всегда красным если вас пометили для блокировки, а также будет загружаться больше модулей для получения большей информации о читерах/чите. Помните, я говорил про модуль который собирает информацию о системе? Так вот, теперь вспоминаем волну блокировок “честных” людей, которые рейджили на твинках :D. Кстати, если у вашего компьютера “плохая репутация” и множество забанненых аккаунтов за плечами, то при создании твинка, либо при покупке аккаунта, на аккаунте сразу будет красный фактор доверия и скорее всего, последует блокировка. Возможно эта система уже неактивна, кто знает.

Итоги​

Компания Valve могла пойти по стопам BattleEye, VanGuard и т.д, но решила создать своё решение от нечестных игроков, которое имеет потенциал в будущем. Я не стал описывать тут всё, что есть т.к времени особо не было, описал лишь основную часть.
Надеюсь я описал всё, если что упустил пишите — я дополню. Лично для меня интересно, на сколько аудитория форума поменялась, что вам интересно и сколько таковых, так что возможно ещё напишу пару статеек. Хорошего дня и с рождеством Slightly smiling face :slight_smile:.

3 лайка

Добавлю: Для того, чтобы проверить свой Trust Factor можно перейти по ссылке. Для этого Вам понадобится лишь Ваша ссылка на Steam-аккаунт.