Бесконечная война против читеров.
Читеры всегда были проблемой в CS:GO – в матчмейкинге регулярно можно наткнуться на игрока с WH или AIM. При этом в CS:GO огромное количество средств для отслеживания сторонних программ – античит VAC, нейросеть VACNet, система Патруля, уровень доверия, прайм-статус. Но почему же они не помогают в борьбе с читерами?
Читеры обходят VAC: без прайма читеры в каждой второй игре
Как работает?
Сканирует файлы игры на наличие изменений. В случае нарушения целостности файлов игрок получает блокировку. Но современные читы умеют «прятаться» от VAC, а иногда система блокирует за незначительные нарушения – например, скинченджер.
Система VAC существует в игре с самого релиза. Именно она должна быть основным барьером для читов, но по игре в матчмейкинге не создается впечатление защищенности. Читеров, конечно, стало меньше, чем раньше, но вы все еще можете встретить их раз в 5-10 игр. Речь, разумеется, о матчмейкинге с прайм-статусом, на анпрайме ситуация еще хуже: год назад ютубер Rachel проводил исследование, в котором сыграл 16 игр без прайма. В 8 из них был читер. Из этого можно сделать вывод, что VAC – слабая защита.
Каждое обновление VAC, казалось бы, закрывает уязвимости, но читеры тут же находят новые. Как можно сделать античит надежнее? Опустить его до уровня драйвера – так куда легче блокировать сторонние попытки доступа к игре. Пример таких античитов – ValGuard в Valorant и Faceit AC на платформе Faceit. Но и они не идеальны – за счет полного контроля ресурсов компьютера они могут замедлять его работу, даже если игра не запущена.
Патруль – неплохая идея с ужасной реализацией
Как работает?
Игроку показывается запись матча, в котором кто-то получил много репортов за читерство. После просмотра 8-9 раундов игрок должен сделать вердикт – нарушал ли правила подозреваемый или нет. Такая же запись показывается еще нескольким «Патрульным», если большинство указало подозреваемого читером, то он получает блокировку.
Изначально идея Патруля казалась интересной, но в реальности она показала свою недееспособность. Порой невиновные игроки получали блокировку от Патруля, а порой читеры не наказывались после попадания в «кино». Причин этому несколько.
Во-первых, низкий уровень вхождения. Чтобы открыть доступ к Патрулю, достаточно всего 150 побед и звание Золотая звезда 1. Новичок с 300 часов и низким уровнем понимания игры уже сможет выносить решения по блокировкам.
Во-вторых, игроки смотрят демки подозреваемых, у которых с ними примерно одинаковое звание. То есть глобал или суприм, у которых обычно есть некоторое понимание игры, не смогут посмотреть демки звезд. Точность вердиктов оставляет желать лучшего, по словам разработчика Valve – Патруль выносит лишь 15-30% верных решений.
В-третьих, у игроков нет мотивации смотреть Патруль, поэтому блокировка читера через Патруль – долгий процесс. Дело в том, что игрокам нужно смотреть запись на старом и неудобном интерфейсе демок, где криво работает переключение между раундами, возврат на раунд назад и т.д., а в награду за верный вердикт они получат лишь 400 очков опыта.
Последний недостаток Патруля – отсутствие возможности обжаловать решение. Любая система может дать сбой, Патруль – не исключение. И если вы получили эту блокировку по ошибке – никто не будет пересматривать ваши демки для подтверждения/отмены блокировки.
Уровень доверия и прайм-статус
Как работает?
У каждого игрока есть свой рейтинг, исходя из которого ему подбираются тиммейты и соперники. Если вы будете получать много репортов, то рейтинг будет падать, если вас будут часто хвалить – рейтинг будет увеличиваться.
Идея социального рейтинга в игре также не спасла от читеров. Во-первых, при желании можно опустить траст-фактор любого игрока до красного, по сути обязав его играть против читеров и токсиков. Это делается с помощью репорт-ботов, воспользоваться которым можно, всего-лишь перейдя по первой ссылке в поисковике. Во-вторых, единая система для токсичных игроков и читеров – ошибка. Токсичные, молчаливые или слабые игроки, получая репорты, все чаще играют против игроков, которые получали репорт за читы.
Никакая система не защищена от сбоев – если обычный игрок случайно получит красный уровень доверия, его ждет полное разочарование в игре, так как он будет играть с читерами и токсиками, а как подняться с этого дна, Valve не говорит.
Прайм-статус в состоянии отсеять только самых наивных читеров, играющих с rage-настройками или очевидными читами по типу крутилки. Таких, естественно, успеет заблокировать либо VAC, либо Патруль до того, как он дойдет до 21 уровня. Но читер все равно успеет испортить игру как минимум несколько раз.
Медаль за верность – выдалась всем игрокам, получившим прайм-статус, когда игра стала бесплатной.
Разбор Valve Anti-Cheat и как его обходят
Модули
Для начала, отмечу, что античит разделён на множество модулей которые скачиваются с серверов, проще говоря, им не обязательно обновлять игру либо 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
на адрес оригинальной функции. Либо использовать “лазейки” описанные раннее.
Фактор доверия
А теперь самое интересное
. Система, которая определяет в какой пул кидать игрока. Когда аккаунт только создан, у него изначально зелёный траст, который после будет меняться в зависимости от % побед и репортов. Достаточно интересная система, которая отделяет явных читеров от “честных” игроков. Кстати, фактор доверия будет всегда красным если вас пометили для блокировки, а также будет загружаться больше модулей для получения большей информации о читерах/чите. Помните, я говорил про модуль который собирает информацию о системе? Так вот, теперь вспоминаем волну блокировок “честных” людей, которые рейджили на твинках :D. Кстати, если у вашего компьютера “плохая репутация” и множество забанненых аккаунтов за плечами, то при создании твинка, либо при покупке аккаунта, на аккаунте сразу будет красный фактор доверия и скорее всего, последует блокировка. Возможно эта система уже неактивна, кто знает.
Итоги
Компания Valve могла пойти по стопам BattleEye, VanGuard и т.д, но решила создать своё решение от нечестных игроков
Но надежда есть – нейросеть VACNet
Как работает?
Нейросеть анализирует поведение игроков в матчах, учится отличать обычных игроков от читеров.
На данный момент нейросеть развивается уже несколько лет и за это время уже есть значимые победы, главная из них – полная блокировка AIM-читов. Благодаря VACNet игроки с AIM гарантированно будут получать VAC-бан. Нейросеть отслеживает движения прицела и мышки, и если они хоть немного не совпадают – аккаунт сразу же блокируется.
Нейросеть представили в марте 2018 года. Каждый день она анализирует тысячи матчей, пытаясь отличить поведение читера от поведения реальных игроков. Обучение нейросети – долгий процесс, но в итоге может выйти алгоритм, вычисляющий подавляющее большинство читеров.
VACNet разрабатывается Valve, которая предпочитает умалчивать о принципе работы алгоритма. Но известные данные впечатляют – сеть выносит точный вердикт с вероятностью 95%. При этом, как говорилось раньше – система постоянно самообучается, а обучаемость к новым читам достигает 99%!