- PVSM.RU - https://www.pvsm.ru -

Почти невозможно найти успешную многопользовательскую онлайн-игру (кроме тех, в которые играют только друзья разработчика), в которой нет читеров. Другими словами, если в вашей публичной игре нет читеров, она или недостаточно популярна, или распознавание мошенников работает не слишком хорошо. Во всех остальных случаях вам придётся иметь дело с читерством. Изучите список шагов которые НУЖНО и НЕЛЬЗЯ совершать (подробное обсуждение темы читерства приведено в моей трёхтомной книге, см. примечание в конце статьи) при борьбе с мошенничеством в играх.
Нужно не просто добавить это право, но и указать, что такие решения принимаются «на собственное усмотрение». Однако здесь могут возникнуть трудности:
Конечно, сторонние разработчики движков защиты часто знают, что делают, но в условиях взлома систем с принципом security-by-obscurity такие движки становятся мишенью для всего хакерского сообщества. Поэтому добавление защиты сверху значительно улучшает ваше положение.
Как только появится сообщество читеров, делающих деньги на продаже читов к вашей игре, любое действие с вашей стороны будет вызывать ГОРАЗДО большее сопротивление. Другими словами, НЕЛЬЗЯ кормить читеров.
Это действительно очень важно. Более того, НУЖНО переместить всю логику на сервер. В идеальной ситуации в клиенте вообще не должно приниматься решений. Поскольку это не всегда возможно на 100% (в основном потому, что игры имеют очень высокий темп) НУЖНО бороться против каждого решения, принимаемого в клиенте. Чем больше расчётов выполняется в клиенте, тем больше возможностей у атакующего. Если вы не будете агрессивно переносить всё на серверную сторону, это постепенно станет Очень Большой Проблемой (я сталкивался с этим, и по такой теме было один доклад на GDC 2016).
НЕЛЬЗЯ придерживаться deterministic-lockstep архитектур (в которых синхронизация происходит только отправкой данных ввода). Хотя игры с deterministic-lockstep архитектурой меньше страдают от решений, выполняемых на стороне клиента, они довольно уязвимы к атакам утечки информации (таких как Wallhack и Maphack. См. ниже пункт о том, как ограничить клиент только необходимой для него информацией).
Шифрование трафика позволяет оградиться от нескольких типов атак, в том числе на основе прокси (с которыми иначе почти невозможно справиться) и некоторых типов ботов.
Замечания в этой связи:
Находите их, анализируйте и выпускайте исправления как можно раньше. Если игра достаточно успешна, стоит выделить для этого отдельную команду.
Не забывайте при анализе читов следующие принципы:
Очевидно, что чем популярнее чит, тем выше о должен быть в списке исправлений.
7. НЕЛЬЗЯ нанимать известных читеров
На самом деле у этого правила есть исключения. Во-первых, оно не касается white-hat-хакеров. Во-вторых, МОЖЕТ быть приемлемо нанять известных читеров, с соблюдением ВСЕХ следующих условий:
Будете ли вы банить читеров навечно, или всего на несколько дней? А как насчёт рецидивистов (на GDC 2016 говорили, что 72% читеров снова пробуют жульничать)? Какая у вас есть защита от читеров, открывающих новую учётную запись (подсказка: в F2P-играх на ПК такая защита почти отсутствует)?
Кроме того, НЕЛЬЗЯ поощрять игроков жаловаться на читеров. Они в любом случае будут жаловаться на то, что посчитают читерством, но подталкивание к жалобам может легко превратить достаточно большое количество игроков в параноиков. Хотя в некоторых случаях блокировка голосованием МОЖЕТ быть необходимой, разрешение игрокам выкидывать противников редко бывает хорошей идеей.
С другой стороны, НУЖНО воспринимать жалобы о читерстве серьёзно и вручную просматривать информацию в таких отчётах. Для этого НУЖНА отдельная команда, если игра успешна. И вам НУЖНО собрать достаточную информацию (статистическую и любую другую) для выполнения такого анализа. НУЖНО хранить такую информацию в базе данных и добавлять отчёты по запросам античитерской команды.
Другими словами, реализуйте так называемую систему «управления интересами». Любые данные в клиенте могут быть взломаны, поэтому передача уязвимой информации, которая не должна быть публичной — это Очень Плохая Идея. Если не реализовать управление интересами, то вы почти гарантировано подвергнете игру читам, делающим стены прозрачными (Wallhacks) и убирающим туман войны (Maphacks), а также ESP-читам (позволяющим видеть здоровье и другие параметры противника).
C++ можно взломать, но я обычно разделяю «крекинг» и «полномасштабную обратную разработку». По моему опыту, хотя программу на C++ можно «крякнуть» (т.е. можно найти и отключить ограниченный набор проверок, и найти и изменить ограниченное количество мест в памяти), полномасштабная обратная разработка для C++ гораздо более сложна, чем для C#/Java (я даже не говорю о JavaScript без компиляции Emscripten).
Если уж мы упомянули об этом, то надо заметить, что для этой цели Emscripten почти также хорош, как и C++. Сейчас я не могу ничем подтвердить свои слова, но судя по тому, что я знаю, всё выглядит именно так.
Нужно ли это объяснять?
То есть вам нужно избавиться от всех сообщений, которые не важны ни для кого, кроме вас (если вы хотите их сохранить, то можно всегда заменить их соответствующими хэшами).
Я помню случай, когда используемый алгоритм был восстановлен по невинному сообщению сторонней библиотеки, и это, в свою очередь, упростило создание почти хака. Повторюсь, в клиенте нужно обфусцировать всё, потому что любая выдаваемая информация может быть использована против вас (да, это очень похоже на правило Миранды [1]).
Если исходники утекут к хакерам, то 99% обфускации не будут иметь смысла.
В частности, если вы большая компания, то разделите исходный код на части, чтобы каждая часть была доступна только соответствующей команде. Кроме прочего, это поможет снизить ущерб от атак целевого фишинга на вашу команду, от которых практически невозможно защититься.
Это нужно выполнять хотя бы при запуске клиента (в идеале — и в процессе его работы, но это уже другая история).
Также обеспечьте отправку отчётов на сервер в случае компрометации сервера — если это и не чит, то определённо тревожный сигнал.
Вот типичные примеры ловушек:
Вместо того, чтобы сразу же блокировать читера, обычно всегда лучше отложить бан. Лично я не большой поклонник «волн блокировок» и предпочитаю случайные задержки для каждого игрока, но даже волны блокировок НАМНОГО лучше немедленных банов.
Практически невозможно отличить действительную задержку от внесённой взломанным клиентом (искусственный лаг). С другой стороны, если вы достаточно аккуратны, то сможете ограничить воздействие таких читов на геймплей.
Вы МОЖЕТЕ реализовать их, но не забывайте, что идентификация компьютера обходится тривиально (и обеспечьте, чтобы отделы маркетинга/монетизации/бизнес-аналитики тоже знали об этом, иначе они будут полагаться на идентификацию для предотвращения злоупотреблений рекламой).
Например, если игрок попадает в занимающий 5 процентов тела центр тяжести противника 95% времени, то можно что-то заподозрить.
Железное правило: статистика НЕ ДОЛЖНА использоваться как прямое доказательство, это только тревожный сигнал. Как выяснить, что делать с этим сигналом — отдельная история.
Последнее по порядку, но не по значимости: НЕЛЬЗЯ полагаться только на статистику, собранную клиентом. Другими словами, собирайте как можно больше статистики на стороне сервера.
Один из типов защиты, достаточно хорошо работающий против нежелательных ботов (обычно занятых гриндом) — это CAPTCHA. Надо признать, что она довольно раздражает, но я видел примеры того, как разработчик объяснял необходимость CAPTCHA сообществу игроков, и те признавали её «необходимым злом», если она проверяет пользователей только изредка.
Учтите, чтобы она работала, это НЕ ДОЛЖНА быть CAPTCHA для всех, её НАДО активировать только при срабатывании одного из тревожных сигналов.
Это довольно противоречивый вопрос, но скорее надо реализовать эту функцию, чем нет. Для большинства игр сканирование компьютеров игроков — это ГОРАЗДО меньшее зло, чем беспрепятственное читерство (оно разрушает для игроков интересность процесса, а значит, убивает вашу игру).
В целом, реализация такого сканирования очень сложна (она довольно похожа на написание собственного антивируса), так что я дам здесь несколько советов:
Конечно же, приведённый выше список неполон. Если ваша игра успешна, вам придётся самому узнавать на этом пути что-то новое (иногда это даётся очень тяжко). Однако вот самый важный принцип, который СИЛЬНО помог нам в этом отношении:
«Чтобы спастись от медведя, не нужно бежать быстрее него. Достаточно бежать быстрее, чем человек рядом с тобой».
Джим Батчер
В нашем случае это можно перефразировать так:
«Не обязательно защищаться от читерства на 100%, чтобы спасти игру от читеров. Достаточно быть лучше своих конкурентов».
«No Bugs» Hare
Экономика читов (особенно продаваемых за деньги) говорит нам, что при наличии двух целей, одна из которых очень привлекательна, но хорошо защищена, а другая средне привлекательна, но защищена слабо, коммерческие читеры определённо выберут последнюю. В конце концов, это просто бизнес, ничего личного.

В этой статье вкратце рассмотрена тематика читерства на основании материалов из книги «Development and Deployment of Multiplayer Online Games» [2] («Разработка и выпуск многопользовательских онлайн-игр»).
Автор: PatientZero
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka-igr/237913
Ссылки в тексте:
[1] правило Миранды: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE_%D0%9C%D0%B8%D1%80%D0%B0%D0%BD%D0%B4%D1%8B
[2] «Development and Deployment of Multiplayer Online Games»: http://ithare.com/ks/mog-vol1
[3] Источник: https://habrahabr.ru/post/320602/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.