Почти невозможно найти успешную многопользовательскую онлайн-игру (кроме тех, в которые играют только друзья разработчика), в которой нет читеров. Другими словами, если в вашей публичной игре нет читеров, она или недостаточно популярна, или распознавание мошенников работает не слишком хорошо. Во всех остальных случаях вам придётся иметь дело с читерством. Изучите список шагов которые НУЖНО и НЕЛЬЗЯ совершать (подробное обсуждение темы читерства приведено в моей трёхтомной книге, см. примечание в конце статьи) при борьбе с мошенничеством в играх.
1. Добавьте в условия использования своё право блокировать читеров
Нужно не просто добавить это право, но и указать, что такие решения принимаются «на собственное усмотрение». Однако здесь могут возникнуть трудности:
- Примечание: я не юрист, и эту статью не нужно считать юридическим советом. Лучше проконсультируйтесь со своим юристом.
- Это сложная юридическая проблема, решение которой зависит от страны или территории пребывания. НЕ принимайте решений по этому вопросу самостоятельно, узнайте у юриста (лучше, чтобы он был из вашей страны), будут ли ваши условия использования считаться действительным договором в суде. На GDC 2016 я разговаривал с человеком из одной крупной компании. Самой большой сложностью для них являлись юридические проблемы с баном обнаруженных читеров.
- Смысл здесь прост — иметь возможность банить игроков, если они жульничают. Однако нужно сформулировать условия использования таким образом, чтобы было ясно, что вам не нужно доказывать факт жульничества в суде, иначе преследование читеров становится слишком дорогой затеей. Самый важный юридический вопрос здесь в «бремени доказывания» — должны ли вы доказывать, что читеры мошенничают, или обвинённые читеры должны доказывать свою невиновность. Как вы понимаете, последнее гораздо выгоднее для вас и хуже для читеров. Я уже упомянул выше, что один из возможных способов решения этой проблемы — вставка оговорки «такие решения принимаются на наше собственное усмотрение». Однако нужно обязательно проверить действительность такой оговорки в соответствующей юрисдикции.
- Если это возможно, лучше всего иметь возможность блокировки игроков без возврата средств, чтобы жульничать было невыгодно. Но если это невозможно, то блокировка с возвратом денег НАМНОГО лучше, чем невозможность блокировать читеров вообще.
- НЕ слишком волнуйтесь о жалобах игроков на такие формулировки в условиях использования. Большинство игроков всё равно не читает условия, и при сравнении условий разных игр они всё равно мало отличимы друг от друга для широкой публики. Однако НЕ пытайтесь злоупотреблять этой формулировкой, иначе у вас очень быстро возникнут проблемы.
2. Если вы используете движок защиты стороннего изготовителя, НУЖНО добавить поверх него как можно больше своей защиты (или, что ещё лучше, объединить стороннюю и свою защиту)
Конечно, сторонние разработчики движков защиты часто знают, что делают, но в условиях взлома систем с принципом security-by-obscurity такие движки становятся мишенью для всего хакерского сообщества. Поэтому добавление защиты сверху значительно улучшает ваше положение.
3. НУЖНО бороться с читерами с самого начала
Как только появится сообщество читеров, делающих деньги на продаже читов к вашей игре, любое действие с вашей стороны будет вызывать ГОРАЗДО большее сопротивление. Другими словами, НЕЛЬЗЯ кормить читеров.
4. НУЖНО использовать полномочный сервер
Это действительно очень важно. Более того, НУЖНО переместить всю логику на сервер. В идеальной ситуации в клиенте вообще не должно приниматься решений. Поскольку это не всегда возможно на 100% (в основном потому, что игры имеют очень высокий темп) НУЖНО бороться против каждого решения, принимаемого в клиенте. Чем больше расчётов выполняется в клиенте, тем больше возможностей у атакующего. Если вы не будете агрессивно переносить всё на серверную сторону, это постепенно станет Очень Большой Проблемой (я сталкивался с этим, и по такой теме было один доклад на GDC 2016).
НЕЛЬЗЯ придерживаться deterministic-lockstep архитектур (в которых синхронизация происходит только отправкой данных ввода). Хотя игры с deterministic-lockstep архитектурой меньше страдают от решений, выполняемых на стороне клиента, они довольно уязвимы к атакам утечки информации (таких как Wallhack и Maphack. См. ниже пункт о том, как ограничить клиент только необходимой для него информацией).
5. НУЖНО шифровать трафик
Шифрование трафика позволяет оградиться от нескольких типов атак, в том числе на основе прокси (с которыми иначе почти невозможно справиться) и некоторых типов ботов.
Замечания в этой связи:
- Нет, использование UDP не является оправданием отсутствия шифрования трафика. Здесь на помощь приходит DTLS и некоторые другие протоколы.
- НУЖНО привязывать библиотеку OpenSSL статически. OpenSSL.DLL (или любая другая реализация шифрования через DLL) предоставляет атакующему гарантированный способ обхода шифрования.
- НЕЛЬЗЯ использовать анонимный протокол Диффи-Хелмана (Anonymous Diffie-Hellman, ADH). Да, об этом написано в каждой книге, но всё ещё находятся игры, в которых разработчики применяют его (как минимум одна игра даже упомянула ADH в окне About!).
- НУЖНО проверять сохранённый корневой сертификат на стороне клиента (да, некоторые разработчики этого по-прежнему не делают).
- НЕЛЬЗЯ использовать сертификат с машины пользователя. Вместо этого создайте свой центр сертификации и встройте корневой сертификат в клиент (иначе повышается вероятность MITM-атак).
- Обфусцируйте корневой сертификат в исполняемых файлах клиента, иначе подвергнетесь другому типу MITM-атак.
6. НУЖНО отслеживать публично доступные и платные читы
Находите их, анализируйте и выпускайте исправления как можно раньше. Если игра достаточно успешна, стоит выделить для этого отдельную команду.
Не забывайте при анализе читов следующие принципы:
Очевидно, что чем популярнее чит, тем выше он должен быть в списке исправлений.
- Что ещё более очевидно, НЕЛЬЗЯ запускать читы внутри собственной сети (иначе исполнится мечта очень многих читеров). Вместо этого создайте надёжно огороженную файрволлом «песочницу» (в идеале — в отдельном месте, не имеющем VPN между внутренней сетью и «песочницей»).
7. НЕЛЬЗЯ нанимать известных читеров
На самом деле у этого правила есть исключения. Во-первых, оно не касается white-hat-хакеров. Во-вторых, МОЖЕТ быть приемлемо нанять известных читеров, с соблюдением ВСЕХ следующих условий:
- У них НЕ будет специального доступа к «внутренностям» программы (в особенности к исходному коду)
- Они должны заниматься ТОЛЬКО «black-box-взломом» (которым они и так бы занялись). Единственная разница в том, что они будут сообщать о результатах взлома, а не использовать его.
- Всю связь с нанятыми читерами НУЖНО вести с отдельной учётной записи электронной почты (полностью изолированной от остальной части системы).
- Доступ ко всей информации с этой отдельной учётной записи ДОЛЖЕН быть только внутри «песочницы», настроенной для анализа читерских программ
8. НУЖНО думать о политике блокировок
Будете ли вы банить читеров навечно, или всего на несколько дней? А как насчёт рецидивистов (на GDC 2016 говорили, что 72% читеров снова пробуют жульничать)? Какая у вас есть защита от читеров, открывающих новую учётную запись (подсказка: в F2P-играх на ПК такая защита почти отсутствует)?
9. Проверенное правило: НЕЛЬЗЯ полагаться на игроков в жалобах на читерство
Кроме того, НЕЛЬЗЯ поощрять игроков жаловаться на читеров. Они в любом случае будут жаловаться на то, что посчитают читерством, но подталкивание к жалобам может легко превратить достаточно большое количество игроков в параноиков. Хотя в некоторых случаях блокировка голосованием МОЖЕТ быть необходимой, разрешение игрокам выкидывать противников редко бывает хорошей идеей.
С другой стороны, НУЖНО воспринимать жалобы о читерстве серьёзно и вручную просматривать информацию в таких отчётах. Для этого НУЖНА отдельная команда, если игра успешна. И вам НУЖНО собрать достаточную информацию (статистическую и любую другую) для выполнения такого анализа. НУЖНО хранить такую информацию в базе данных и добавлять отчёты по запросам античитерской команды.
10. НУЖНО передавать клиенту только необходимую информацию
Другими словами, реализуйте так называемую систему «управления интересами». Любые данные в клиенте могут быть взломаны, поэтому передача уязвимой информации, которая не должна быть публичной — это Очень Плохая Идея. Если не реализовать управление интересами, то вы почти гарантировано подвергнете игру читам, делающим стены прозрачными (Wallhacks) и убирающим туман войны (Maphacks), а также ESP-читам (позволяющим видеть здоровье и другие параметры противника).
11. НУЖНО использовать C++ в клиенте
C++ можно взломать, но я обычно разделяю «крекинг» и «полномасштабную обратную разработку». По моему опыту, хотя программу на C++ можно «крякнуть» (т.е. можно найти и отключить ограниченный набор проверок, и найти и изменить ограниченное количество мест в памяти), полномасштабная обратная разработка для C++ гораздо более сложна, чем для C#/Java (я даже не говорю о JavaScript без компиляции Emscripten).
Если уж мы упомянули об этом, то надо заметить, что для этой цели Emscripten почти также хорош, как и C++. Сейчас я не могу ничем подтвердить свои слова, но судя по тому, что я знаю, всё выглядит именно так.
12. НИ В КОЕМ СЛУЧАЕ не выпускайте игру с отладочной информацией внутри
Нужно ли это объяснять?
13. НУЖНО пройтись по коду и отфильтровать все сообщения об ошибках
То есть вам нужно избавиться от всех сообщений, которые не важны ни для кого, кроме вас (если вы хотите их сохранить, то можно всегда заменить их соответствующими хэшами).
Я помню случай, когда используемый алгоритм был восстановлен по невинному сообщению сторонней библиотеки, и это, в свою очередь, упростило создание почти хака. Повторюсь, в клиенте нужно обфусцировать всё, потому что любая выдаваемая информация может быть использована против вас (да, это очень похоже на правило Миранды).
14. НУЖНО беречь исходный код как свою жизнь
Если исходники утекут к хакерам, то 99% обфускации не будут иметь смысла.
В частности, если вы большая компания, то разделите исходный код на части, чтобы каждая часть была доступна только соответствующей команде. Кроме прочего, это поможет снизить ущерб от атак целевого фишинга на вашу команду, от которых практически невозможно защититься.
15. НУЖНО проверять целостность клиента (в том числе ресурсов и/или конфигурации)
Это нужно выполнять хотя бы при запуске клиента (в идеале — и в процессе его работы, но это уже другая история).
Также обеспечьте отправку отчётов на сервер в случае компрометации клиента — если это и не чит, то определённо тревожный сигнал.
16. НУЖНО установить в клиенте «ловушки» для читеров
Вот типичные примеры ловушек:
- Одно и то же значение хранится дважды в памяти клиента и время от времени проверяется на равенство. Для эффективности такой ловушки нужно обфусцировать память хотя бы в одном месте хранения (например, XOR какой-нибудь константой, хотя можно реализовать это ГОРАЗДО более сложно). Если значения не одинаковы, то это Очень Тревожный Сигнал, хотя я и против того, чтобы один случай такого несовпадения считался убедительным доказательством. Когда у игры миллион игроков, с некоторыми из них иногда происходят Очень Странные Вещи.
- Проверка целостности критичных частей кода клиента и проверка на наличие подозрительных внедрённых DLL.
- Измерение времени исполнения кода для поиска необычно долгих задержек, указывающих на отладку клиента. В этом случае интересным вариантом является инструкция RDTSC платформ x86/x64, потому что она часто позволяет измерять время даже при наличии отладчика ядра.
- Ещё один особый тип ловушек — «honey pot». Технически «honey pot» отличается от обычной ловушки в том, что для читера создаётся искусственная мишень.
17. НЕЛЬЗЯ сообщать читеру сразу же, что вы его поймали
Вместо того, чтобы сразу же блокировать читера, обычно всегда лучше отложить бан. Лично я не большой поклонник «волн блокировок» и предпочитаю случайные задержки для каждого игрока, но даже волны блокировок НАМНОГО лучше немедленных банов.
18. Не забывайте, что почти любая компенсация лага открывает возможность для читов, основанных на времени
Практически невозможно отличить действительную задержку от внесённой взломанным клиентом (искусственный лаг). С другой стороны, если вы достаточно аккуратны, то сможете ограничить воздействие таких читов на геймплей.
19. НЕЛЬЗЯ полагаться ни на какие способы идентификации компьютера
Вы МОЖЕТЕ реализовать их, но не забывайте, что идентификация компьютера обходится тривиально (и обеспечьте, чтобы отделы маркетинга/монетизации/бизнес-аналитики тоже знали об этом, иначе они будут полагаться на идентификацию для предотвращения злоупотреблений рекламой).
20. НУЖНО собирать статистику, которая может быть связана с читерством
Например, если игрок попадает в занимающий 5 процентов тела центр тяжести противника 95% времени, то можно что-то заподозрить.
Железное правило: статистика НЕ ДОЛЖНА использоваться как прямое доказательство, это только тревожный сигнал. Как выяснить, что делать с этим сигналом — отдельная история.
Последнее по порядку, но не по значимости: НЕЛЬЗЯ полагаться только на статистику, собранную клиентом. Другими словами, собирайте как можно больше статистики на стороне сервера.
21. НУЖНО обдумать CAPTCHA для распознавания гриндящих ботов
Один из типов защиты, достаточно хорошо работающий против нежелательных ботов (обычно занятых гриндом) — это CAPTCHA. Надо признать, что она довольно раздражает, но я видел примеры того, как разработчик объяснял необходимость CAPTCHA сообществу игроков, и те признавали её «необходимым злом», если она проверяет пользователей только изредка.
Учтите, чтобы она работала, это НЕ ДОЛЖНА быть CAPTCHA для всех, её НАДО активировать только при срабатывании одного из тревожных сигналов.
22. НУЖНО быть готовыми к сканированию компьютеров игроков на предмет известного читерского ПО
Это довольно противоречивый вопрос, но скорее надо реализовать эту функцию, чем нет. Для большинства игр сканирование компьютеров игроков — это ГОРАЗДО меньшее зло, чем беспрепятственное читерство (оно разрушает для игроков интересность процесса, а значит, убивает вашу игру).
В целом, реализация такого сканирования очень сложна (она довольно похожа на написание собственного антивируса), так что я дам здесь несколько советов:
- НУЖНО добавить в условия использования раздел о праве на такое сканирование.
- НЕЛЬЗЯ получать любую другую информацию, кроме необходимой для распознавания читов.
- Если вы проигрываете читерам в этой битве, НУЖНО рассмотреть варианты решений на основании драйверов устройств (подсказка: существуют такие коммерческие продукты)
- При использовании сканирования НУЖНО распознавать запуск в виртуальной машине (ВМ часто используются для сокрытия программного обеспечения, и их обычно НУЖНО считать тревожным сигналом)
- НУЖНО рассмотреть необходимость ДВУХ уровней распознавания. Первый уровень может быть простым распознаванием самых очевидных и популярных читов, и должен приводит к дружелюбному сообщению: «Ты используешь кое-что, запрещённое правилами. Не нужно этого делать, А НЕ ТО...». На втором уровне выполняется полномасштабное распознавание, приводящее к бану. Задумка здесь в том, чтобы остановить потенциального читера, пока не будет слишком поздно, по возможности не потеряв при этом игрока. Я видел примеры того, что такой подход хорошо работал в довольно большой многопользовательской игре (но тут, как говорится, нет никаких гарантий)
Заключение
Конечно же, приведённый выше список неполон. Если ваша игра успешна, вам придётся самому узнавать на этом пути что-то новое (иногда это даётся очень тяжко). Однако вот самый важный принцип, который СИЛЬНО помог нам в этом отношении:
«Чтобы спастись от медведя, не нужно бежать быстрее него. Достаточно бежать быстрее, чем человек рядом с тобой».В нашем случае это можно перефразировать так:
Джим Батчер
«Не обязательно защищаться от читерства на 100%, чтобы спасти игру от читеров. Достаточно быть лучше своих конкурентов».
«No Bugs» Hare
Экономика читов (особенно продаваемых за деньги) говорит нам, что при наличии двух целей, одна из которых очень привлекательна, но хорошо защищена, а другая средне привлекательна, но защищена слабо, коммерческие читеры определённо выберут последнюю. В конце концов, это просто бизнес, ничего личного.
В этой статье вкратце рассмотрена тематика читерства на основании материалов из книги «Development and Deployment of Multiplayer Online Games» («Разработка и выпуск многопользовательских онлайн-игр»).
Комментарии (105)
schetilin
28.01.2017 13:14+2022. НУЖНО быть готовыми к сканированию компьютеров игроков на предмет известного читерского ПО
За такое игра сразу идет в корзину.
Если вы проигрываете читерам в этой битве, НУЖНО рассмотреть варианты решений на основании драйверов устройств (подсказка: существуют такие коммерческие продукты)
Еще один StarForce?DistortNeo
28.01.2017 16:15-3За такое игра сразу идет в корзину.
К сожалению, тогда вообще придётся отказаться от некоторых онлайн-игр. И это плохо.
saboteur_kiev
29.01.2017 03:34+1Нужно просто заниматься аналитикой, и убирать из игры то, на что чаще всего читят.
Для ММОРПГ есть СТОЛЬКО вариантов как правильно надавить на читеров.
Нужно понимать, что игроки редко читят сами по себе — они ищут готовые читы и качают их/покупают. Нужно активно анализировать эти моменты и делать так, чтобы чит был невыгоден для игрока. Они перестанут качать и хакер поищет другие варианты. Если увидит, что другие варианты оперативно блокируются, забьет и пойдет искать другие игрушки.vikarti
29.01.2017 06:53+1вот кстати в EVE Online после нескольких серий в итоге как минимум:
раз в 30 секунд прилетает пакет с байткодом на питоне который нужно выполнить и ответить. не ответ или не правильный ответ — почти сразу дисконнект. прилетает обычно проверки на то, не влезли ли в питон-часть + иногда — не загружено ли в процесс то, чего там быть не должно по мнению разработчиков.
И далеко не сразу будет бан, если вообще будет даже если в логах сервера видно что кто-то консоль на клиенте запустил и развлекается (есть… опыт).
Только вот реальная борьба похоже идет именно с RMT — анализ серверных логов на предмет передачи ресурсов между аккаунтами для целей RMT и выдача банов по цепочкам. Маскировка IP и железа компьютера не помогает (нет, драйверов CCP не используют).
Декомпилированные актуальные исходники (питон-части — там вся высокоуровневая логика) — они есть вообще у всех кому они вообще нужны похоже. Более того — CCP вообще выкладывали презентации с описанием как их движок работает.
Декомпиляторов питона на данный момент насколько я в курсе существуют два. один из которых — opensource и его добрые люди специально допиливали под CCP.
Suvitruf
28.01.2017 13:28+911. НУЖНО использовать C++ в клиенте
Весьма странный совет.
14. НУЖНО беречь исходный код как свою жизнь
Совет из разряда «у нас на двери нет замка, но никому не говорите об этом, тогда наш дом будет в безопасности». Утечка сорсов не должна быть большой проблема в плане читов. По-моему, лучше поставить нормальный замок, чем надеяться, что сорсы не сольют.kemko
28.01.2017 14:37+2Весьма странный совет.
Соглашусь, но расшифровка делает посыл чуть более понятным. Видимо, имелось в виду "НЕЛЬЗЯ использовать для написания клиента язык, который легко декомпилировать до состояния человекочитаемых инструкций".
Понятно, что даже результат компиляции в ассемблер нельзя назвать не человекочитаемым (захочет — разберётся, вопрос только во временных затратах). Но чем сложнее для понимания будет скомпилированный клиент, тем, в рамках борьбы с читерством, видимо лучше.
Но и с такой расшифровкой совет не однозначный. Всегда нужен баланс между сложностью разработки и желанием понаставить побольше палок в колёса читерам, ведь код нужно не только один раз написать и забыть, но и поддерживать.ю
DistortNeo
28.01.2017 15:57+1Утечка сорсов не должна быть большой проблема в плане читов.
Смотря что утечёт. Если исходники античит-системы или приватные ключи, то это очень даже проблема.
Envek
28.01.2017 21:55+4Если у вас боевые приватные ключи лежат в исходниках — у вас уже большие проблемы, чего уж там…
Fen1kz
28.01.2017 14:35+3Как раз пишу онлайн игру, зашел почитать какая ещё защита кроме 10 совета бывает, а тут такой лютый бред менеджера по работе с коммьюнити и замашками тирана =(
Что вообще это делает в "Разработка" и "Разработке игр"? переместите, пожалуйста, в "Управление".
Перлы вроде "11. НУЖНО использовать C++ в клиенте" показывают что автор про программирование и разработку только слышал.
kraidiky
28.01.2017 18:56+4Как минимум с кода работающего на C# можно легко снять и разобрать по составляющим мемори снапшот. Проанализировать также память куска программы на C++ будет совсем не так просто. Конечно и на C# можно заставить программистов работать с указателями и выделяемой памятью, но я ни разу не сталкивался с программистами реально использовавшими unsafe code не только для простейшей арифметики, кроме самого себя. Ну или они не признавались. :)
Fen1kz
28.01.2017 19:36-4Вы серьезно? Есть онлайн-игра "The Battle for Wesnoth", она вообще open source. Представляете? Это, по вашей логике, вообще катастрофа!1!1! Кто угодно может скачать и посмотреть исходный код. Да там наверное игроков-то и нет, одни читеры, да?
kraidiky
28.01.2017 20:15+6The Battle for Wesnoth то конечно известный шутер от первого лица. :))
По моей логике у разных игр разные ограничения и требования. Когда я делал мультиплеерные карточные игры там на сервере правила вообще можно было не проверять, это делали на клиенте другие участники игры (это выбо ещё в те замшелые времена когда принято было экономить проц на сервере). И там это было достаточной защитой.
Вот когда вы CS GO опенсорсный предъявите — вот тогда это будет аргументом.Fen1kz
29.01.2017 04:58-5The Battle for Wesnoth то конечно известный шутер от первого лица. :))
Речь идет про онлайн-игры. Ты статью почитай, там нету слова "шутеры" :)) И как сказал andreymal — 3 квака опенсорс, тоже читеры?
Когда я делал мультиплеерные карточные игры там на сервере правила вообще можно было не проверять
А, ну всё с тобой понятно. Вот из-за таких как ты такие статьи и выходят =( С советами уровня "используйте С++ в клиенте"
Так что не, тебе опенсорсный CS:GO ещё рано, ногу себе отстрелишь :D
Saffron
28.01.2017 15:21+14> Большинство игроков всё равно не читает условия,
Горите в аду за такие советы! Я читаю, и знаю какая там жопа.
> НУЖНО быть готовыми к сканированию компьютеров игроков на предмет известного читерского ПО
А за сканирование нужно отправлять в ад досрочно.EndUser
28.01.2017 15:37-4Разве поиск присутствия того же CheatEngine в оперативке — это наглость?
Akuma
28.01.2017 15:51+9Он может использоваться для другой игры или вообще для каких-то своих целей.
Игра не должна выходить за рамки себя самой, а то так можно встроить десяток сканеров, антивирус и файервол до кучи. Мало ли что.EndUser
28.01.2017 21:52Это было бы мирно и хорошо, если бы игра гуляла в trusted environment, получая на отсутствие некого защитного любопытства взамен гарантию того, что в в её пространство не будут лезть тоже.
Вы можете назвать какие-то не критические аргументы против «лишнего» кода, а конструктивные аргументы по поводу защиты онлайновой игровой валюты, которая при определённых страстях начинает соотноситься с реальной валютой?
Может быть Saffron, который, наверняка тоже минусовал?
Так-то в оффлайне игрок пусть делает что хочет, хоть баллистические хелперы вкрячивает, хоть миллиарды лумбера себе выписывает, хоть термоядерные пули изобретает или, банально, прозрачные текстуры. Покуда это не касается баланса других игроков.
Интересует именно вопрос в рамках авторской темы — защита игроков от онлайн-несправедливости, причиняемой читерами (ну и компании тоже, разумеется).Akuma
28.01.2017 22:27+2Производительность. Вспомните тот же Denuvo и глюки, которые он создает. Владельцы слабых мощностей оценили. На онлайн играх его вроде пока нет, но суть та же, как я понимаю.
В общем, если ваши меры защиты не влияют на производительность (ну или хотя бы этого не видно) и не мешают остальной работе системы, то делайте что угодно и будете правы. В этих же двух случаях нужно либо никому об этом не говорить, либо внушить игрокам сказку про «меньшее зло».
Помню, лет 10 назал во времена Lineage II: CS4 я состряпал что-то самописное для своих нужд. Оно перехватывало нажатия клавиатуры и что-то там делало, не суть. Так вот Ла2 в те времена перехватывало нажатия клавиш и шифровало их. В итоге мое детище работать переставало при запущенной игре. Вроде бы мелочь, а неприятно.DistortNeo
29.01.2017 01:59Так вот Ла2 в те времена перехватывало нажатия клавиш и шифровало их.
Каким образом пытались это делать? У меня обычный Low level keyboard hook вполне нормально работал.
Каюсь, я сам был читером — надоело играть честно после пары лет игры, когда саппорт закрывал глаза на любые нарушения, кроме неполиткорректного треша в общем чате. Правда, мне было интереснее разрабатывать софт, а не использовать его. Могу сказать, что защита на европейских серверах — GameGuard — была очень слабой и обходилась вообще без каких-либо сложностей, при этом она конфликтовала с антивирусами и прочим софтом, из-за чего её сильно ругали. Затем пару недель троллил Иннову на бета-сервере, которая обещала сделать российскую локализацию Lineage II, свободную от читеров и ботов.
Akuma
29.01.2017 02:01Каким образом перехватывал нажатия клавиш?
Хм. Вряд ли вам это что-то скажет, но с помощью соответствующего компонента в HiAsm.
Это было в те ламповые времена, когда у меня только появился компьютер :)
Saffron
28.01.2017 22:31+3Всё очень просто. Разработчик не можете доверять игроку (и его читам). А игрок не может доверять разработчику (и его троянам). Выход: на деньги играем в контролируем окружении, чтобы не было как в доте, когда соревнования проводятся онлайн и вместо заявленных в команде людей в их аккаунты входят другие игроки. Возможна какая-то сеть авторизованных киберкафе. А если играем на интерес — подбираем друзей, которым можем доверять.
Техническими мерами всё равно проблему не решить: даже если ты полностью зачистишь комп, никто не помешает игроку навести камеру на монитор и подключить в usb чудо-мышку, которая будет двигать курсор программно — тот же aim bot, только техническийdadyjo
30.01.2017 11:41Тоже про чудо мышку думал. Разработка такой мышки это вызов для настоящего гика :)
Ведь нужно за считанные миллисекунды, распознавать кадры и еще мышку двигать!Gray_Wolf
30.01.2017 17:10Про распознование кадров сразу вспомнилась статья про KolibriOS
Возьмем, к примеру, «одноглазого» робота, который движется по скоростной железной дороге со скоростью 200 км/ч и наблюдает за состоянием контактной электросети.
Контактный кабель — стальной пруток диаметром 20мм, вихляющий над токоприёмником из стороны в сторону с амплитудой 50см. На этом кабеле надо разглядеть зазубрины размером не менее 0,5 миллиметра.
При обнаружении такой зазубрины — сохранить её фотографию и запомнить время и место (чтоб ремонтники знали где её искать), а если все нормально — сохранять только один кадр из тысячи.
Saffron
28.01.2017 16:29+5Такие дофига умные игры приходится запускать в виртуалке. А потом выходит совет по борьбе с читами №42: запретите запускаться в виртуалках (их легко обнаружить по специфическим дровам) — и привет!
JediPhilosopher
28.01.2017 15:58+2Не хватает каких-нибудь историй из реальной жизни. Например о том как нанятый читер поломал корпоративную сеть, выслав замаскированный под отчет о работе вирус. Ведь эти советы про общение с отдельного почтового ящика изнутри песочницы откуда-то наверное взялись.
lookid
28.01.2017 16:11Да не будет историй. Все читы делятся на рид-онли и не-рид-онди. Wallhack спалить нереально, т.к. он просто читает память и рисует средствами winapi поверх окна. Остальное — да, лезут менять данные и нужно шифровать, считать на сервере, валидировать, прятать и прочее.
DistortNeo
28.01.2017 16:19И именно поэтому анти-чит системы представляют собой типичные руткиты. Одна из их задач — запретить читать память процесса, причём любой ценой.
sleeply4cat
28.01.2017 23:42+3Немного забавно и в то же время грустно запускать такие игры под виртуалкой и совершенно безнаказанно патчить память извне.
saboteur_kiev
29.01.2017 03:37Меня всегда интересовало, насколько сложно НЕ передавать на клиент информацию о тех игроках, которых он не видит?
Darth_Malok
29.01.2017 14:02Опыт World of Tanks показывает, что сложно.
Это очень медленный шутер, но, насколько я помню, расчёт видимости потребляет большую часть ресурсов сервера. И всё-равно имеем ситуации, когда противник выезжает из за угла, и стреляет, а ты его «замечаешь» только когда он уже закатывается обратно. Просто ты был в начале очереди расчёта видимости, а он в конце — до него очередь в нужный момент не дошла.
lookid
29.01.2017 18:20Главная паника тут в том, что игрок может не увидеть там, где должен увидеть. В какую-нибудь щель или прострел. А рейтрейсинг на сервере из каждой позиции игрока как-то не очень.
Можно разбить карту на части и если игроки находятся в одной, то они видят друг-друга. Но это нужно делать руками, и легко ошибиться. Попробуйте так разбить карту для CS:GO.lieff
29.01.2017 18:37Разбить не проблема, надо просто BVH или KdTree дерево сгенерировать. Только вот лучей придется трейсить много. А еще из-за лагокомпенсации нужно это делать не из одной точки, например когда вплотную к краю стены стоишь, даже малый сдвиг открывает большой обзор. А ведь сервер не знает еще куда двигать, от клиента может придти команда двигаться куда угодно, если ошибку линейной лагокомпенсации движения можно сгладить на клиенте и это не так заметно, то недопередача на клиент видимых объектов это наизаметнейший артефакт. Потому придется находить все видимые объекты из шаровой обрасти, получается и по расчетам дорого и читерство невидимых стен все еще вполне актуально.
scronheim
30.01.2017 09:20punkbuster кстати для этого делает скриншоты и шлет себе на сервер, если видит какие то лишние полосы на скрине, то сразу бан
ExplosiveZ
28.01.2017 16:05+6Как-то непонятно, что нужно, а что нельзя, надо было так выделять слова НУЖНО и НЕЛЬЗЯ. И еще размер шрифтов раз в 10 надо-бы увеличить.
Куда скатился хабр, даже geektimes более технический ресурс, чем этот сайт с надмозговыми переводами и платными блогами.PatientZero
28.01.2017 18:52А в чём именно надмозговость перевода?
RussDragon
28.01.2017 19:05+4Перевод просто ужасен. Обычно симпатизирую Вашем переводам, а тут какой-то тихий ужас. Не знаю, может быть и в других статьях так же и я просто был невнимателен.
Взял первую попавшуюся на глаза строчку:
Это довольно противоречивый вопрос, но скорее надо реализовать эту функцию, чем нет.
This is a rather controversial issue, but much more likely than not you will need to implement it.
Просто бездумное калькирование логики построения и структуры фразы из английского языка на русский. Извините, но так статьи не переводят. Не для таких ресурсов. Постоянные повторы одних и тех же слов и словосочетаний: «довольно», «другими словами», вечные «это»/«эти»/«этим».
Если вы и правда зовете себя «переводчиком-фрилансером», то, пожалуйста, прочитайте ту же Нору Галь с её «Слово живое и Мертвое». Да, книжка старая и некоторые моменты устарели, но в вашем случае качество статей может увеличиться на порядок. ИМХО.
А, да, верстка режет глаз.
Barafu
28.01.2017 16:15+10Использование защиты, включающей в себя драйвер — для меня этого достаточно, чтобы отнести игру к разряду малвари. Даже если разработчик весь из себя такой ангел, все равно у него могут украсть ключи, используемые для обновления этой фиговины. Или у разработчика защиты, если это отдельное лицо.
Разработчики игр совсем охренели и позволяют себе выходки, не допустимые даже среди самих читеров. У меня стоит ПО и настройки, препятствующие сканированию и установке драйверов. Если из-за них игра не запускается, я обращаюсь в магазин за компенсацией, потому что продали неработающую игру. В обращении так и пишу — на игру сработала защита от малвари. Возвращают.lieff
28.01.2017 16:23Более того, драйвер под виндой обязательно должен быть подписан. А подписать драйвер навечно сейчас невозможно. То есть без обновления игра протухнет.
APXEOLOG
28.01.2017 17:21+5- НУЖНО использовать C++ в клиенте
Нет, не нужно. Более того, в некоторых случаях вы можете вообще открыть исходный код клиента игры. Просто не нужно обрабатывать логику на клиенте, тогда вам не нужно будет думать о читерах
DistortNeo
28.01.2017 17:45-2Просто не нужно обрабатывать логику на клиенте, тогда вам не нужно будет думать о читерах
Вы же понимаете, что просто невозможно обрабатывать всё на сервере? Либо вычислительная сложность будет такой, что игра перестанет быть экономически оправданой.
APXEOLOG
28.01.2017 17:56Нет, не понимаю. Я уже много лет играю в ММО где применяется именно такой подход
DistortNeo
28.01.2017 18:08А я утверждаю, что такой ММО не существует. Дело не в командах от клиента, а в том, что сервер всегда передаёт больше данных, чем требуется клиенту для отображения игровой сцены на экране. А по-другому никак: вы же не хотите, чтобы при вращении камеры игроки появлялись только через пару сотен миллисекунд?
kraidiky
28.01.2017 19:01Но, например, вполне можно не передавать информацию об игроках которых вы физически не видите, не увидите ближайшие 100 мс. и весьма условно передавать информацию о том, с какой стороны вы их слышите.
APXEOLOG
28.01.2017 21:26Вы мыслите не в том направлении
QDeathNick
28.01.2017 22:02+1Не знаю о чём вы, но у меня давно есть мысль, что многие проблемы исчезнут, когда клиент будет получать лишь картинку, нечего будет ломать.
APXEOLOG
28.01.2017 22:48Я говорил это автору, который утверждает что таких ММО не существует. Я полностью согласен с вами, и более того, я знаю пример ММО с тонким клиентом
kraidiky
29.01.2017 10:00Учитывая развитие технологий предсказываю появление нейросетей, которые будут смотреть на видеопамять и подсвечивать вам замаскированных игроков. :)
QDeathNick
29.01.2017 10:58+1Муж сестры дальтоник, в играх есть настройки, но они всё равно не сильно ему помогают. Зато жена помогает. Сидит рядом и наводит его. Читеры.
А когда в общаге устроили чемпионат в Q3, моя жена считала время появления брони и хелсы на двух секундомерах.
Играя онлайн, надо понимать, что у противника могут быть спецсредства, это неизбежно.
Darth_Malok
29.01.2017 14:06И всё равно, можно пропустить эту картинку через устройство захвата видеосигнала, подключить вместо элементов управления хитрую железяку, которая будет общаться с устройством захвата видеосигнала, и получить «аппаратный аимбот»)
В динамичных играх читерство непобедимо, imho.
MikailBag
02.02.2017 21:29Играю в World of Warships. Насколько я слышал, есть чит, который тупо показывает упреждение для стрельбы. Хоть разрабы трижды картинку отправлять будут — этот чит не умрет.
andreymal
28.01.2017 18:09Не знаю, что за MMO, но как минимум в стрелялках без вычислений на клиенте нельзя вообще никак, вроде ещё Кармак по этому поводу ныл когда-то (пруфы затерялись)
APXEOLOG
28.01.2017 22:51Именно в стрелялках вычисления должны быть на сервере, иначе всю вашу стрелялку по умолчанию можно выкидывать, т.к. играть в нее будут одни читеры.
То, что вы наверное имеете в виду, это предиктивные вычисления, которые дублируют серверные вычисления и нужны лишь для того, чтобы на клиенте не было визуальных рассинхронизацийandreymal
28.01.2017 22:59Тогда выстрел, выглядящий абсолютно точным на стороне клиента, может оказаться промахом на стороне сервера из-за лага, джиттера, неидеальности физического движка, столкновения с другим игроком (все ведь замечали возникающие при этом дёргания?), чего угодно ещё. Так что сервер вынужден доверять клиенту, чтобы стрелялка была хоть как-нибудь играбельной
hacklex
28.01.2017 23:55+1Не, не вынужден, и доверие клиенту на уровне «попал/не попал» фатально для неказуальной состязательной стрелялки. Лагокомпенсация, предсказание положений объектов и их отрисовка в ожидаемых положениях – что угодно, но не «окей, раз он утверждает, что попал, значит, попал».
Кстати, на хабре уже была толстая статья про смежные проблемы. Разумеется, к счастью, вряд ли им даже в голову приходило доверять клиенту.andreymal
29.01.2017 00:07А недоверие фатально для играбельности. Никакая лагокомпенсация не осилит вычислить движение вперёд, резко поменявшееся на торможение и движение назад.
толстая статья
Забавно, но именно её я в эту ветку и хотел скинуть в качестве подтверждения своих слов.)) Благо там прямым текстом написано:
Каждый раз когда вы пытаетесь узнать, получил ли кто-нибудь пулю, сервер просто возвращает всех игроков на правильные (с точки зрения задержки клиента) позиции, интерполирует время и наблюдает – получил кто пулю, или нет.
определением столкновений в Battlefield 3 занимается клиент, а не сервер
Да, я упустил в своих комментах, что хоть какие-то, но проверки таки есть, мой косяк. Тем не менее, простор для читерства всё ещё имеется (aimbot как минимум), и, насколько мне известно, читы таки процветают)APXEOLOG
29.01.2017 00:29А недоверие фатально для играбельности
Расскажите это Counter Strike
andreymal
29.01.2017 00:30Хз-хз, как раз про его читы я чаще всего и слышу)
APXEOLOG
29.01.2017 00:43Мне не совсем понятен ваш комментарий.
Если вы сомневаетесь в том, что Counter Strike не доверяет клиенту, вы можете почитать информацию по данной теме, например https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
А что до читов — как вы верно подметили выше, вспомогательные читы (аим, компенсация отдачи) невозможно устранить никакими технологиями. Чем популярнее игра, тем больше вероятность, что такие читы будут. Однако это не оправдание для разработчиков (Это как если бы вы убрали замки из двери своей квартиры, все равно ведь есть способы их обойти)
hacklex
29.01.2017 04:18хоть какие-то, но проверки, таки есть
«доверяй, но проверяй» немного не «ну что там, попал?». Впрочем, ниже Вам уже ответили. Лично я изредка запускаю по старой памяти cs16, там действительно дыра на дыре, и античиты справляются очень посредственно. При этом, правда, лично я причиной вижу отсутствие финансового стимула к разработке таких античитов. Но и читы там не такие серьёзные с технической точки зрения: данные слишком доступны для перехвата. Не сравнить с читами, встроенными в драйверы мыши/клавы, для некоторых других игр. Правда, эту информацию я лично не проверял.
Тем не менее, трафик закрывать очень, очень желательно. Я бы посмотрел на вариант идеальной архитектуры стрелялки, при которой факт полной доступности трафика никак не помогал бы читеру, это не сарказм, мне правда интересно. Можно переформулировать: Как должна выглядеть архитектура, чтобы
а) открытие трафика не облегчало бы создание читов
б) закрытие трафика не усложняло бы создание читов
«и» и «или» между (а) и (б) можно расставить как угодно, всё равно очень интересно.
DistortNeo
29.01.2017 02:09Если это сервер на 10-100 человек, то почему бы и нет? А если это MMORPG, где одновременно на сервере находится 10к человек, просчитать всё просто нецелесообразно, приходится допускать погрешности и убирать некоторые проверки.
Не забывайте также про автоматизацию действий со стороны клиента (боты-фармеры в RPG, айм-боты в шутерах и т.д.), её вы никак не устраните, делая вычисления только на сервере.
solver
28.01.2017 17:23+3Шифрованием трафика прикрывают низкие компетенции разработчиков.
Которые делают логику команд от клиента в духе «Зачислить 1000 кристалов на счет игрока» или «Игрок1 попал в Игрока2 и выбил у него 100хп», без проверки на сервере.
Если логика обмена клиента с сервером нормально продумана, то знание трафика читеру ничего не даст от слова совсем.DistortNeo
28.01.2017 17:49+8Знание трафика позволяет читеру использовать средства автоматизации игрового процесса. Шифрование трафика само по себе достаточно дешёвое, но вот сложность разработки чит-системы оно значительно увеличивает, заставляя читера лезть в память процесса, а не просто перехватывать сетевые соединения.
Nomad1
28.01.2017 19:54+4Я уже вроде когда-то рассказывал, но повторюсь. В играх Blizzard используют несколько методов защиты: проверка целостности клиента, шифрование протокола, валидация всего, чего можно на сервере и т.д. Но все это так или иначе обходится, потому был придуман механизм Warden. Это бинарный код с унифицированным протоколом ввода-вывода, который отправляется на клиент и выполняется там. Сам Warden подписан 1024-битным RSA ключом (сейчас уже может и чем-то еще), идеально вылизан и занимает в среднем 20-30 кб. В зависимости от версии и предназначения он может выполнять разные системные и не системные операции — сканировать память процесса или всего компьютера, искать загруженные DLL, изменения в коде, считать контрольные суммы исходящих пакетов, да и вообще делать что-угодно на клиентской машине. По понятным причинам, кому-либо кроме разработчиков проблемно заменить и переподписать Warden без изменения ключа, вшитого в клиент. Сообщество какое-то время отслеживало новые версии warden'ов, изучало их протоколы и использовало в своих целях. Иногда антивирус мог запретить выполнение warden или доступ к части памяти, тогда продолжала использоваться старая версия либо вообще клиент работал без него, что было (а может и есть сейчас) серьезным упущением и большим пространством для маневра читеров. По большому счету, Warden это вирус, подписанный разработчиком и выполняемый им на компьютере клиента без его ведома и с неявным согласием (есть в EULA).
Evengard
28.01.2017 21:11+2От таких советов потом и тормозят игры так, что люди взвывают и пользуются в том числе наработками сторонних людей, чтобы просто отключить эти навесы и играть честно. Просто потому что оно адски тормозит систему.
PS: знаком с этой ситуацией совсем не понаслышке.
Jholinar
28.01.2017 23:23+2Какой-то очень косноязычный перевод получился. Вроде бы и кириллица, но читается очень тяжело.
sleeply4cat
28.01.2017 23:47+3Я не стал бы играть в такую игру.
Suvitruf
29.01.2017 14:37Я думаю, вы в них и так играете, просто не знаете, что там под капотом. Вряд ли разработчики будут писать в описании игры, что они сканируют вашу систему.
sleeply4cat
29.01.2017 15:04Как красноглазик, имеющий не так много игр, я могу позволить себе роскошь знать, что находится в кишках каждой :)
Для того же, например, робокрафта я писал сниффер пакетов, сохраняющий лог чата, и ещё пару подобных твиков. Когда вместо того, чтобы проверять данные на сервере, разработчики натянули на клиент глючный EAC, просящий рута — ушёл. Что самое забавное, EAC не детектировал редактирование памяти, и можно было тривиальнейшие развлекаться с мгновенной перезарядкой. От читеров, естественно, никого он не спас.
vikarti
29.01.2017 07:01с другой стороны — от некоторых из этих мер защиты игры перестают работать даже когда пользователь честно хочет играть и ничего не читит (пример — Rust и LiquidSky — http://kb.liquidsky.tv/technical-problems/mouse-stops-working-after-i-launch-a-game — потому что технически LiquidSky (https://geektimes.ru/post/281478/ — облачный игровой сервис) да — эмулирует устройства ввода, он просто работать иначе — не может).
Официальный комментарий техподдержки (http://kb.liquidsky.tv/technical-problems/mouse-stops-working-after-i-launch-a-game )- пишите разработчикам игры что у них проблемы.
perfect_genius
29.01.2017 09:57+1Правило 0 или 23: у игры должна быть запись матча (replay), чтобы любой мог свободно просмотреть любой момент.
НЕЛЬЗЯ запускать читы внутри собственной сети (иначе исполнится мечта очень многих читеров)
Можно яснее?
особый тип ловушек — «honey pot». Технически «honey pot» отличается от обычной ловушки в том, что для читера создаётся искусственная мишень.
Гениально! Ложная мишень не отрисовывается, обычные игроки и не заметят, а вот чит на него среагирует.
Читу придётся проверять видимость мишени.
А если сделать постоянный рассинхрон координат головы цели и места его отрисовки на экране, чтобы чит не мог навестись?
sleeply4cat
29.01.2017 15:08то примерно через неделю автор чита исправит это.
Вообще, на такую уловку может повестись только тупейший аймбот, который даже визуально вычисляется и банится за пять минут.perfect_genius
29.01.2017 18:22А если сервер будет присылать спрайт противника, на котором он всегда в разной части, т.е. например, слева, а вся правая часть — часть кадра. Координата для экрана будет одна, тогда читу придётся же распознавать картинку визуально =)
Эдакая каптча получается.sleeply4cat
29.01.2017 18:25Это не так сложно, как кажется, хех. Мы писали защиту от загрузки пользователем прозрачных кастомных текстур, ничего невыполнимого нет.
perfect_genius
29.01.2017 18:42А если добавлять в фон спрайта те самые шумы, на которых чит-распознаватель может разглядеть «лицо», которого нет?
Вы ведь правильно поняли, что я имел в виду? Обычный мультиплеер + облачный гейминг, в котором сервер рендерит для клиента его противников. Клиент накладывает этот прямоугольник на кадр игры. Чит видит только прямоугольник, но стрелять по его центру бессмысленно — противник всегда в случайном месте прямоугольного спрайта, допустим спрайт больше тела противника в несколько раз.
Тогда читу придётся выделять в спрайте или во всём кадре контуры противника. И вот я предлагаю вносить шум в фон, который не особо виден игроку, но очень мешает читу. Наверно, видели статью на Хабре о специальных очках, в которых человек распознаётся нейросетью совсем другим.
Также можно ведь не давать клиенту различия свой-чужой, чтобы чит пытался навестись на своих?
Нейросеть может и научат таки и различать и целиться, но будет ли он успевать за 16 миллисекунд? =)perfect_genius
29.01.2017 18:54Я только начинающий программист, поэтому может не всего ещё знаю, но можно ведь вообще этот прямоугольник с противником поместить в огромный кадр, допустим 3000 на 3000 пикселей с прозрачным фоном. Однотипное пространство хорошо сожмётся для передачи клиенту, видеокарта легко накладывает этот спрайт, а вот алгоритмам чита придётся весь этот массив обрабатывать же? Или CUDA всё испортит?
sleeply4cat
30.01.2017 11:40эм, думаю, видеокарта не обрадуется забиванию памяти такими огромными ресурсами ._.
а как предлагается убрать шум перед выводом на экран?perfect_genius
30.01.2017 18:21Наложить почти всю прозрачную текстуру 3000 на 3000 — это сложно для видеокарт? О_о
Шум не убирается, он должен мешать читу в поисках контуров головы. Игроку он не виден — контуры полупрозрачны.
Deosis
30.01.2017 13:17Во-первых, в соседней статье писали, что видеокарты не любят прозрачность.
Во-вторых, встроить подобное в алгоритм отрисовки крайне трудно, особенно, если противник выглядывает аз-за угла.
В-третьих, читерам станет еще проще: найти непрозрачные пиксели в текстуре. Это вообще одним шейдером делается.perfect_genius
30.01.2017 19:40Меньше, чем в 16 миллисекунд уложатся с поиском цельного объекта среди шума? Если противник вдали, то его размер сравнится с размером элементов шума. Если выявлять его по непрозрачности, то можно добавлять похожий непрозрачный шум, но подальше и в места потемнее на кадре, чтобы как можно меньше мешал игроку.
Starche
29.01.2017 13:11+3Тут многие возмущены некоторыми способами борьбы, особенно сканированием запущенных процессов, и мне кажется, такие люди не играют в соревновательные мультплееры.
В rainbow six siege есть возможность убивать врагов сквозь стены. При этом даже в небольшие дырочки от пуль видно кто там за стеной что делает.
Это означает, что положения всех игроков приходится всегда передавать на клиентскую сторону.
Это значит, что от wallhack-чита не спасёт вообще ничего, только банить постфактум по репортам от соперников.
После того, как юбисофт ввели в игру сканирование на читсистемы со стороны клиента — таких волхакеров стало значительно меньше. За что им стали благодарны множество игроков.
В общем, имхо, не стоит так радикально недовольствоваться тем, что защита от читеров сложная и комплексная.Azoh
30.01.2017 08:58+1Основная проблема в том, что типичные создатели античитов большие поклонники "security through obscurity". Пользователь должен установить бинарный блоб, который требует повышенных прав в системе. Что там внутри никто не знает. Это вызывает закономерное недоверие со стороны всех остальных. Параноиком можно и не быть, но ожидать, что там не будет багов, позволяющих выполнить произвольных код, несколько сложно.
Saffron
30.01.2017 16:47И даже были прецеденты когда удавалось преодолеть барьеры обскурности и увидеть, как античит тырит пользовательские данные.
Darth_Malok
29.01.2017 14:24Наверное, читерство можно победить только в пошаговых играх, перенеся всю логику на сервер. Если игра не пошаговая, и для гейплея важны реакция игрока и умение пользоваться мышью, ничего не выйдет.
Хороший пример — World of Tanks. Почти все расчёты на сервере, но читерство процветает. Убирание кустов, автоматическая стрельба с упреждением, автоматическая стрельба по уязвимым точкам, и ничего радикального с этим не сделаешь.
Интересно, а можно ли использовать подход, который используют авторы полиморфных вирусов? Например, каждую неделю (а может и каждый день), выпускать микро-патчи, которые меняют клиент. От всех читов не спасёт, конечно, но не позволит модифицировать данные в памяти игры или читать их.
А вообще, как мне кажется, единственный способ борьбы с читерами — это запись статистики вообще всего, что происходит на клиенте и какой-нибудь полуавтоматический анализ. Да, в пылу сражения нужно доверять клиенту, но потом можно же слить с клиента все «логи» (вплоть до координат курсора мыши в каждую миллисекунду времени) и не торопясь сравнить эти данные с серверными реплеями. Да, читы станут «маскироваться под человека», но тогда они и преимущество будут давать меньшее.perfect_genius
29.01.2017 18:06Можно обновлять код игры каждый день — просто переставлять данные для памяти случайным образом.
Интересно, что можно против этого предпринять? Читу придётся находить нужные значения каждый день, это легко автоматизировать? Неужели читеру не будет лень каждый день перед игрой сидеть как за «АртМани»?
Или вообще менять код перед каждым матчем.jetcar
30.01.2017 11:37есть готовые решения платишь денюжку и за тебя всё зделают, обновление скачал и бот работает дальше, судя по таким проектам они довольно успешные, кучи игр поддерживают и очень редко банят пользователей, и бизнес модель удачная, месячная подписка и играй себе, против них я так понимаю можно бороться только используя жалобы других игроков, ну и killcam очень полезная штука, там легко определить читер ли тебя с полкарты замочил даже не видя или всё-таки сам дурак и не надо было высовываться лишний раз
perfect_genius
29.01.2017 18:14Как думаете, как можно найти нужные данные для чита в памяти, если они будут меняться прямо во время игры? =)
Совершенно случайным образом, поступая от сервера.
Да ещё логика если будет меняться, например счётчик шёл в сторону повышения, а теперь наоборот.lgorSL
30.01.2017 19:15Как Вы думаете, насколько просто это написать и потом искать баги, возникновение которых будет зависеть от взаимного сочетания разнообразных логик?
MikailBag
02.02.2017 21:39Завернуть все в библеотечку.
Типа она дает блок на 1 Кб.
Вы в него пишете, а она иногда что-нибудь где-нибудь переставляет.
KonstantinSpb
29.01.2017 22:56А что насчет читов работающих в ring0 т.е. на уровне ядра?
По идее такой чит может сканировать память и внедряться в процесс без обнаружения с верхних уровней.
jetcar
30.01.2017 11:59все эти советы годятся для читеров-любителей, для профессионалов которые продают ботов это всё не совсем проблема, есть деньги и наработаная база знаний и всё, нужно просто следить за обновлениями и изучать систему защиты, я не говорю что с читерами бороться бесполезно, но нужны более правильные способы чем «прятать исходный код» и «следить за процессами» в шутерах например killcam помогает понять что ктото читит, а в ММО я сам не особо играю, но по мне надо делать геймплей менее рутинным тогда экономическая выгода будет для ботоделов меньше, ведь если надо фармить часами то все хотябы разок поисчут бота, а если процесс не скучный то искать будут меньше и естественно потенциальных покупателей меньше, а там где нет выгоды то никто не будет возиться
в диабле 3 было много ботов пока не прикрыли аукцион и обмен вещами, и теперь боты там разве что заядлыми ботоводами используются, но это почти никак не влияет на других игроков, а раз не мешает то пусть себе сидят с ботами
verydima
31.01.2017 12:40Я вообще не любитель онлайн игр. Но в BF1 очень крепко залип. И какое-то время действительно удивлялся как некоторые ребята выносят из многих видов оружия с огромных расстрояний прямо как со снайперок. Потом на youtube случайно попался ролик про читы в BF1 и всё стало на свои места. После понимания механики работы очень чётко видно, кто использует читы.
Но до сих пор я не могу понять в чём смысл их использования для игрока. Единственный вариант — это человек — полный неудачник и вот он приходит с работы, которую ненавидит и ему нужно поднять своё самомнение. Он заходит в игру, включает чит и всех выносит. Ура. Теперь жизнь совершенно другого цвета — теперь он победитель.lookid
31.01.2017 12:521) Бустить аккаунт
2) Руинить катку
3) Руинить аккаунт
4) По фану
5) Много сливал. Купил на недельку.
6) Нужен какой-то шмот. почитерил 2-3 дня (2-3 катки).
Много можно придумать.verydima
31.01.2017 12:59Фан в том, что Вы видите всех на карте, а Вас не видят и в Вас стреляют с отдачей и т.п., а Вы убиваете с одного выстрела из любого оружия или просто всегда попадаете?
А всё остальное укладывается, по-моему, в «нет времени играть нормально, поэтому я испорчу игру другим». Верно?jetexe
31.01.2017 16:55Скорее надоел гринд на новую пушку или что-то в этом роде, не одну стрелялку я из-за этого бросил.
lgorSL
03.02.2017 22:56+1А всё остальное укладывается, по-моему, в «нет времени играть нормально, поэтому я испорчу игру другим».
Всё остальное укладывается в "нужно получать деньги,
испортим геймплейусложним игрокам жизнь, чтобы они были вынуждены платить или страдать".
Сужу по примеру wot/war thunder. Хочется поиграть на нормальной технике — качай всю предыдущую ветку. (если жалко времени или предыдущая техника принципиально не нравится — плати, переводи опыт).
Открыл новый танк — а он со стоковыми модулями (т.е., пушка, двигатель, рация, и вообще характеристики значительно хуже), страдай или снова плати, чтобы "проскочить" это состояние.
Жалко тратить 30 часов на прокачку? Плати за премиум и прокачивай за 20.
Дошёл до высокоуровневой техники — она неприбыльная, покупай прем или снова играй на низких уровнях.
mikka1
31.01.2017 19:33Вброшу почти полный офф:
Eсть такая интересная старинная стратегия, называется странным словом «шахматы»
В нее некоторые психи (причём, не далее как в прошлом веке) вообще играли по переписке.
Делаешь свой ход и отправляешь его противнику в письме. Он пару дней думает и отправляет свой. И так далее.
И (о, ужас!) никто особенно о читерах не задумывался, хотя чисто теоретически возможности читерства открывались широчайшие, начиная от коллективного творчества, консультирования с игроками любого уровня и прочих шалостей.
Нет, читеры, конечно, были, есть и будут даже в шахматах. Но возникает главный вопрос — А ЗАЧЕМ?
Я вот сейчас могу тупо взять два компа, залезть на одном на какой-нибудь чесс.ком, а на другом — поставить какую-нибудь сильную шахматную программу. Ни один программный античит, скорее всего, эту проблему не отловит, а я быстро, работая переставляльщиком фигур и не зная о шахматах ничего вообще, могу выбиться в лидерборд сайта.
И? Это принесет мне какое-то моральное удовлетворение в долгосрочной перспективе? Как быстро мне надоест впустую двигать фигуры, не развивая ровным счётом _никаких_ скиллов вообще?
…
Или уже не осталось онлайн-игр, где играют на интерес, а всё насквозь монетизировано, а за такую победу сразу отвалят много денег?
Я тогда, пожалуй, продолжу лучше играть в шахматы :)verydima
31.01.2017 21:38Я вот тоже не могу понять зачем читить в BF1. Всё, что там можно получить — это очки и уровень. Но это не имеет никакого значения. Единственная цель в данном случае «выносить всех» — это удовлетворение своего униженного жизнью эго. И касательно BF1 — как раз пара таких «недоразвитых» реально портит игру остальным 40-50 игрокам. И фан для них — это как раз зайти и испортить игру.
Я лично не понимаю совсем интереса игры с читами.
Нашёл интересное интервью с читером https://www.youtube.com/watch?v=I7vmGjOOdSM Чувак использует читы, чтобы выносить явных читеров.
Saffron
01.02.2017 03:05+1> А ЗАЧЕМ?
А представьте что вам за каждую победу деньги платят. Ну или игровую валюту, которая тоже ценность и которую можно так или иначе поменять на настоящие деньги. А можно не менять на деньги, а разблокировать внутриигровой контент.
Если бы в ММОРПГ не было бы гринда, то не было бы и ботов
ufna
Неплохая статья в целом, но есть некоторая мешанина советов борьбы с читерами, косяков архитектур и очень частных случаев, возникших из-за этих самых косяков.
Если игра — это RTS (или просто имеет положим >100 одновременно релевантных юнитов), то нельзя НЕ придерживаться такой архитектуры. А вот использование локстепа в иных случаях — это да, вызывает вопросы.