Античиты в CS 1.6: назначение и общая классификация
Вчера, 19:30
Сетевые компьютерные игры практически с самого появления массового мультиплеера столкнулись с одной и той же проблемой: игрок может изменить работу игрового клиента таким образом, чтобы получить преимущество, недоступное остальным участникам матча. Для одиночной игры это обычно вопрос личного выбора игрока, однако в многопользовательском шутере ситуация принципиально иная. Если один участник получает возможность видеть противников сквозь стены, автоматически наводить оружие на цель, перемещаться с недопустимой скоростью или иным способом нарушать правила игры, это непосредственно влияет на остальных игроков и разрушает сам принцип соревнования.Проблема появилась практически одновременно с развитием сетевых шутеров. Уже летом 1996 года, вскоре после выхода Quake, на конференциях сообщества обсуждались способы получения нечестного преимущества в Deathmatch. В сохранившейся переписке того времени игроки обсуждали, в частности, возможность изменения поведения клиента и получения неограниченных боеприпасов или неуязвимости. Это особенно показательно: вопрос защиты от читов возник практически сразу после того, как компьютерный шутер получил полноценный сетевой режим.
В конце 1990-х проблема уже обсуждалась не только игроками, но и разработчиками сетевых движков. В переписке разработчиков Quake 1999 года рассматривались различные модели защиты, в том числе идея сделать игровой сервер единственным источником достоверного состояния игры. Разработчики отмечали фундаментальную проблему: чем больше информации и полномочий переносится на сервер, тем лучше защита от определённых видов мошенничества, но тем сложнее обеспечить нормальную работу игры через медленные и нестабильные соединения того времени.
Именно это противоречие впоследствии стало одним из фундаментальных вопросов разработки античитов. Игровой сервер должен доверять клиенту ровно настолько, насколько это необходимо для нормальной игры, но одновременно не должен позволять клиенту самостоятельно определять то, что должно контролироваться сервером. При этом сервер физически не имеет доступа ко всему, что происходит на компьютере игрока. Он может анализировать поступающие от клиента команды, сетевые сообщения и игровое поведение, но не способен самостоятельно посмотреть, какие процессы, библиотеки и драйверы запущены в операционной системе игрока.
Counter-Strike 1.6 унаследовал эту проблему от Half-Life и игрового движка GoldSrc. Более того, для Counter-Strike она приобрела особенно большое значение благодаря огромному количеству публичных серверов, длительному существованию и популярности игры. За годы существования CS 1.6 появились десятки различных читов и способов их реализации: от сравнительно простых изменений параметров клиента до программ, работающих с памятью игры, подменяющих или внедряющих библиотеки, взаимодействующих с графическим API и использующих возможности операционной системы. В ранней истории Counter-Strike упоминаются, в частности, XQZ, OGC и другие ранние публичные multihack-решения; одновременно начали появляться первые специализированные средства защиты.
Таким образом, античит — это не обязательно программа, которая должна найти на компьютере игрока файл с названием «cheat» и после этого заблокировать его. Это общее название для целого набора технологий, задача которых заключается в предотвращении получения нечестного преимущества, обнаружении нарушителя, сборе доказательств или ограничении возможностей чита.
В Counter-Strike 1.6 античит может работать непосредственно на игровом сервере, на компьютере игрока либо одновременно на обеих сторонах. Одни системы анализируют команды и поведение игрока, другие проверяют файлы игры, процессы, загруженные модули и системные компоненты, третьи пытаются не допустить передачу клиенту информации, которой тот не должен обладать. Некоторые системы работают автоматически и самостоятельно принимают решение о блокировке (бане), тогда как другие формируют подробный отчёт, который затем изучает администратор сервера.
Именно поэтому два продукта, которые оба принято называть античитами CS 1.6, могут принципиально отличаться друг от друга. Серверный плагин способен обнаруживать аномальное движение игрока, проверять определённые параметры клиента или препятствовать использованию wallhack (видению сквозь стены), но не имеет полноценного доступа к операционной системе пользователя. Клиентский античит, напротив, может получить гораздо больше информации о компьютере, однако для этого игроку необходимо установить и запустить специальное программное обеспечение, а сервер должен каким-либо образом доверять результатам его работы.
В дальнейшем в этой статье мы будем рассматривать античиты прежде всего с точки зрения защиты публичного игрового сервера Counter-Strike 1.6. Решения, предназначенные для профессиональных лиг, турниров и организованных матчей, таких как Aequitas, ESL Wire, ESEA и прочие закрытые решения не являются предметом данного обзора, проще говоря мы о них ничего писать не будем.
Для публичного сервера наиболее удобно рассматривать три основных класса решений. Серверные античиты работают непосредственно на игровом сервере, обычно в виде MetaMod или AMX Mod X плагинов, и не требуют установки отдельной программы игроком. Клиент-серверные античиты используют специальный клиент на компьютере игрока и серверную составляющую, которая проверяет наличие и состояние этого клиента или получает от него результаты проверки. Наконец, существуют клиентские сканеры и системы ручной проверки, которые запускаются по требованию администратора и исследуют компьютер игрока, после чего формируют отчёт для последующего анализа.
Граница между этими категориями не всегда абсолютно строгая. Например, одна система может одновременно использовать серверный плагин, клиентскую программу и централизованный веб-сервис. Другая может технически иметь серверную составляющую, но использовать её лишь для передачи идентификатора или получения результатов проверки. Поэтому классифицировать античит исключительно по наличию файла .dll, .exe или AMX-плагина было бы неправильно. Гораздо важнее то, где выполняется проверка, откуда система получает информацию и кто принимает окончательное решение о нарушении.
Отдельно стоит отметить, что серверный античит не обязательно должен обнаруживать читера и выдавать ему бан. Хороший пример — защита от wallhack. Если сервер заранее знает, какие игроки находятся вне зоны видимости конкретного клиента, он может просто не отправлять этому клиенту координаты таких игроков. В результате wallhack не получает необходимой информации и становится значительно менее эффективным если не полностью бесполезным. В этом случае сервер не доказывает факт использования чита и даже не обязательно знает, установлен ли он у игрока: он устраняет саму возможность использования определённого преимущества. Были даже случаи отправки пакетов, которые приводили к исключению и аварийному завершению работы чита и клиента игры, в который он был загружен.
Противоположный подход использует клиент-серверный античит. Специальная программа на компьютере игрока получает доступ к информации, которой нет у игрового сервера: к запущенным процессам, загруженным модулям, файлам игры, системным компонентам, драйверам и, в зависимости от конкретного продукта, другим характеристикам компьютера. Результаты такой проверки могут автоматически использоваться античитом либо передаваться серверу или централизованной системе для принятия решения.
Хорошей иллюстрацией различий является Valve Anti-Cheat (VAC). В отличие от многих сторонних античитов для CS 1.6 и других игр на движке GoldSrc (Team Fortress, Day of Defeat, сам Half-Life и других), игроку не требуется отдельно устанавливать и запускать программу VAC: система интегрирована в инфраструктуру Steam и устанавливается вместе со Steam. Valve определяет VAC как автоматизированную систему обнаружения читов на компьютерах пользователей; при подключении к защищённому VAC серверу обнаружение распознаваемого чита может привести к VAC-блокировке. Valve отдельно указывает, что изменение исполняемых файлов и динамически подключаемых библиотек игры относится к изменениям, которые могут рассматриваться системой как читерские. Именно по этой причине различные хелперы для создания красивых демок и мувиков, а также другие сторонние модули категорически запрещается запускать при подключении к интернет-серверам (можно использовать только локально) потому как их использование на серверах может привести к бану. Но данная система не работает в многочисленных нонстим клиентах КС 1.6.
История античитов CS 1.6 поэтому представляет собой не историю одной программы, которая должна была «победить читы», а последовательное развитие различных методов защиты и технологий. Сначала серверы пытались определить нарушение по доступным им признакам. Затем появились системы, способные проверять сам игровой клиент. Позже всё большее значение получили проверка операционной системы, централизованные базы данных, идентификация игроков и сбор доказательств. Параллельно развивались методы защиты самого игрового протокола: вместо обнаружения чита сервер мог сделать так, чтобы определённый тип чита вообще не получал необходимой информации.
В следующих разделах мы рассмотрим эти подходы применительно к конкретным решениям для Counter-Strike 1.6. Сначала речь пойдёт о серверных античитах — MetaMod/AMX Mod X-плагинах и других системах, которые пытаются обнаружить или нейтрализовать читы исключительно средствами игрового сервера. Затем будут рассмотрены клиент-серверные античиты, включая исторические Cheating-Death, sXe Injected, myAC, UCP, EAC, VAC и GameGuard. Отдельное место займут клиентские сканеры и системы ручной проверки, такие как WarGods Cheat Detector и Easy Cheat Detector, где окончательное решение о нарушении во многих случаях принимает уже администратор на основании полученного отчёта.
Комментариев 0