VAC (Valve Anti-Cheat) – модульный игровой античит, включенный в Source SDK, который обнаруживает читерские “вторжения” в игровой процесс, замену игровых файлов, использование эксплойтов. VAC имеет множество способов, чтобы обнаружить чит, особенно эффективно античит обнаруживает хаки, находящиеся в публичном доступе.
По воле случая я хочу сразу разрушить популярный миф. Обновление CS:GO – это не обновление VAC. Не стоит ссылаться на https://steamdb.info/app/730/ 4 и думать, что вам где-то покажут дату обновления VAC баз.
Методы обнаружения читов:
Сигнатурный анализ.
Сигнатура – уникальный участок кода программы, который не меняется в рамках одной версии или во всем жизненном сроке чита. Valve Anti-Cheat имеет обширную базу подозрительных процессов и читов, а сигнатурное обнаружение – главный способ, с помощью которого Valve отлавливает читеров.
“EnumProcess” функция во время игры.
VAC получает имя каждого процесса, запущенного во время игры и работающего с правами доступа PROCESS_QUERY_INFORMATION
(0x0400) и PROCESS_VM_READ
(0x0010). Таким образом, Read
& WriteProcessMemory
обнаруживаются (почти)!
“EnumProcess” в “SteamService.exe”.
SteamServices.exe после своего запуска начинает получать все запущенные процессы и создает файл сопоставления с PID процесса.
MD5 сканирование.
VAC рекурсивно сканирует каталог C:\
на наличие известных хэшей. Так же античит отправляет хэш подозрительного процесса в базы и дополнительную информацию. Таким образом, античит знает, какие файлы вы запускали, и если MD5 будет в базе читов, то вы будете забанены во время так называемой волны банов.
Проверка целостности файлов.
Все читы должны начать работать во время работы игры, т.к. важные файлы проверяются на целостность. Если проверка пройдет безуспешно, то вы не сможете играть на защищенных серверах и, скорее всего, даже не сможете запустить игру.
EnumWindows, EnumChildWindows – получение информации о всех окнах
Если сигнатурный анализ обнаружит подозрительный процесс, то он получит все связанные с ним окна и заголовки окна, создаст MD5 хэш заголовков и начнет проверку с уже известными заголовками читов. Античит проверяет и сравнивает размер окна, стиль окна (exStyle
), положение окна. Таким образом, названия читов тоже могут быть обнаруженными.
USN Журнал.
VAC сканирует измененные, переименованные, удаленные файлы в системе с помощью NtFsControlFile
– USN Журнала 2. Таким образом, даже если вы один раз использовали чит и удалили его, VAC все равно может узнать об этом и бан может быть выдан вам даже спустя год после использования чита. Однако, этого не произойдет, ибо античит Valve блокирует только тогда, когда 100% уверен в том, что вы использовали чит.
VirtualQuery и поиск исполняемого кода в процессе.
Valve Anti-Cheat использует VirtualQuery
для сканирования игрового процесса на наличие страниц памяти, которые являются исполняемыми. Если эти страницы не были выделены игровым процессом, очевидно, что это заинжекченный код.
OpenEventLog – журнал событий.
Античит сканирует журнал событий, получает информацию о системе и пользователе.
Естественно, что отладчики тоже будут обнаружены.
Это не все, но то, что я нашел. Кажется, что античит проверяет дату создания и изменения файла, но это вообще бесполезно. Больше информации: https://www.unknowncheats.me/forum/anti-cheat-bypass/100197-vac-external-tool-detection-and-more.html
Защита от VAC:
- Самым надежным способом защиты от VAC является использование самописного чита, который не будет распространен вами. Сигнатуры такого чита вряд ли когда-либо попадут в руки Valve на анализ.
- Используйте Manual Mapping, он обходит большинство методов внутреннего обнаружения читов.
- Добавляйте Junk Code. Не стоит следовать совету и добавлять пару байтов в конец структуры своего чита в надежде избежать обнаружения хэша, VAC также хэширует фрагменты кода.
- Используйте полиморфный криптор, который разрушит сигнатуры в вашем чите.
- Зашифруйте все строки и упакуйте ваш чит. Используйте надежные протекторы с виртуализацией, например, VMProtect.
- Рандомизируйте имя процесса, файла, окна.
- Для внешних читов отличным решением будет использование
mouse_event
&keyboard_event
вместо WriteProcessMemory для создания таких вещей, как аимбот, триггербот и т.п (это используется в WinX чите).
Лоадер для обхода VAC – https://github.com/danielkrupinski/VAC-Bypass-Loader
Как скомпилировать самому: