Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Хакеры разрабатывают читы, геймеры их покупают, компании нанимают инженеров, чтобы разрабатывать новые способы защиты. Хакеры снова находят лазейку, и круг замыкается. В этой статье мы посмотрим, как работают (и работают ли!) разные оборонительные методы, и попробуем создать свою систему защиты от читерства.
Некоторые античиты используют собственный драйвер. Он позволяет задействовать более широкий спектр возможностей для защиты приложения. Времена хуков SSDT прошли из-за высокой вероятности конфликта с другим программным обеспечением.
В Windows появилась специальная функция для перехвата некоторых событий системы — ObRegisterCallbacks. Драйвер античита урезает права дескриптора процесса, устанавливая callback на его получение. При попытке запросить полный доступ к защищенной игре приложение третьего кольца получит лишь доступ к общей информации о процессе.
Существуют и внутриигровые проверки: игра сама может проверять, модифицированы ли отдельные переменные или код в целом. Простой пример: если патронов в обойме будет больше, чем максимальное количество патронов в обойме, значит, что-то тут не так.
Для обхода внутренней защиты придется реверсить код.
Защита: хук функции LoadLibrary
.
Обход: ManualMapping
.
ManualMapping
— это ручная загрузка библиотеки в адресное пространство процесса. Она включает в себя парсинг заголовков, аллокацию памяти, запись, ручной импорт библиотек и вызов точки входа библиотеки. Выполняя ManualMapping
, мы полностью имитируем функцию LoadLibrary
, но не оставляем информации о загруженной библиотеке.
Защита: мониторинг активных потоков и трейсинг адреса библиотек.
Находя поток, который не относится к процессу игры, античит пытается проверить цифровую подпись библиотеки, код которой исполняет этот поток. Если это не удается сделать, пользователь помечается как читер.
Обход: хуки и code caving.
Перехват вызовов функций позволяет встроить наш код в существующие функции игры. Нам не нужно иметь собственный поток для вызова кода чита. Рано или поздно игра сама исполнит инородный код, и чит сделает свое дело.
Code cave — участок нулей в памяти приложения, который никогда не используется им во время исполнения. В этот участок можно встроить код чита. Выполнив проверку, относится ли код к адресному диапазону игры, античит пропустит его.
Для защиты от внешних читов используется драйвер.
Защита: мониторинг известных процессов или мониторинг всех процессов и поиск читерских программ по их сигнатурам.
Обход: обфускация.
Обфускация изменяет, запутывает, виртуализирует код, изменяет сигнатуры. Античит ищет только известные ему сигнатуры, и обфусцированные версии кода будут проигнорированы.
Напишем простой античит. Его будет легко обойти, потому что это только пример. В реальности античиты — это комплексные приложения, которые следят за многими аспектами системы.
Мы будем искать неподписанные процессы в системе — потому что читы редко подписывают, — получать их хеши и сравнивать с хешами известных читов. Для поиска процессов воспользуемся Process
, а для валидации готовым wrapper для функции WinVerifyTrust
из wintrust.dll
.
Список известных нам читов:
Источник: xakep.ru