Античит для Unity на минималках

Варианты защиты своей игры, какие есть типы защиты, защита без сервера, защита значений, бесплатные и платные возможности, зачем вообще делать античит и защищать какие-то данные — что реально можно сделать инди-разработчику.

Главное что можно сразу сказать:

  • нельзя защитить клиент на 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
  • часто конфликтуют с античитами
  • могут вызывать срабатывания у антивирусов

Бан — это крайняя мера и он оправдан, когда:

  1. система стабильна
  2. пороги проверены
  3. есть история поведения

Банить сразу — значит терять игроков быстрее, чем читеров 🥲 Надеюсь ваши игры будут такие популярные и успешные, что вам хватит на любую защиту 🤑 Потому что в таком случае она вам 100% понадобится.

Нет комментариев

    Ваш комментарий