XYREX Guard Anticheat - Руководство
Основные понятия и принцип работы
Античит по сути является сниффером, который перехватывает и анализирует сетевые пакеты игры. Каждый перехваченный пакет разбирается на отдельные команды.
Затем команды анализируются на подозрительность. Если она признаётся подозрительной, пакет, который содержит эту команду, блокируется. Также по этим командам строится таблица игроков — их никнеймы, машинные ID, теги стран.
Структура команд
Каждая команда представляет собой дерево, состоящее из пар ключ-значение. Ключами являются токены (магические числа), значениями могут быть вложенные деревья, другие токены или простые типы данных.
Обязательные объекты команды
В общем случае каждая команда должна всегда иметь два вложенных объекта:
default_state — содержит:
- Порядковый номер команды (чем позднее отправлена команда, тем он больше)
sender— ID клиента. Первый присоединившийся игрок будет иметь ID 2, второй — 3 и т.д. ID 1 зарезервировано для хоста- Время относительно начала сессии
object — содержит:
- Собственно основную информацию о команде
Как проходит игра с использованием античита?
Запуск и подключение игроков
- Перед созданием игрового лобби хост запускает античит у себя на компьютере
- После создания лобби к вам присоединяются игроки
- При присоединении к лобби игра отправляет на хост пакеты, содержащие команды
CCheckSyncResponseCommandиCAddPlayerCommand
CCheckSyncResponseCommand не содержит никакой примечательной информации, а вот CAddPlayerCommand содержит никнеймы, машинное ID, а также некоторую другую информацию.
Пример команды CAddPlayerCommand
{
CAddPlayerCommand (joins lobby)={
default_state={
tickstamp=5059 // время
istargetasynchronous=False
identity=8 // 8 отправленная команда по счёту
sender=12 // 12 игрок в лобби
original_id=8 // 8 отправленная команда по счёту
}
object={
user=NickAdmnRoot
name=nickadminroot
profile_badge={
profile_pictures=22
profile_backgrounds=2
}
machineid=12 // машинное ID. Если оно совпадает с машинным ID другого игрока -
// это приведёт к кику другого игрока, что используется многими
// читами для того чтобы кикать хостов или других игроков
hotjoin=False
chat_user_joined={
id=12
pops_id={
53
102
49
55
52
100
98
100
45
97
49
101
53
45
52
52
55
52
45
97
56
56
54
45
49
54
97
51
48
51
52
48
55
97
50
49
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
}
}
}
}
}
Читами можно изменить абсолютно любое поле команды, а также вообще предотвратить отправку команд. Например:
- Можно отправить 100 команд
CAddPlayerCommandс разными машинными ID и никнеймами и добавить в лобби 100 игроков - Можно повредить структуру команды или вообще не отправлять её при заходе в лобби. В этом случае игрок может зайти в лобби гостом (гост — это читер, который не отображается в лобби)
Игровой процесс
После этого отправляются другие команды. Каждому действию в игре соответствует своя команда. Античит проводит дополнительные проверки на основе содержания различных команд, чтобы определить их опасность.
Наиболее распространённые атаки
Функциональность читов бывает самой различной. Вот наиболее распространённые функции читов и описание того, как XYREX Guard детектирует их.
Crash (Краш лобби)
Краши можно вызвать несколькими способами, однако самый распространённый — включение и отключение DLC (CSetDLCsCommand).
Обычно перед этим происходит попытка:
- Запустить игру (
CStartGameCommand) - Сломать автосейв (
CAutosave)
Все эти команды никогда не отправляются обычными клиентами, и поэтому они по умолчанию блокируются античитом, и не требуют дополнительного анализа.
В прошлом существовал другой способ крашнуть лобби при помощи хука какого-то странного jmp или call в не совсем ясное место (его не получалось декомпилировать), однако неизвестно, является ли этот метод рабочим и может ли он вызвать краш у всего лобби.
Усиление стран
CSetCustomDifficultyMultiplier используется для усиления стран, он также блокируется по умолчанию.
Управление другими странами
Целый ряд команд содержит тег страны-цели, по которому можно легко понять, на какую страну направлено действие. Если эта страна не является той, которую игрок выбрал в лобби — действие будет заблокировано.
Добавление фейковых игроков, кик хоста, кик настоящих игроков
CAddPlayerCommand может использоваться для этих действий. Поэтому античит выполняет проверки на machine_id и sender для этой команды на совпадение с другими игроками или хостом.
Включение и отключение искусственного интеллекта на странах
CSetCountryControllerTypeCommand используется для установки ботов на страну. Это сложная тема, потому что эта команда довольно часто отправляется и обычными игроками, если в вашей игре есть сломанные страны.
Обычные игроки отправляют только один Type в структуре, поэтому античит может распознать включение ИИ и заблокировать соответствующую команду.
Выбор опций в ивентах
Некоторые читы используют команду CSelectEventOptionCommand для того чтобы многократно выбирать опции в ивентах, которые могут иметь серьёзные последствия. Например JT позволяет получать пром, политку или исследования при помощи этой команды вызывая опции соответствующих ивентов. Например:
{
CSelectEventOptionCommand={
default_state={
tickstamp=32767
istargetasynchronous=False
identity=30048
sender=14
original_id=30048
}
object={
id=3777
event={
id=21700045 //id ивента, можно проврить в одиночке в консоли при помощи команды: event 21700045
type=50
}
option=0
actor=SOV
scope={
country=SOV
random={
521730878
815718697
}
prev={
country=SOV
random={
521730878
815718697
}
}
}
}
}
}

Прочие атаки
Игра использует множество команд, которые теоретически можно хукнуть и использовать в читах. Чтобы надёжно защититься от возможных проблем, есть дополнительные методы защиты, о которых ниже.
Продвинутая защита от читеров
Для дополнительной безопасности вы можете предпринять следующие шаги:
Перед стартом игры
- Сверяйте количество подключений — сравните количество живых подключений в программе и количество игроков в лобби
- Учитывайте, что один из игроков это хост, который не отображается в античите
- При несовпадении сопоставьте игроков в войсе, в игре и в программе
- Если кто-то зашёл гостом, заблокируйте его по порту или IP
После старта игры
- Включите кнопку "Запретить новые подключения"
- Это не даст читерам зайти, если они не зашли в лобби до этого
Сразу предупредите игроков, чтобы они не переключали свою сеть:
- Не включали VPN
- Не меняли провайдера
- Не включали мобильный интернет
В случае если кто-то из игроков поменяет порт или IP-адрес, он потеряет подключение.
При хотджоине и рехосте
- При открытии лобби при хотджоине — выключайте "Запретить новые подключения"
- При рехосте — нажмите также кнопку ОЧИСТИТЬ
Результат
В таком случае читер не сможет зайти гостом — ему придётся реально сидеть на стране как обычному игроку и использовать свой аккаунт в Discord.
Если в игре начнут происходить странные события, вы можете использовать журнал, чтобы определить, кто что делал в это время, и найти читера, а затем забанить его в программе и в Discord.