Comments 140
Неплохая статья в целом, но есть некоторая мешанина советов борьбы с читерами, косяков архитектур и очень частных случаев, возникших из-за этих самых косяков.
НЕЛЬЗЯ придерживаться deterministic-lockstep архитектур (в которых синхронизация происходит только отправкой данных ввода).
Если игра — это RTS (или просто имеет положим >100 одновременно релевантных юнитов), то нельзя НЕ придерживаться такой архитектуры. А вот использование локстепа в иных случаях — это да, вызывает вопросы.
22. НУЖНО быть готовыми к сканированию компьютеров игроков на предмет известного читерского ПО
За такое игра сразу идет в корзину.
Если вы проигрываете читерам в этой битве, НУЖНО рассмотреть варианты решений на основании драйверов устройств (подсказка: существуют такие коммерческие продукты)
Еще один StarForce?
За такое игра сразу идет в корзину.
К сожалению, тогда вообще придётся отказаться от некоторых онлайн-игр. И это плохо.
Для ММОРПГ есть СТОЛЬКО вариантов как правильно надавить на читеров.
Нужно понимать, что игроки редко читят сами по себе — они ищут готовые читы и качают их/покупают. Нужно активно анализировать эти моменты и делать так, чтобы чит был невыгоден для игрока. Они перестанут качать и хакер поищет другие варианты. Если увидит, что другие варианты оперативно блокируются, забьет и пойдет искать другие игрушки.
раз в 30 секунд прилетает пакет с байткодом на питоне который нужно выполнить и ответить. не ответ или не правильный ответ — почти сразу дисконнект. прилетает обычно проверки на то, не влезли ли в питон-часть + иногда — не загружено ли в процесс то, чего там быть не должно по мнению разработчиков.
И далеко не сразу будет бан, если вообще будет даже если в логах сервера видно что кто-то консоль на клиенте запустил и развлекается (есть… опыт).
Только вот реальная борьба похоже идет именно с RMT — анализ серверных логов на предмет передачи ресурсов между аккаунтами для целей RMT и выдача банов по цепочкам. Маскировка IP и железа компьютера не помогает (нет, драйверов CCP не используют).
Декомпилированные актуальные исходники (питон-части — там вся высокоуровневая логика) — они есть вообще у всех кому они вообще нужны похоже. Более того — CCP вообще выкладывали презентации с описанием как их движок работает.
Декомпиляторов питона на данный момент насколько я в курсе существуют два. один из которых — opensource и его добрые люди специально допиливали под CCP.
Еще один StarForce?
PunkBuster.
11. НУЖНО использовать C++ в клиентеВесьма странный совет.
14. НУЖНО беречь исходный код как свою жизньСовет из разряда «у нас на двери нет замка, но никому не говорите об этом, тогда наш дом будет в безопасности». Утечка сорсов не должна быть большой проблема в плане читов. По-моему, лучше поставить нормальный замок, чем надеяться, что сорсы не сольют.
Весьма странный совет.
Соглашусь, но расшифровка делает посыл чуть более понятным. Видимо, имелось в виду "НЕЛЬЗЯ использовать для написания клиента язык, который легко декомпилировать до состояния человекочитаемых инструкций".
Понятно, что даже результат компиляции в ассемблер нельзя назвать не человекочитаемым (захочет — разберётся, вопрос только во временных затратах). Но чем сложнее для понимания будет скомпилированный клиент, тем, в рамках борьбы с читерством, видимо лучше.
Но и с такой расшифровкой совет не однозначный. Всегда нужен баланс между сложностью разработки и желанием понаставить побольше палок в колёса читерам, ведь код нужно не только один раз написать и забыть, но и поддерживать.ю
Я имел опыт серьезного внедрения в клиент Wurm online, и имею что сказать на счет этого пункта. Да, этот пункт оправдан полностью, но вы неправильно его поняли.
У этой игры раньше существовало два клиента. Оба на Java.
Первый - это полноценная ММО, базирующаяся на серверах разработчика. Он был неплохо так обфусцирован, имелись реалтайм проверки, достаточно грозная защита от ботоводства и вообще внедрений.
Второй - это "community" версия (wurm unlimited). С урезанным функционалом, не обфусцированный, защитных механик вообще практически не было. Декомпилируй и властвуй. Он подключался к серверам игроков, которые сами его запускали. В целом архитектура была похожа на minecraft в этом плане. Но он был неким снепшотом "нормальной" версии - релизился с большой задержкой от онлайн версии.
Так вот... Декомпиляция unlimited версии игры КРАЙНЕ помогала в декомпиляции/деобфускации онлайн версии. По сути достаточно было найти класс с похожей сигнатурой, удостовериться, что это он и есть, и с поправками на новые версии найти достаточно устойчивую сигнатуру для ассемблинга. В 95% случаев поиск целевого класса и сигнатур на внедрение в него занимал хорошо если полчаса. Причем, большинство обновлений клиента (а они содержали и обновление ключа обфускации) вообще не ломало чит-клиент.
Однако, со временем разработчик принял решение о прекращении выпуска "анлимитед" версии, и код стал всё больше и больше разниться между этими клиентами. Это очень усложнило анализ логики клиента и поиск мест внедрения. Спасало то, что я заранее нашел удачные места внедрение для перехвата уже расшифрованного трафика...
Я не поддерживаю этот клиент уже достаточно долгое время (порядка года или около того), однако знаю, что перехват/подмена трафика работает до сих пор. Отвалился только рендер в клиент и простецкие места вроде "всегда раскрытый компас" и "всегда полный ремень". Починить их не сложно, говорят, сигнатуры классов особо не изменились.
Я могу смело заявлять, что наличие необфусцированной версии (равно как и наличие исходников в открытом доступе) - крайне упрощают работу реверс-инженера, написание читов и способов обхода античит-систем.
Утечка сорсов не должна быть большой проблема в плане читов.
Смотря что утечёт. Если исходники античит-системы или приватные ключи, то это очень даже проблема.
Как раз пишу онлайн игру, зашел почитать какая ещё защита кроме 10 совета бывает, а тут такой лютый бред менеджера по работе с коммьюнити и замашками тирана =(
Что вообще это делает в "Разработка" и "Разработке игр"? переместите, пожалуйста, в "Управление".
Перлы вроде "11. НУЖНО использовать C++ в клиенте" показывают что автор про программирование и разработку только слышал.
Вы серьезно? Есть онлайн-игра "The Battle for Wesnoth", она вообще open source. Представляете? Это, по вашей логике, вообще катастрофа!1!1! Кто угодно может скачать и посмотреть исходный код. Да там наверное игроков-то и нет, одни читеры, да?
По моей логике у разных игр разные ограничения и требования. Когда я делал мультиплеерные карточные игры там на сервере правила вообще можно было не проверять, это делали на клиенте другие участники игры (это выбо ещё в те замшелые времена когда принято было экономить проц на сервере). И там это было достаточной защитой.
Вот когда вы CS GO опенсорсный предъявите — вот тогда это будет аргументом.
The Battle for Wesnoth то конечно известный шутер от первого лица. :))
Речь идет про онлайн-игры. Ты статью почитай, там нету слова "шутеры" :)) И как сказал andreymal — 3 квака опенсорс, тоже читеры?
Когда я делал мультиплеерные карточные игры там на сервере правила вообще можно было не проверять
А, ну всё с тобой понятно. Вот из-за таких как ты такие статьи и выходят =( С советами уровня "используйте С++ в клиенте"
Так что не, тебе опенсорсный CS:GO ещё рано, ногу себе отстрелишь :D
Горите в аду за такие советы! Я читаю, и знаю какая там жопа.
> НУЖНО быть готовыми к сканированию компьютеров игроков на предмет известного читерского ПО
А за сканирование нужно отправлять в ад досрочно.
Игра не должна выходить за рамки себя самой, а то так можно встроить десяток сканеров, антивирус и файервол до кучи. Мало ли что.
Вы можете назвать какие-то не критические аргументы против «лишнего» кода, а конструктивные аргументы по поводу защиты онлайновой игровой валюты, которая при определённых страстях начинает соотноситься с реальной валютой?
Может быть Saffron, который, наверняка тоже минусовал?
Так-то в оффлайне игрок пусть делает что хочет, хоть баллистические хелперы вкрячивает, хоть миллиарды лумбера себе выписывает, хоть термоядерные пули изобретает или, банально, прозрачные текстуры. Покуда это не касается баланса других игроков.
Интересует именно вопрос в рамках авторской темы — защита игроков от онлайн-несправедливости, причиняемой читерами (ну и компании тоже, разумеется).
В общем, если ваши меры защиты не влияют на производительность (ну или хотя бы этого не видно) и не мешают остальной работе системы, то делайте что угодно и будете правы. В этих же двух случаях нужно либо никому об этом не говорить, либо внушить игрокам сказку про «меньшее зло».
Помню, лет 10 назал во времена Lineage II: CS4 я состряпал что-то самописное для своих нужд. Оно перехватывало нажатия клавиатуры и что-то там делало, не суть. Так вот Ла2 в те времена перехватывало нажатия клавиш и шифровало их. В итоге мое детище работать переставало при запущенной игре. Вроде бы мелочь, а неприятно.
Так вот Ла2 в те времена перехватывало нажатия клавиш и шифровало их.
Каким образом пытались это делать? У меня обычный Low level keyboard hook вполне нормально работал.
Каюсь, я сам был читером — надоело играть честно после пары лет игры, когда саппорт закрывал глаза на любые нарушения, кроме неполиткорректного треша в общем чате. Правда, мне было интереснее разрабатывать софт, а не использовать его. Могу сказать, что защита на европейских серверах — GameGuard — была очень слабой и обходилась вообще без каких-либо сложностей, при этом она конфликтовала с антивирусами и прочим софтом, из-за чего её сильно ругали. Затем пару недель троллил Иннову на бета-сервере, которая обещала сделать российскую локализацию Lineage II, свободную от читеров и ботов.
Техническими мерами всё равно проблему не решить: даже если ты полностью зачистишь комп, никто не помешает игроку навести камеру на монитор и подключить в usb чудо-мышку, которая будет двигать курсор программно — тот же aim bot, только технический
Возьмем, к примеру, «одноглазого» робота, который движется по скоростной железной дороге со скоростью 200 км/ч и наблюдает за состоянием контактной электросети.
Контактный кабель — стальной пруток диаметром 20мм, вихляющий над токоприёмником из стороны в сторону с амплитудой 50см. На этом кабеле надо разглядеть зазубрины размером не менее 0,5 миллиметра.
При обнаружении такой зазубрины — сохранить её фотографию и запомнить время и место (чтоб ремонтники знали где её искать), а если все нормально — сохранять только один кадр из тысячи.
Да, некоторые античиты уже были замечены в попытках сканирования всего жёсткого диска для поиска нежелательного ПО.
Сформулирую потактичней применительно к игре как объекту: это не твоё собачье дело, Игра, что твориться в моей оперативке — ползай по своей выделенной памяти и не лезь в другие области.
Как то уж больно много вольности взяли некоторые «идеологи создания развлечений», чтобы даже предполагать подобное, как «невинную шалость».
Да не будет историй. Все читы делятся на рид-онли и не-рид-онди. Wallhack спалить нереально, т.к. он просто читает память и рисует средствами winapi поверх окна. Остальное — да, лезут менять данные и нужно шифровать, считать на сервере, валидировать, прятать и прочее.
И именно поэтому анти-чит системы представляют собой типичные руткиты. Одна из их задач — запретить читать память процесса, причём любой ценой.
Это очень медленный шутер, но, насколько я помню, расчёт видимости потребляет большую часть ресурсов сервера. И всё-равно имеем ситуации, когда противник выезжает из за угла, и стреляет, а ты его «замечаешь» только когда он уже закатывается обратно. Просто ты был в начале очереди расчёта видимости, а он в конце — до него очередь в нужный момент не дошла.
Главная паника тут в том, что игрок может не увидеть там, где должен увидеть. В какую-нибудь щель или прострел. А рейтрейсинг на сервере из каждой позиции игрока как-то не очень.
Можно разбить карту на части и если игроки находятся в одной, то они видят друг-друга. Но это нужно делать руками, и легко ошибиться. Попробуйте так разбить карту для CS:GO.
foreach (UserUpdate update in UserUpdates)\
{
packet.Add(update);
}
Делать
foreach (UserUpdate update in UserUpdates)
{
if(user.CanSeeUpdate(update)
{
packet.Add(update);
}
}
При этом сложность CanSeeUpdate может быть любой, а в некоторых случаях пакет с обновлениями генерируется один для всех и его придётся делать каждому свой.
Куда скатился хабр, даже geektimes более технический ресурс, чем этот сайт с надмозговыми переводами и платными блогами.
Взял первую попавшуюся на глаза строчку:
Это довольно противоречивый вопрос, но скорее надо реализовать эту функцию, чем нет.
This is a rather controversial issue, but much more likely than not you will need to implement it.
Просто бездумное калькирование логики построения и структуры фразы из английского языка на русский. Извините, но так статьи не переводят. Не для таких ресурсов. Постоянные повторы одних и тех же слов и словосочетаний: «довольно», «другими словами», вечные «это»/«эти»/«этим».
Если вы и правда зовете себя «переводчиком-фрилансером», то, пожалуйста, прочитайте ту же Нору Галь с её «Слово живое и Мертвое». Да, книжка старая и некоторые моменты устарели, но в вашем случае качество статей может увеличиться на порядок. ИМХО.
А, да, верстка режет глаз.
Использование защиты, включающей в себя драйвер — для меня этого достаточно, чтобы отнести игру к разряду малвари. Даже если разработчик весь из себя такой ангел, все равно у него могут украсть ключи, используемые для обновления этой фиговины. Или у разработчика защиты, если это отдельное лицо.
Разработчики игр совсем охренели и позволяют себе выходки, не допустимые даже среди самих читеров. У меня стоит ПО и настройки, препятствующие сканированию и установке драйверов. Если из-за них игра не запускается, я обращаюсь в магазин за компенсацией, потому что продали неработающую игру. В обращении так и пишу — на игру сработала защита от малвари. Возвращают.
- НУЖНО использовать C++ в клиенте
Нет, не нужно. Более того, в некоторых случаях вы можете вообще открыть исходный код клиента игры. Просто не нужно обрабатывать логику на клиенте, тогда вам не нужно будет думать о читерах
Просто не нужно обрабатывать логику на клиенте, тогда вам не нужно будет думать о читерах
Вы же понимаете, что просто невозможно обрабатывать всё на сервере? Либо вычислительная сложность будет такой, что игра перестанет быть экономически оправданой.
Нет, не понимаю. Я уже много лет играю в ММО где применяется именно такой подход
А я утверждаю, что такой ММО не существует. Дело не в командах от клиента, а в том, что сервер всегда передаёт больше данных, чем требуется клиенту для отображения игровой сцены на экране. А по-другому никак: вы же не хотите, чтобы при вращении камеры игроки появлялись только через пару сотен миллисекунд?
Вы мыслите не в том направлении
Не знаю о чём вы, но у меня давно есть мысль, что многие проблемы исчезнут, когда клиент будет получать лишь картинку, нечего будет ломать.
Я говорил это автору, который утверждает что таких ММО не существует. Я полностью согласен с вами, и более того, я знаю пример ММО с тонким клиентом
Так назовите эту ММО.
Только ботов видел.
Хотите сказать, если пользователь крутанул камерой, то он перестаёт получать информацию о кораблях, которые временно выпали из поля зрения?
Мне удалили комментарий вчера, и видимо решили заодно одобрить залежавшуюся тухлятинку. :)
Муж сестры дальтоник, в играх есть настройки, но они всё равно не сильно ему помогают. Зато жена помогает. Сидит рядом и наводит его. Читеры.
А когда в общаге устроили чемпионат в Q3, моя жена считала время появления брони и хелсы на двух секундомерах.
Играя онлайн, надо понимать, что у противника могут быть спецсредства, это неизбежно.
В динамичных играх читерство непобедимо, imho.
С одной стороны – «На каждый чит найдётся античит».
С другой стороны – «На каждый античит найдётся чит».
Но надо отметить, что важно, чтобы за мыслью «читерство непобедимо» не следовала мысль «ну и не будем заморачиваться». Отлов читов – сама по себе интересная и креативная задача, и её решение может в итоге принести пользу даже безотносительно проблемной игрушки (а может даже и безотносительно игр вообще). Примерно как куча хороших эвристик в определённом смысле (хотя и не во всех, конечно) полезнее, чем доказательство алгоритмической неразрешимости проблемы останова. Аналогия слегка неточная, т.к. в случае проблемы останова никакого imho нет, но уж это свойство большинства аналогий.
Играю в World of Warships. Насколько я слышал, есть чит, который тупо показывает упреждение для стрельбы. Хоть разрабы трижды картинку отправлять будут — этот чит не умрет.
Против такого вида читов — подойдет только отправка другим игрокам картинки с вебкамеры, на которой должно быть видно игрока и его экран. Ну и плюс к этому punkbuster.
Сравнивать можно без нейросети — просто картинки должны совпадать на 100%.
Для разных сочетаний CPU/GPU и т.д. результат будет отличаться на доли пикселя.
При растеризации и сглаживании возникнут колебания +-1 в канале яркости.
Таким образом картинка совпадет на 100% менее чем у 1% игроков.
С PC плохо выйдет — слишком много разных конфигураций. С консолями еще как-то возможно, но тоже не очень.
Можно, конечно, ограничить графику ровно тем, что одинаково поддерживается везде. Но даже в этом случае полного совпадения может и не быть. Из-за багов, разного понимания спецификаций, просто немного разных алгоритмов разные устройства с разными драйверами могут выдавать похожую, но немного отличающуюся картинку.
Именно в стрелялках вычисления должны быть на сервере, иначе всю вашу стрелялку по умолчанию можно выкидывать, т.к. играть в нее будут одни читеры.
То, что вы наверное имеете в виду, это предиктивные вычисления, которые дублируют серверные вычисления и нужны лишь для того, чтобы на клиенте не было визуальных рассинхронизаций
Кстати, на хабре уже была толстая статья про смежные проблемы. Разумеется, к счастью, вряд ли им даже в голову приходило доверять клиенту.
толстая статьяЗабавно, но именно её я в эту ветку и хотел скинуть в качестве подтверждения своих слов.)) Благо там прямым текстом написано:
Каждый раз когда вы пытаетесь узнать, получил ли кто-нибудь пулю, сервер просто возвращает всех игроков на правильные (с точки зрения задержки клиента) позиции, интерполирует время и наблюдает – получил кто пулю, или нет.
определением столкновений в Battlefield 3 занимается клиент, а не сервер
Да, я упустил в своих комментах, что хоть какие-то, но проверки таки есть, мой косяк. Тем не менее, простор для читерства всё ещё имеется (aimbot как минимум), и, насколько мне известно, читы таки процветают)
А недоверие фатально для играбельности
Расскажите это Counter Strike
Мне не совсем понятен ваш комментарий.
Если вы сомневаетесь в том, что Counter Strike не доверяет клиенту, вы можете почитать информацию по данной теме, например https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
А что до читов — как вы верно подметили выше, вспомогательные читы (аим, компенсация отдачи) невозможно устранить никакими технологиями. Чем популярнее игра, тем больше вероятность, что такие читы будут. Однако это не оправдание для разработчиков (Это как если бы вы убрали замки из двери своей квартиры, все равно ведь есть способы их обойти)
хоть какие-то, но проверки, таки есть«доверяй, но проверяй» немного не «ну что там, попал?». Впрочем, ниже Вам уже ответили. Лично я изредка запускаю по старой памяти cs16, там действительно дыра на дыре, и античиты справляются очень посредственно. При этом, правда, лично я причиной вижу отсутствие финансового стимула к разработке таких античитов. Но и читы там не такие серьёзные с технической точки зрения: данные слишком доступны для перехвата. Не сравнить с читами, встроенными в драйверы мыши/клавы, для некоторых других игр. Правда, эту информацию я лично не проверял.
Тем не менее, трафик закрывать очень, очень желательно. Я бы посмотрел на вариант идеальной архитектуры стрелялки, при которой факт полной доступности трафика никак не помогал бы читеру, это не сарказм, мне правда интересно. Можно переформулировать: Как должна выглядеть архитектура, чтобы
а) открытие трафика не облегчало бы создание читов
б) закрытие трафика не усложняло бы создание читов
«и» и «или» между (а) и (б) можно расставить как угодно, всё равно очень интересно.
Если это сервер на 10-100 человек, то почему бы и нет? А если это MMORPG, где одновременно на сервере находится 10к человек, просчитать всё просто нецелесообразно, приходится допускать погрешности и убирать некоторые проверки.
Не забывайте также про автоматизацию действий со стороны клиента (боты-фармеры в RPG, айм-боты в шутерах и т.д.), её вы никак не устраните, делая вычисления только на сервере.
Которые делают логику команд от клиента в духе «Зачислить 1000 кристалов на счет игрока» или «Игрок1 попал в Игрока2 и выбил у него 100хп», без проверки на сервере.
Если логика обмена клиента с сервером нормально продумана, то знание трафика читеру ничего не даст от слова совсем.
Знание трафика позволяет читеру использовать средства автоматизации игрового процесса. Шифрование трафика само по себе достаточно дешёвое, но вот сложность разработки чит-системы оно значительно увеличивает, заставляя читера лезть в память процесса, а не просто перехватывать сетевые соединения.
Не согласен. Шифрование трафика в первую очередь защищает от большинства попыток ботовотства. А ботоводство, как известно - основной фундамент для РМТ. Анализ игрового ранка очень легко коррелируется с релизами ботов. Вышел бот - через 2-3 дня происходит ожидаемая гиперинфляция.
Полезен он и в шутанах. Если бот может легко читать всё передаваемое на клиент - он легко может по этим данным как рисовать wallhack вообще не читая остальную память, так и делать стрейфы из-под огня.
PS: знаком с этой ситуацией совсем не понаслышке.
Официальный комментарий техподдержки (http://kb.liquidsky.tv/technical-problems/mouse-stops-working-after-i-launch-a-game )- пишите разработчикам игры что у них проблемы.
НЕЛЬЗЯ запускать читы внутри собственной сети (иначе исполнится мечта очень многих читеров)Можно яснее?
особый тип ловушек — «honey pot». Технически «honey pot» отличается от обычной ловушки в том, что для читера создаётся искусственная мишень.Гениально! Ложная мишень не отрисовывается, обычные игроки и не заметят, а вот чит на него среагирует.
Читу придётся проверять видимость мишени.
А если сделать постоянный рассинхрон координат головы цели и места его отрисовки на экране, чтобы чит не мог навестись?
Эдакая каптча получается.
Вы ведь правильно поняли, что я имел в виду? Обычный мультиплеер + облачный гейминг, в котором сервер рендерит для клиента его противников. Клиент накладывает этот прямоугольник на кадр игры. Чит видит только прямоугольник, но стрелять по его центру бессмысленно — противник всегда в случайном месте прямоугольного спрайта, допустим спрайт больше тела противника в несколько раз.
Тогда читу придётся выделять в спрайте или во всём кадре контуры противника. И вот я предлагаю вносить шум в фон, который не особо виден игроку, но очень мешает читу. Наверно, видели статью на Хабре о специальных очках, в которых человек распознаётся нейросетью совсем другим.
Также можно ведь не давать клиенту различия свой-чужой, чтобы чит пытался навестись на своих?
Нейросеть может и научат таки и различать и целиться, но будет ли он успевать за 16 миллисекунд? =)
Шум не убирается, он должен мешать читу в поисках контуров головы. Игроку он не виден — контуры полупрозрачны.
Или вы не поняли, что я писал. Ещё и ужасная привычка Хабра удалять юзера вместе с его сообщениями. У собеседника, как помню, было много полезной информации.
Да, чит получает координату противника из памяти. Моя идея была, что сервер присылает координату не для модели противника, а положения его спрайта на экране клиента.
Не подскажете — что такого случилось на Хабре сегодня, что пользователи массово начали заниматься некропостингом?
Во-вторых, встроить подобное в алгоритм отрисовки крайне трудно, особенно, если противник выглядывает аз-за угла.
В-третьих, читерам станет еще проще: найти непрозрачные пиксели в текстуре. Это вообще одним шейдером делается.
В rainbow six siege есть возможность убивать врагов сквозь стены. При этом даже в небольшие дырочки от пуль видно кто там за стеной что делает.
Это означает, что положения всех игроков приходится всегда передавать на клиентскую сторону.
Это значит, что от wallhack-чита не спасёт вообще ничего, только банить постфактум по репортам от соперников.
После того, как юбисофт ввели в игру сканирование на читсистемы со стороны клиента — таких волхакеров стало значительно меньше. За что им стали благодарны множество игроков.
В общем, имхо, не стоит так радикально недовольствоваться тем, что защита от читеров сложная и комплексная.
Основная проблема в том, что типичные создатели античитов большие поклонники "security through obscurity". Пользователь должен установить бинарный блоб, который требует повышенных прав в системе. Что там внутри никто не знает. Это вызывает закономерное недоверие со стороны всех остальных. Параноиком можно и не быть, но ожидать, что там не будет багов, позволяющих выполнить произвольных код, несколько сложно.
Хороший пример — World of Tanks. Почти все расчёты на сервере, но читерство процветает. Убирание кустов, автоматическая стрельба с упреждением, автоматическая стрельба по уязвимым точкам, и ничего радикального с этим не сделаешь.
Интересно, а можно ли использовать подход, который используют авторы полиморфных вирусов? Например, каждую неделю (а может и каждый день), выпускать микро-патчи, которые меняют клиент. От всех читов не спасёт, конечно, но не позволит модифицировать данные в памяти игры или читать их.
А вообще, как мне кажется, единственный способ борьбы с читерами — это запись статистики вообще всего, что происходит на клиенте и какой-нибудь полуавтоматический анализ. Да, в пылу сражения нужно доверять клиенту, но потом можно же слить с клиента все «логи» (вплоть до координат курсора мыши в каждую миллисекунду времени) и не торопясь сравнить эти данные с серверными реплеями. Да, читы станут «маскироваться под человека», но тогда они и преимущество будут давать меньшее.
Интересно, что можно против этого предпринять? Читу придётся находить нужные значения каждый день, это легко автоматизировать? Неужели читеру не будет лень каждый день перед игрой сидеть как за «АртМани»?
Или вообще менять код перед каждым матчем.
Совершенно случайным образом, поступая от сервера.
Да ещё логика если будет меняться, например счётчик шёл в сторону повышения, а теперь наоборот.
По идее такой чит может сканировать память и внедряться в процесс без обнаружения с верхних уровней.
Понимаю, что некропост... Но лично вы бы купили и использовали чит на rung0 для своей любимой игры? Я - нет. Потому что код разработчика игры хотя бы юридически наказуем в случае доказательства. А чит вы покупаете на ноунейм ресурсе, и написан он ноунейм Василием. И что именно он абьюзит в ринг0 - я не берусь предсказать.
в диабле 3 было много ботов пока не прикрыли аукцион и обмен вещами, и теперь боты там разве что заядлыми ботоводами используются, но это почти никак не влияет на других игроков, а раз не мешает то пусть себе сидят с ботами
Сравнение с diablo 3 крайне неправильное. После отказа от всех аукционов они превратили игру в синглплейер с чатом. Ну или разуменее назвать это коопом. Это не ММО. Ближайший конкурент в этом жанре - POE. Это почти ММО, причем практически без ПВП режима. Однако, там ботоводство и читерство процветает. Как и РМТ. Казалось бы, всего лишь почти синглплейер, нет аукциона, практически нет соревновательных режимов... А вот так вот.
В связи с этим у меня есть отличное предложение, которое поможет справиться со 100% ботов: прикрыть игру целиком. Тогда-то уж точно никто читерить не будет.
Дьябло, например, потерял на волне борьбы с ботами очень многое. Настолько многое, что и вовсе не вызывает больше желания в неё играть. Вот вопрос — зачем это было нужно, если игра фактически не многопользовательская?
Но до сих пор я не могу понять в чём смысл их использования для игрока. Единственный вариант — это человек — полный неудачник и вот он приходит с работы, которую ненавидит и ему нужно поднять своё самомнение. Он заходит в игру, включает чит и всех выносит. Ура. Теперь жизнь совершенно другого цвета — теперь он победитель.
1) Бустить аккаунт
2) Руинить катку
3) Руинить аккаунт
4) По фану
5) Много сливал. Купил на недельку.
6) Нужен какой-то шмот. почитерил 2-3 дня (2-3 катки).
Много можно придумать.
А всё остальное укладывается, по-моему, в «нет времени играть нормально, поэтому я испорчу игру другим». Верно?
Скорее надоел гринд на новую пушку или что-то в этом роде, не одну стрелялку я из-за этого бросил.
А всё остальное укладывается, по-моему, в «нет времени играть нормально, поэтому я испорчу игру другим».
Всё остальное укладывается в "нужно получать деньги, испортим геймплей усложним игрокам жизнь, чтобы они были вынуждены платить или страдать".
Сужу по примеру wot/war thunder. Хочется поиграть на нормальной технике — качай всю предыдущую ветку. (если жалко времени или предыдущая техника принципиально не нравится — плати, переводи опыт).
Открыл новый танк — а он со стоковыми модулями (т.е., пушка, двигатель, рация, и вообще характеристики значительно хуже), страдай или снова плати, чтобы "проскочить" это состояние.
Жалко тратить 30 часов на прокачку? Плати за премиум и прокачивай за 20.
Дошёл до высокоуровневой техники — она неприбыльная, покупай прем или снова играй на низких уровнях.
Ваше отношение крайне зашоренное. Приложу пасту, которую писал когда-то на другом ресурсе... Я читер, так сказать, "с опытом".
Давай я скажу прямую, но не очень популярную точку зрения. Мало кто из читеров признается в этом.
Есть несколько мотивационных механизмов мозга. Один из них - дофаминовый. Он вызывает удовлетворение, радость или счастье в двух случаях - когда ты планируешь что-либо сделать, и когда завершаешь этот план.
Лично твой дофаминовый уровень работает таким образом, что от сложности исполнения плана зависит финальный дофаминовый отклик. Ты получаешь больше удовлетворения, если пришел к результату путём упорных усилий. Оттачивал скилл, тренировался, и всё такое.
Есть люди нетерпеливые. Они не хотят тренировок и сотен часов попыток. Их дофаминовый отклик еще не получил толерантность, даже небольшие, но регулярные порции вызывает тот же уровень удовлетворенности.
Есть люди, которые ставят целью именно победу, а не процесс. Победил - получил дофамин. И, в общем-то, категорически пофиг, каким путём получена победа.
Есть социопаты, которые получают свой дофамин путём унижения оппонента. Проигрыш кажется им унизительным, и твоя реальная реакция на него, в общем, категорически пофигу. Справедливости ради, большинство игроков, проигравших читеру, реально чувствуют унижение и обиду.
Есть люди, у которых нет времени на тренировки и сотни часов игры, но которые тоже хотят выиграть. Они осознанно применяют читы, снижая количество получаемого дофамина.
Есть РМТ-шники, которым дофамин либо побоку (это их рутина), либо которые получают его от продажи полученного аккаунта или валюты.
Есть люди, которые не могут позволить себе pay2win донат, и которых унижает твоё доминирование. Они получают свой дофамин от восстановления справедливости.
Вариантов, почему люди читерят, на самом деле довольно много. Я привёл далеко не все варианты. Мозг каждого уникален.
Eсть такая интересная старинная стратегия, называется странным словом «шахматы»
В нее некоторые психи (причём, не далее как в прошлом веке) вообще играли по переписке.
Делаешь свой ход и отправляешь его противнику в письме. Он пару дней думает и отправляет свой. И так далее.
И (о, ужас!) никто особенно о читерах не задумывался, хотя чисто теоретически возможности читерства открывались широчайшие, начиная от коллективного творчества, консультирования с игроками любого уровня и прочих шалостей.
Нет, читеры, конечно, были, есть и будут даже в шахматах. Но возникает главный вопрос — А ЗАЧЕМ?
Я вот сейчас могу тупо взять два компа, залезть на одном на какой-нибудь чесс.ком, а на другом — поставить какую-нибудь сильную шахматную программу. Ни один программный античит, скорее всего, эту проблему не отловит, а я быстро, работая переставляльщиком фигур и не зная о шахматах ничего вообще, могу выбиться в лидерборд сайта.
И? Это принесет мне какое-то моральное удовлетворение в долгосрочной перспективе? Как быстро мне надоест впустую двигать фигуры, не развивая ровным счётом _никаких_ скиллов вообще?
…
Или уже не осталось онлайн-игр, где играют на интерес, а всё насквозь монетизировано, а за такую победу сразу отвалят много денег?
Я тогда, пожалуй, продолжу лучше играть в шахматы :)
Я лично не понимаю совсем интереса игры с читами.
Нашёл интересное интервью с читером https://www.youtube.com/watch?v=I7vmGjOOdSM Чувак использует читы, чтобы выносить явных читеров.
А представьте что вам за каждую победу деньги платят. Ну или игровую валюту, которая тоже ценность и которую можно так или иначе поменять на настоящие деньги. А можно не менять на деньги, а разблокировать внутриигровой контент.
Если бы в ММОРПГ не было бы гринда, то не было бы и ботов
Представьте, что вы открыли партию в шахматы, а вам доступны только пешки и король, а для того, чтобы открыть остальные фигуры вам придётся сыграть ~600 партий.
Один из полубессмысленных советов. Секретный ключ достается из памяти процесса.
Не увидел тут гораздо более важного и эффективного пункта для борьбы с ботами: не добавлять в игру механик, которые легко и полезно автоматизировать.
Приведу два примера:
1. рыбалка и добыча ресурсов с фиксированным спотом. Персонаж стоит на месте, нажимает пару кнопок, и получает игровые ценности. Таких занятий либо вообще не должно быть, либо в них не должно быть особой прибыли, либо там должны быть механики, заставляющего игрока много перемещаться и/или сражаться с другими игроками. А так только ленивый не сделает не то что бота, а простейший кликер, и будет получать доход
2. аукцион с фиксированной максимальной ценой. Приводит к тому, что часть товаров начинают скупать боты за долю секунды, и честные игроки их никогда не увидят, и будут вынуждены покупать/писать бота. Выходы могут быть разные, самый простой — не делать фиксированной максимальной цены
Оригинал же статьи по сути ничего реально интересного не предложил, статья на уровня — КЭП сказал.
То что автор этой статьи пишет книгу по разработке ММО, не делает его специалистом по античитам.
Просто прокомментирую те моменты где я не совсем согласен с автором:
2. Большинство движков защиты к которыми я работал имеют свой SDK для встраивания, правда обычно разработчики не всегда следуют Protection Guidelines и отсюда растут проблемы в большинстве случаев.
8. Политика блокировок проста — если игра F2P, то делают — лицензия на временный доступ, все кто хочет — могут просто посмотреть на Blizzard WoW, там сделано очень качественно.
11. На .NET при желании можно сделать не хуже систему защиты, просто большинство игр на Unity или в целом на .NET не сильно думают об этом. Сама среда исполнения CLR допускает ОЧЕНЬ много хитрых моментов, а поскольку реверс байткод не настолько хорошо исследован как скажем реверс нативного кода — это может быть наоборот плюсом.
22. Ну это как правило бесполезно, потому что лечить следствие, а не причину — причина — «Получение преимущества», например в шутера — гораздо эффективнее искать не сам чит, а скорее аномальное поведение игрока, т.е. сначала играл очень плохо с КД 0.8, а потом вдруг резко КД стал 5+, вот тогда и нужно проводить анализ.
Борьба с читерами в онлайн-играх: 22 «нужно» и «нельзя»