description |
---|
Еще один пост о защите от читов, скопированный с форумов Unity для дальнейшего использования. |
[Защита от читов] - это обширная тема с различными этапами защиты, о которых вам следует знать.
Было бы разумно сначала реализовать почти всю игровую логику с упором на авторитарный сервер, прежде чем беспокоиться о клиентском античите.
Например, если здоровье игрока зависит от клиента, то никакие клиентские античиты не защитят вас от хакеров, включающих режим бога. Где, как и в случае с авторитарным сервером, вы никогда не стали бы спрашивать клиента о текущем состоянии здоровья. Вместо этого сервер сообщал бы клиенту о его здоровье и принимал бы все решения, связанные со здоровьем, а также проверял бы все запросы клиента, связанные со здоровьем. Например, при запросе на использование зелья всегда убедитесь, что игрок действительно владеет этим зельем, не мертв и т.д.
Это существенно повышает защиту игры, если только кто то не сможете получить доступ к серверной машине.
Однако некоторые аспекты, такие как перемещение, может быть довольно сложно сделать одновременно отзывчивыми и безопасными. Безусловно, возможно реализовать все ваше игровое состояние с помощью авторитарного сервера. Даже для перемещения, когда вы можете переместить клиента немедленно, отправьте перемещение на сервер, проверьте, было ли перемещение законным, а затем примите / отклоните его.
Тем не менее, клиенты все равно могут получить преимущества, просто считывая состояние из памяти, не манипулируя им.
Например, если ваша тактическая игра случайно сохранит в памяти все позиции противника, то хакеры могут попытаться извлечь их в своих интересах.
В этом случае было бы полезно отправить клиенту только необходимую информацию. Например, многие сетевые библиотеки предоставляют настраиваемое управление интересами (Interest Management). Вы могли бы реализовать подобное у себя, используя Raycasting, чтобы проверить, видит ли игрок другого игрока. В противном случае даже не отправляйте его игроку вообще (в этом случае он не может быть извлечен из памяти)..
Наконец, даже если ваша игра является авторитарной на сервере и сводит к минимуму информацию, отправляемую клиенту, для игры все равно могут быть читы. Например, авто-клики, фарм боты, аим боты и тому подобное.
Именно тогда вам следует начать беспокоиться о клиентском античите. Но имейте в виду, что это игра в догонялки с хакерами, в которой вы не выиграете, а только задержите их на какое то время. У реверс-инженеров есть сложные инструменты для обхода клиентских античитов, и вы, скорее всего, не сможете конкурировать со всеми ними в одиночку.
Дело доходит до того, что некоторым популярным играм приходится переносить свое античит-программное обеспечение из пользовательского пространства в ядро, где хакерам сложнее его обойти. Если ваша игра достаточно популярна, в конце концов, её читы обойдут.
Это очень широкая тема, и есть много вещей, которые вы можете сделать, о которых я не упоминал, таких как обфускация, виртуализация и т.д. Но, как уже упоминалось, было бы разумно начать с авторитарного сервера и свести к минимуму информацию, отправляемую клиенту
С другой стороны, имхо, попытка защитить клиентские хаки не идеальна. Вместо этого вам следует попытаться незаметно обнаруживать взломы, а затем банить хакеров через произвольное количество времени. Таким образом, хакер не будет знать, какое конкретное действие было обнаружено.\
Обратите внимание, что Mirror по умолчанию является серверо-авторитарным.
Interest Management и SyncMode для минимизации количества информации, отправляемой клиентам.