Варианты защиты своей игры, какие есть типы защиты, защита без сервера, защита значений, бесплатные и платные возможности, зачем вообще делать античит и защищать какие-то данные — что реально можно сделать инди-разработчику.
Главное что можно сразу сказать:
- нельзя защитить клиент на 100%
- любой локальный античит будет взломан
- Unity билд довольно легко расковырять
Основная задача: отсечь 80–90% «случайных» читеров, сохранить честность различных лидерборд и рейтингов, не тратить месяцы разработки.
Античит — это не про «сделать чит невозможным». Это про сделать чит дорогим, нестабильным и бессмысленным.
Какие есть самые распространённые читы с которыми может (скорее всего) столкнуться разработчик игр:
- Memory hack (скорость, здоровье, урон)
- Подмена логики (patched APK/modded build)
- Спидхак (Time.timeScale, SpeedHack)
- Подмена сохранений
- Боты/автокликеры
- Подмена сетевых пакетов (если есть онлайн)
Главное правило: клиенту нельзя доверять!
Примерно 90% игр (не ААА, а инди) ломаются с каким-нибудь Cheat Engine, если разработчик не озадачился минимальной защитой, как локальной так и серверной.
Составил список самых простых, но тем не менее рабочих способов быстро усложнить жизнь читерам и ботоводам, то что можно быстро сделать в коде. Про сторонние ассеты и библиотеки — ниже.
Защита без сервера
Определение спидхака
float realDelta = Time.unscaledDeltaTime;
float gameDelta = Time.deltaTime;
if (gameDelta / realDelta > 1.5f) {
Flag();
}
Ловим TimeScale и системные спидхаки, просто и работает.
Защита значений
private int _gold;
private int _goldKey;
public int Gold {
get => _gold ^ _goldKey;
set {
_goldKey = Random.Range(int.MinValue, int.MaxValue);
_gold = value ^ _goldKey;
}
}
Не совсем защита, а скорее усложнение при поиске точных значений в памяти.
Контроль максимума
if (damage > maxDamage * 1.2f) {
Flag();
}
Отслеживание максимальной скорости, урона и теоретического максимума, там где ресурсы растут без источника и т.д.
Важно: не банить сразу, а накапливать «флаги». Любой античит может ошибаться. Об этом ниже.
Защита в онлайн-играх
Авторитарный сервер — наверное самый распространённый вариант — является единственным источником истины, он обрабатывает все механики, движения и взаимодействия, чтобы исключить читерство.
Клиент не обрабатывает логику (например, перемещение или попадание) и не может подделать эти данные. Он получает готовое состояние «мира» и/или его изменение. Сервер же обрабатывает данные от всех клиентов, синхронизируя их.
Сервер может отслеживать подозрительные действия:
- слишком частые действия
- слишком быстрые клики (команды)
- получение команд неподходящих под состояние игры
- другие подозрительные паттерны
Главное: не банить сразу, не показывать сообщение «ты читер» 😅
Система флагов и банов
Нельзя банить сразу по одному триггеру, потому что могут быть ложные срабатывания:
- лаги и фризы
- баги своего же кода
- нестабильный FPS
- особенности конкретных устройств
- кастомные прошивки/эмуляторы
Если банить по одному признаку, то можно зацепить честных игроков, потерять лояльность, получить плохие отзывы и т.д.
Идеально: читер не знает за что его поймали и что его вообще поймали.
Если банить сразу:
- читер узнает точный триггер
- он чинит за 10 минут
- выкладывает «рабочую версию»
Если «копить флаги»:
- он не понимает, что именно сработало
- не знает, когда его «спалили»
- не может воспроизвести условие
Лучший античит — тот, который не даёт обратной связи. Джейсон Стейтем
Когда есть накопленные флаги, ты можешь:
- отключить рейтинги
- не учитывать рекорды
- кидать в отдельный matchmaking
- ограничить прогресс
- замедлить экономику
- понизить дроп
И самое важное: читер продолжает играть и не создаёт новый аккаунт!
Простая система флагов
Простейшая система: флаги копятся со временем, могут затухать, учитывается частота и разнообразие. В онлайн игре всё это конечно должно делаться на стороне сервера, или комбо 😅
enum CheatFlag {
SpeedHack,
TimeHack,
InvalidDamage,
Teleport,
RateLimit
}
Dictionary<CheatFlag, int> flags = new();
void AddFlag(CheatFlag flag) {
flags.TryAdd(flag, 0);
flags[flag]++;
int total = flags.Values.Sum();
if (total > 10) {
SoftBan();
}
}
Кроме того, подобная система даст аналитику:
- видеть, какие детекторы ложно срабатывают
- понимать, где реальные читы
- улучшать античит без патчей
- регулировать пороги
В общем, античит — это наблюдение, накопление и изоляция.
Платные и бесплатные ассеты
Anti-Cheat Toolkit
Универсальный античит, один из самых популярных ассетов для Unity, который предлагает:
- защиту переменных в памяти
- обфускацию PlayerPrefs
- обнаружение speedhack и Time hack
- инжекционный хук-детектор
- обнаружение wallhack и прочие механизмы
- есть GUI для инспектора и примеры кода
Anti Cheat Free v2025
- защита типов переменных (int, float, Vector3 и др.)
- защита сохранений
- защита от манипуляция со временем
- обнаружение изменения памяти
- бесплатеный, подходит для простых проектов/экспериментов
GUARD – Multiplayer Anti Cheat
- античит для сетевых игр
- обнаружение читов в многопользовательской среде
- подходит, если игра использует свой сетевой код (не только Unity Netcode), есть поддержка Mirror
- обнаруживает Melon, BepInEx, DLL инъекции, патчинг инструкций, дебагеры, виртуальные машины
Easy Anti Cheat Tools
- обнаружение манипуляций с памятью
- спидхаков
- инъекции ассемблерного кода
- манипуляций с PlayerPrefs
- расширенное использование PlayerPrefs
- защищённые типы данных
- простые в использовании хеширование и криптография
Unity Game Shield
- защита памяти
- сканер инъекций
- защищённые сохранения игры
- капча с вознаграждением
- защита от таймхаков
- детектор спидхаков
- защищённые сетевые запросы
- система отчётов о читерстве
- детектор телепортации
- детектор воллхаков
SafeValues
- скрывает переменные в памяти
- шифрует и расширяет PlayerPrefs
- обнаруживает спидхаки
Тяжёлая артиллерия
DexGuard (Guardsquare)
- продвинутая обфускация DEX
- защита от реверс-инжиниринга
- анти-debug/анти-emulator
- anti-tampering (подпись, целостность)
- runtime checks
- string/class encryption
- защита JNI/native кода
В контексте Unity:
- работает поверх IL2CPP
- защищает Java-слой, bootstrap, плагины
- сильно усложняет modded APK
- часто используется в F2P с реальной экономикой
DexProtector (Licel)
- anti-tampering
- anti-debug / anti-hook
- anti-emulator
- string & class encryption
- контроль целостности
- защита native библиотек
В контексте Unity:
- часто используется как альтернатива DexGuard
- подходит для игр среднего масштаба
- хорошо режет repack + LuckyPatcher
Arxan GuardIT (Digital.ai)
- одна из самых жёстких систем защиты
- используется в крупных играх и корпорациях
- runtime-mutation
- self-defending code
- анти-hook, анти-dump, анти-debug
- серверные проверки целостности
В контексте Unity:
- применяется в крупных мобильных и PC-играх
- часто в связке с серверным античитом
Appdome
- защита без изменения исходного кода
- cloud-pipeline
- anti-tampering
- anti-debug
- обнаружение root/jailbreak
В контексте Unity:
- подходит, если нет доступа к исходникам Android-части
- часто берут издатели
Virbox/Themida/VMProtect
- применяются для PC-версий
- защищают exe/native IL2CPP
- часто конфликтуют с античитами
- могут вызывать срабатывания у антивирусов
Бан — это крайняя мера и он оправдан, когда:
- система стабильна
- пороги проверены
- есть история поведения
Банить сразу — значит терять игроков быстрее, чем читеров 🥲 Надеюсь ваши игры будут такие популярные и успешные, что вам хватит на любую защиту 🤑 Потому что в таком случае она вам 100% понадобится.
Нет комментариев