Каждый, кто хоть раз играл в онлайн-игры, знает, как неприятно встретить читеров, которые портят игровой процесс. Для борьбы с ними используются античит-системы, которые зачастую являются сложными программными продуктами с множеством защитных механизмов. Недавно специалист по безопасности и исследователь Matthias поделился своими уникальными наблюдениями о том, как именно устроены и обновляются популярные античиты вроде EasyAntiCheat, BattlEye, Vanguard и других.
Я решил подробнее разобраться в этой теме и дополнить статью собственным взглядом и опытом, добавив технические детали и личные комментарии.
🕵️♂️ Зачем исследователям отслеживать обновления античитов?
Когда речь идёт о реверс-инжиниринге и исследовании бинарных модулей, понимание механизма обновлений античитов становится критически важным. Почему это интересно?
- 📅 Отслеживание новых версий: Когда античит получает обновление, он, вероятно, добавил новые методы защиты или исправил старые уязвимости.
- 🧩 Изучение изменений: Можно понять, как развиваются методы защиты и какие тенденции в защите от читов сейчас актуальны.
- 📚 Использование старых версий: Иногда для исследований полезно иметь доступ к более старым версиям античитов, чтобы понять динамику их развития.
🔐 Как работают античит-системы? Примеры и детали
В статье Matthias подробно рассмотрел некоторые античит-системы. Вот самые интересные моменты, дополненные моими личными наблюдениями:
1️⃣ EasyAntiCheat (EAC)
Один из наиболее популярных и технологичных античитов, используемый в играх Rust, Apex Legends, Fortnite. После приобретения Epic Games, EAC начал использовать CDN Epic с уникальной структурой URL. Что интересно:
- 🧮 Обновления идентифицируются через уникальные product_id и deployment_id.
- 🔑 Файлы зашифрованы, но алгоритм шифрования удалось расшифровать и реализовать в простом C-коде:
void decode(char *memory_block, int total_size) {
if (total_size >= 2) {
memory_block[total_size - 1] += 3 - 3 * total_size;
for (int i = total_size - 2; i > 0; --i) {
memory_block[i] += -3 * i - memory_block[i + 1];
}
memory_block[0] -= memory_block[1];
}
} - 📦 Внутри файлов EAC находится дополнительный слой защиты (VMProtect), который требует отдельной распаковки через исполнение (например, LoadLibrary).
Личное мнение:
EAC – это яркий пример комплексной многоуровневой защиты, в которой нет одной «серебряной пули», а успех заключается именно в комбинации множества слоев защиты.
2️⃣ BattlEye
Менее защищённый, но очень популярный античит (Escape from Tarkov, DayZ, Arma):
- 📡 Использует простой CDN с Unix timestamp в качестве идентификатора версии.
- 🧹 Не удаляет старые версии мгновенно, поэтому теоретически можно собрать архив старых версий (хотя автор обнаружил, что сейчас старые версии всё же удаляются быстро).
- 🔍 Исполняемый файл включает в себя встроенный драйвер, извлекаемый при запуске.
Личное мнение:
BattlEye явно ориентируется на оперативное выявление читов, а не на криптостойкость и сложные механизмы защиты, что упрощает его анализ.
3️⃣ Electronic Arts Anti-Cheat (EA-AC)
Относительно новый античит для FIFA, Battlefield:
- 📁 Исполнительные файлы легко извлекаются без запуска инсталлятора (через 7z), но драйвер уже не распространяется с установщиком и требует отдельного извлечения во время работы игры.
- 🔄 Обновления распространяются через CDN EA с прямыми ссылками.
Личное мнение:
EA-AC пока не достиг уровня сложности EAC, но активно развивается и явно ориентирован на быструю реакцию на обнаруженные уязвимости.
4️⃣ Vanguard (Riot Games)
Античит для Valorant и League of Legends:
- 🌐 Имеет публичный API для получения конфигурации и прямых ссылок на модули.
- 📂 Исполняемые файлы легко извлекаются, включая драйвер, что упрощает анализ.
Личное мнение:
Несмотря на громкие заявления о безопасности Vanguard, доступность модулей и простота обновлений несколько удивляют. Вероятно, Riot делает ставку на быстрое реагирование и частые обновления, а не на сложность распаковки.
💡 Почему не все античиты используют максимальную защиту своих CDN?
Можно задаться вопросом: почему не сделать максимально защищённый канал распространения файлов?
На мой взгляд, дело не только в сложности, но и в целесообразности. Основная цель античита – не защитить от анализа (это практически невозможно полностью), а оперативно обнаружить и предотвратить запуск читов. Поэтому большая часть усилий направляется на внутренние механизмы защиты, такие как:
- ⚙️ Обфускация и виртуализация кода.
- 🧬 Динамическое обнаружение сигнатур и поведенческий анализ.
- 🔎 Постоянные обновления, которые делают разработку читов дорогой и невыгодной.
CDN лишь усложняет жизнь исследователям, но никогда не станет абсолютно неприступной стеной.
🎯 Заключение и личное мнение автора статьи
Изучение античитов – крайне увлекательная и технически сложная тема. Эта область идеально показывает, как балансировать между защитой продукта и удобством его поддержки. Каждый античит уникален по-своему, но общая тенденция очевидна: постоянное развитие и быстрая реакция на появление новых угроз гораздо важнее абсолютной защиты от анализа.
Античиты будут и дальше развиваться, усложняя жизнь читерам, а вместе с тем и исследователям. Но именно благодаря таким статьям, как у Matthias, мы лучше понимаем внутреннее устройство этих систем и можем более грамотно подходить к вопросам безопасности и защиты ПО в целом.
🔗 Полезные ссылки: