Как защитить клиентский анти-чит - программирование
Подтвердить что ты не робот

Как защитить клиентский анти-чит

Во-первых,

Я хочу указать, что я знаю, что любая информация, отправленная с клиента, не может быть доверена, поскольку ее можно подделать. Меня интересуют методы обеспечения безопасности через неясность, чтобы удержать 99,9% потенциальных мошенников и способность обнаруживать программы, которые обходят безопасность в режиме реального времени.

Некоторые идеи, которые у меня были для этого, включали проверку контрольных сумм файлов и памяти как для игры, которую она защищает, так и для любых потенциальных чит-приложений, позволяя клиентской стороне сканировать по запросу с сервера (через TCP), как для обнаружение читов памяти и/или память памяти читов. Поэтому обходной взломам пришлось бы прослушивать всю информацию TCP, отправляемую ему по протоколу SSL, а затем дешифровать сообщение, разобрав функцию шифрования/дешифрования, чтобы понять, чего она хочет. Точно так же сам клиент может быть сам изменен и позволяет ему добавлять/удалять функции по мере необходимости наугад (но держать на сервере), так что читу будет сложно узнать, как обойти его. Это может быть бессмысленно?

Я считаю, что это слишком сложно для более опытных, поэтому я открыт для других методов, которые трудно обойти.

Я интересуюсь только возможными реализациями, а не тем, как невозможно иметь античит на стороне клиента, я просто хочу сделать это действительно тяжело.

Добавлен тег minecraft и java, и он для Minecraft, и я знаю, что сообщество достаточно велико, чтобы кто-то мог побить мою систему, но я надеюсь, что благодаря постоянным обновлениям и изменениям я могу победить их с помощью изобретательности и настойчивость.

Изменить: я нашел этот пост: Как предотвратить обман в наших (многопользовательских) играх?, и я добавляю его предложения, чтобы не дублировать вещи, поскольку я ищущие больше идей, чем очевидные (и я не уверен, что его не обойти)

1) Откройте все остальные процессы и зацепите их функции WriteProcessMemory, чтобы они не могли писать в память в вашей игре. обработать. Сделано правильно, этот один шаг будет блокировать 90% всех читов и чит-двигатели.

2) Сделайте то же самое, подключив эмуляцию мыши и клавиатуры функции. Это предотвратит много боевых целей и других типов автоматические боты.

3) Подключитесь к функциям VirtualProtectEx/VirtualAllocEx/etc в вашем игровой процесс и контролировать, какие модули меняют защиту уровней или выделения новых блоков памяти. Вы должны быть хитрыми с это для того, чтобы предотвратить чрезмерную интенсивность процессора, когда ваш игра делает много распределений, но это можно сделать.

4) Подключиться к функциям LoadLibrary и контролировать любые DLL файлы, которые динамически загружается, чтобы предотвратить инъекцию DLL.

5) Используйте некоторые легкие полиморфные кодировки в ваших игровых подключений.

6) Используйте некоторые методы отладки для предотвращения отладчиков связанных с вашими процессами. Анти-отладка Google, и вы должны быть в состоянии найти много вещей.

7) Используйте специальный запатентованный PE-упаковщик для предотвращения полезной разборки ваша игра.

8) Подключитесь к своим функциям и методам OpenGL или Direct3D с прозрачностью и альфа-смешиванием.

9) Если вы используете шейдеры, проверяйте свои шейдеры и константу шейдера значения.

10) Используйте дополнительные методы удаления окклюзии на персонажах игроков чтобы они вообще не были визуализированы, когда их блокирует другая геометрия. Это может или не поможет также, но это предотвратит многие Wallhacks.

4b9b3361

Ответ 1

Если вы хотите, чтобы ваш клиент уважал вас и свою игру, вы должны уважать своего клиента и понимать, что вы видите в качестве игрового клиентского компьютера, может использоваться для хранения ценной информации.

позволяет клиентской стороне сканировать любую часть памяти, полученную произвольно сервером

сам клиент может быть самостоятельно изменен и позволить ему добавлять/удалять функции по мере необходимости в произвольном порядке

Просто будьте осторожны, вы не открываете вектор атаки на машину клиентов. Чтение "любой части памяти, данной случайным образом", звучит страшно. Вы можете сделать это меньше, хешируя (не маленький) блок памяти и проверяя известное значение.

Предоставление серверу отправки "случайного" кода, вероятно, сделает ваше программное обеспечение похожим на вирус/ботнет на антивирусные/средства защиты. Он также оставляет клиента открытым для потенциального эксплойта.

Обновление:

1) Откройте все остальные процессы и зацепите их функции WriteProcessMemory

Если вы это сделаете, и у вас есть ошибка в введенном коде, вы можете дестабилизировать работу своего клиента на всей машине. Это кажется агрессивным. И в какой версии Windows вы работаете? С какими разрешениями? Я почти уверен, что взломщик может организовать запуск своего эксплойта из процесса, к которому у вас нет разрешения на крючок (например, процесс администрирования, в котором вы работаете в обычном пользовательском процессе). Кроме того, по понятным причинам вам нужно будет зацепить GetProcAddress.

4) Подключитесь к функциям LoadLibrary и контролируйте любые DLL файлы, которые загружаются динамически, чтобы предотвратить инъекцию DLL.

Это не так плохо, как кажется, потому что вам нужно сделать это только в локальном процессе.

6) Используйте некоторые методы отладки, чтобы предотвратить отладчики от присоединения к вашим процессам.

Конечно, стоит заняться (если у вас есть время), но это всего лишь удар скорости для опытного взломщика. Помните, что он всегда может отследить ваш код от запуска и наблюдать или обойти вашу анти-отладку. (Требуется время, но некоторые крекеры наслаждаются этим.)

7) Используйте специальный запатентованный PE-упаковщик, чтобы предотвратить полезную разборку вашей игры.

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

Ответ 2

Я лично не считаю, что имеет смысл наблюдать за памятью и так далее. Я могу себе представить, что вам нужно справиться с этим, когда кто-то реализует протоколл и создает некоторую дерьмо, которая также может привести к сбою вашего сервера.

Но вы правы, что можно проверить память на плохое программное обеспечение, которое обычно используется читерами, например. как wallhacks в egoshooters.

IMHO вам нужно проверить, действительно ли данные от клиента выглядят действительными и реагируют, чем на обман.

О вашем обновлении:
Пожалуйста, не зацикливайтесь на всех других прогаммах, это немного сумасшедшее, и это может позволить вашей программе быть обнаруженным как набор корней или что-то в этом роде.

Ответ 3

Я полностью согласен с тем, что говорят другие люди - некоторые из них (открытие всех других процессов и подключение функций эмуляции WriteProcessMemory, мыши/клавиатуры) являются сумасшедшими и смехотворными - особенно, поскольку пользователь может обойти это, отбросив привилегии на ваш процесс. Выполнение этого, безусловно, вызовет ура у некоторых пользователей.

Но если вы действительно хотите изо всех сил и делаете сумасшедшие вещи, такие как вредоносное ПО, почему бы не написать драйвер ядра, который исправляет флаг Protected (для Windows Vista и более поздних версий) или патч OpenProcess? Последний является более распространенным подходом (см. AV-программное обеспечение и вредоносное ПО); предыдущее является менее распространенным, но все же выполнимым - если вы можете загрузить KMD, вы можете исправить флаги и обойти требование подписи Microsoft.