Pull to refresh

Comments 140

Неплохая статья в целом, но есть некоторая мешанина советов борьбы с читерами, косяков архитектур и очень частных случаев, возникших из-за этих самых косяков.


НЕЛЬЗЯ придерживаться deterministic-lockstep архитектур (в которых синхронизация происходит только отправкой данных ввода).

Если игра — это RTS (или просто имеет положим >100 одновременно релевантных юнитов), то нельзя НЕ придерживаться такой архитектуры. А вот использование локстепа в иных случаях — это да, вызывает вопросы.

22. НУЖНО быть готовыми к сканированию компьютеров игроков на предмет известного читерского ПО

За такое игра сразу идет в корзину.
Если вы проигрываете читерам в этой битве, НУЖНО рассмотреть варианты решений на основании драйверов устройств (подсказка: существуют такие коммерческие продукты)

Еще один StarForce?
За такое игра сразу идет в корзину.

К сожалению, тогда вообще придётся отказаться от некоторых онлайн-игр. И это плохо.

Нужно просто заниматься аналитикой, и убирать из игры то, на что чаще всего читят.
Для ММОРПГ есть СТОЛЬКО вариантов как правильно надавить на читеров.

Нужно понимать, что игроки редко читят сами по себе — они ищут готовые читы и качают их/покупают. Нужно активно анализировать эти моменты и делать так, чтобы чит был невыгоден для игрока. Они перестанут качать и хакер поищет другие варианты. Если увидит, что другие варианты оперативно блокируются, забьет и пойдет искать другие игрушки.
вот кстати в EVE Online после нескольких серий в итоге как минимум:
раз в 30 секунд прилетает пакет с байткодом на питоне который нужно выполнить и ответить. не ответ или не правильный ответ — почти сразу дисконнект. прилетает обычно проверки на то, не влезли ли в питон-часть + иногда — не загружено ли в процесс то, чего там быть не должно по мнению разработчиков.
И далеко не сразу будет бан, если вообще будет даже если в логах сервера видно что кто-то консоль на клиенте запустил и развлекается (есть… опыт).

Только вот реальная борьба похоже идет именно с RMT — анализ серверных логов на предмет передачи ресурсов между аккаунтами для целей RMT и выдача банов по цепочкам. Маскировка IP и железа компьютера не помогает (нет, драйверов CCP не используют).

Декомпилированные актуальные исходники (питон-части — там вся высокоуровневая логика) — они есть вообще у всех кому они вообще нужны похоже. Более того — CCP вообще выкладывали презентации с описанием как их движок работает.

Декомпиляторов питона на данный момент насколько я в курсе существуют два. один из которых — opensource и его добрые люди специально допиливали под CCP.

UFO just landed and posted this here
Еще один StarForce?

PunkBuster.

Ещё умиляет, когда после удаления игры "защита" остаётся в системе и продолжает заниматься своими тёмными делами.

Если подразумевалась оперативная память и загруженные модули — то в корзину уйдут практически все популярные ММО. Скан всего жёсткого диска, конечно, идиотизм
11. НУЖНО использовать C++ в клиенте
Весьма странный совет.
14. НУЖНО беречь исходный код как свою жизнь
Совет из разряда «у нас на двери нет замка, но никому не говорите об этом, тогда наш дом будет в безопасности». Утечка сорсов не должна быть большой проблема в плане читов. По-моему, лучше поставить нормальный замок, чем надеяться, что сорсы не сольют.
Весьма странный совет.

Соглашусь, но расшифровка делает посыл чуть более понятным. Видимо, имелось в виду "НЕЛЬЗЯ использовать для написания клиента язык, который легко декомпилировать до состояния человекочитаемых инструкций".


Понятно, что даже результат компиляции в ассемблер нельзя назвать не человекочитаемым (захочет — разберётся, вопрос только во временных затратах). Но чем сложнее для понимания будет скомпилированный клиент, тем, в рамках борьбы с читерством, видимо лучше.


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

UFO just landed and posted this here

Тоже вариант. О котором не вспомнил ни автор топика, ни, каюсь, я. Но я и от программирования далёк.

Я имел опыт серьезного внедрения в клиент Wurm online, и имею что сказать на счет этого пункта. Да, этот пункт оправдан полностью, но вы неправильно его поняли.

У этой игры раньше существовало два клиента. Оба на Java.

Первый - это полноценная ММО, базирующаяся на серверах разработчика. Он был неплохо так обфусцирован, имелись реалтайм проверки, достаточно грозная защита от ботоводства и вообще внедрений.

Второй - это "community" версия (wurm unlimited). С урезанным функционалом, не обфусцированный, защитных механик вообще практически не было. Декомпилируй и властвуй. Он подключался к серверам игроков, которые сами его запускали. В целом архитектура была похожа на minecraft в этом плане. Но он был неким снепшотом "нормальной" версии - релизился с большой задержкой от онлайн версии.

Так вот... Декомпиляция unlimited версии игры КРАЙНЕ помогала в декомпиляции/деобфускации онлайн версии. По сути достаточно было найти класс с похожей сигнатурой, удостовериться, что это он и есть, и с поправками на новые версии найти достаточно устойчивую сигнатуру для ассемблинга. В 95% случаев поиск целевого класса и сигнатур на внедрение в него занимал хорошо если полчаса. Причем, большинство обновлений клиента (а они содержали и обновление ключа обфускации) вообще не ломало чит-клиент.

Однако, со временем разработчик принял решение о прекращении выпуска "анлимитед" версии, и код стал всё больше и больше разниться между этими клиентами. Это очень усложнило анализ логики клиента и поиск мест внедрения. Спасало то, что я заранее нашел удачные места внедрение для перехвата уже расшифрованного трафика...

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

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

Утечка сорсов не должна быть большой проблема в плане читов.

Смотря что утечёт. Если исходники античит-системы или приватные ключи, то это очень даже проблема.

Если у вас боевые приватные ключи лежат в исходниках — у вас уже большие проблемы, чего уж там…

Как раз пишу онлайн игру, зашел почитать какая ещё защита кроме 10 совета бывает, а тут такой лютый бред менеджера по работе с коммьюнити и замашками тирана =(


Что вообще это делает в "Разработка" и "Разработке игр"? переместите, пожалуйста, в "Управление".


Перлы вроде "11. НУЖНО использовать C++ в клиенте" показывают что автор про программирование и разработку только слышал.

Как минимум с кода работающего на C# можно легко снять и разобрать по составляющим мемори снапшот. Проанализировать также память куска программы на C++ будет совсем не так просто. Конечно и на C# можно заставить программистов работать с указателями и выделяемой памятью, но я ни разу не сталкивался с программистами реально использовавшими unsafe code не только для простейшей арифметики, кроме самого себя. Ну или они не признавались. :)

Вы серьезно? Есть онлайн-игра "The Battle for Wesnoth", она вообще open source. Представляете? Это, по вашей логике, вообще катастрофа!1!1! Кто угодно может скачать и посмотреть исходный код. Да там наверное игроков-то и нет, одни читеры, да?

Да что там, всю третьекваку в 2005-м зарубил на корню лично Кармак!!1
The Battle for Wesnoth то конечно известный шутер от первого лица. :))
По моей логике у разных игр разные ограничения и требования. Когда я делал мультиплеерные карточные игры там на сервере правила вообще можно было не проверять, это делали на клиенте другие участники игры (это выбо ещё в те замшелые времена когда принято было экономить проц на сервере). И там это было достаточной защитой.

Вот когда вы CS GO опенсорсный предъявите — вот тогда это будет аргументом.
The Battle for Wesnoth то конечно известный шутер от первого лица. :))

Речь идет про онлайн-игры. Ты статью почитай, там нету слова "шутеры" :)) И как сказал andreymal — 3 квака опенсорс, тоже читеры?


Когда я делал мультиплеерные карточные игры там на сервере правила вообще можно было не проверять

А, ну всё с тобой понятно. Вот из-за таких как ты такие статьи и выходят =( С советами уровня "используйте С++ в клиенте"


Так что не, тебе опенсорсный CS:GO ещё рано, ногу себе отстрелишь :D

> Большинство игроков всё равно не читает условия,

Горите в аду за такие советы! Я читаю, и знаю какая там жопа.

> НУЖНО быть готовыми к сканированию компьютеров игроков на предмет известного читерского ПО

А за сканирование нужно отправлять в ад досрочно.
Разве поиск присутствия того же CheatEngine в оперативке — это наглость?
Он может использоваться для другой игры или вообще для каких-то своих целей.
Игра не должна выходить за рамки себя самой, а то так можно встроить десяток сканеров, антивирус и файервол до кучи. Мало ли что.
Это было бы мирно и хорошо, если бы игра гуляла в trusted environment, получая на отсутствие некого защитного любопытства взамен гарантию того, что в в её пространство не будут лезть тоже.

Вы можете назвать какие-то не критические аргументы против «лишнего» кода, а конструктивные аргументы по поводу защиты онлайновой игровой валюты, которая при определённых страстях начинает соотноситься с реальной валютой?

Может быть Saffron, который, наверняка тоже минусовал?

Так-то в оффлайне игрок пусть делает что хочет, хоть баллистические хелперы вкрячивает, хоть миллиарды лумбера себе выписывает, хоть термоядерные пули изобретает или, банально, прозрачные текстуры. Покуда это не касается баланса других игроков.

Интересует именно вопрос в рамках авторской темы — защита игроков от онлайн-несправедливости, причиняемой читерами (ну и компании тоже, разумеется).
Производительность. Вспомните тот же Denuvo и глюки, которые он создает. Владельцы слабых мощностей оценили. На онлайн играх его вроде пока нет, но суть та же, как я понимаю.

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

Помню, лет 10 назал во времена Lineage II: CS4 я состряпал что-то самописное для своих нужд. Оно перехватывало нажатия клавиатуры и что-то там делало, не суть. Так вот Ла2 в те времена перехватывало нажатия клавиш и шифровало их. В итоге мое детище работать переставало при запущенной игре. Вроде бы мелочь, а неприятно.
Так вот Ла2 в те времена перехватывало нажатия клавиш и шифровало их.

Каким образом пытались это делать? У меня обычный Low level keyboard hook вполне нормально работал.


Каюсь, я сам был читером — надоело играть честно после пары лет игры, когда саппорт закрывал глаза на любые нарушения, кроме неполиткорректного треша в общем чате. Правда, мне было интереснее разрабатывать софт, а не использовать его. Могу сказать, что защита на европейских серверах — GameGuard — была очень слабой и обходилась вообще без каких-либо сложностей, при этом она конфликтовала с антивирусами и прочим софтом, из-за чего её сильно ругали. Затем пару недель троллил Иннову на бета-сервере, которая обещала сделать российскую локализацию Lineage II, свободную от читеров и ботов.

Каким образом перехватывал нажатия клавиш?

Хм. Вряд ли вам это что-то скажет, но с помощью соответствующего компонента в HiAsm.
Это было в те ламповые времена, когда у меня только появился компьютер :)
Всё очень просто. Разработчик не можете доверять игроку (и его читам). А игрок не может доверять разработчику (и его троянам). Выход: на деньги играем в контролируем окружении, чтобы не было как в доте, когда соревнования проводятся онлайн и вместо заявленных в команде людей в их аккаунты входят другие игроки. Возможна какая-то сеть авторизованных киберкафе. А если играем на интерес — подбираем друзей, которым можем доверять.

Техническими мерами всё равно проблему не решить: даже если ты полностью зачистишь комп, никто не помешает игроку навести камеру на монитор и подключить в usb чудо-мышку, которая будет двигать курсор программно — тот же aim bot, только технический
UFO just landed and posted this here
Про распознование кадров сразу вспомнилась статья про KolibriOS

Возьмем, к примеру, «одноглазого» робота, который движется по скоростной железной дороге со скоростью 200 км/ч и наблюдает за состоянием контактной электросети.

Контактный кабель — стальной пруток диаметром 20мм, вихляющий над токоприёмником из стороны в сторону с амплитудой 50см. На этом кабеле надо разглядеть зазубрины размером не менее 0,5 миллиметра.

При обнаружении такой зазубрины — сохранить её фотографию и запомнить время и место (чтоб ремонтники знали где её искать), а если все нормально — сохранять только один кадр из тысячи.
Такие дофига умные игры приходится запускать в виртуалке. А потом выходит совет по борьбе с читами №42: запретите запускаться в виртуалках (их легко обнаружить по специфическим дровам) — и привет!
Возможно сработал бы пункт в лицензионном соглашении «Запрещается запуск CheatEngine одновременно с игрой», но на практике всегда пишут пункт «Запрещается запуск и присутствие на ПК любого теоретически зловредного ПО», а далее все зависит исключительно от градуса маразма, можно получить бан за наличие программы AutoIt на ПК.
Да, некоторые античиты уже были замечены в попытках сканирования всего жёсткого диска для поиска нежелательного ПО.
Таки наглость.
Сформулирую потактичней применительно к игре как объекту: это не твоё собачье дело, Игра, что твориться в моей оперативке — ползай по своей выделенной памяти и не лезь в другие области.

Как то уж больно много вольности взяли некоторые «идеологи создания развлечений», чтобы даже предполагать подобное, как «невинную шалость».
Не хватает каких-нибудь историй из реальной жизни. Например о том как нанятый читер поломал корпоративную сеть, выслав замаскированный под отчет о работе вирус. Ведь эти советы про общение с отдельного почтового ящика изнутри песочницы откуда-то наверное взялись.

Да не будет историй. Все читы делятся на рид-онли и не-рид-онди. Wallhack спалить нереально, т.к. он просто читает память и рисует средствами winapi поверх окна. Остальное — да, лезут менять данные и нужно шифровать, считать на сервере, валидировать, прятать и прочее.

И именно поэтому анти-чит системы представляют собой типичные руткиты. Одна из их задач — запретить читать память процесса, причём любой ценой.

UFO just landed and posted this here
Меня всегда интересовало, насколько сложно НЕ передавать на клиент информацию о тех игроках, которых он не видит?
Опыт World of Tanks показывает, что сложно.
Это очень медленный шутер, но, насколько я помню, расчёт видимости потребляет большую часть ресурсов сервера. И всё-равно имеем ситуации, когда противник выезжает из за угла, и стреляет, а ты его «замечаешь» только когда он уже закатывается обратно. Просто ты был в начале очереди расчёта видимости, а он в конце — до него очередь в нужный момент не дошла.
«расчёт видимости потребляет большую часть ресурсов»

Чорт побьери, это же очевидно…
Мне стыдно за мой предыдущий вопрос )

Главная паника тут в том, что игрок может не увидеть там, где должен увидеть. В какую-нибудь щель или прострел. А рейтрейсинг на сервере из каждой позиции игрока как-то не очень.
Можно разбить карту на части и если игроки находятся в одной, то они видят друг-друга. Но это нужно делать руками, и легко ошибиться. Попробуйте так разбить карту для CS:GO.

Разбить не проблема, надо просто BVH или KdTree дерево сгенерировать. Только вот лучей придется трейсить много. А еще из-за лагокомпенсации нужно это делать не из одной точки, например когда вплотную к краю стены стоишь, даже малый сдвиг открывает большой обзор. А ведь сервер не знает еще куда двигать, от клиента может придти команда двигаться куда угодно, если ошибку линейной лагокомпенсации движения можно сгладить на клиенте и это не так заметно, то недопередача на клиент видимых объектов это наизаметнейший артефакт. Потому придется находить все видимые объекты из шаровой обрасти, получается и по расчетам дорого и читерство невидимых стен все еще вполне актуально.
Вместо
foreach (UserUpdate update in UserUpdates)\
{
   packet.Add(update);
}

Делать
foreach (UserUpdate update in UserUpdates)
{
   if(user.CanSeeUpdate(update)
   {
      packet.Add(update);
   }
}


При этом сложность CanSeeUpdate может быть любой, а в некоторых случаях пакет с обновлениями генерируется один для всех и его придётся делать каждому свой.
punkbuster кстати для этого делает скриншоты и шлет себе на сервер, если видит какие то лишние полосы на скрине, то сразу бан
Как-то непонятно, что нужно, а что нельзя, надо было так выделять слова НУЖНО и НЕЛЬЗЯ. И еще размер шрифтов раз в 10 надо-бы увеличить.

Куда скатился хабр, даже geektimes более технический ресурс, чем этот сайт с надмозговыми переводами и платными блогами.
А в чём именно надмозговость перевода?
Перевод просто ужасен. Обычно симпатизирую Вашем переводам, а тут какой-то тихий ужас. Не знаю, может быть и в других статьях так же и я просто был невнимателен.

Взял первую попавшуюся на глаза строчку:
Это довольно противоречивый вопрос, но скорее надо реализовать эту функцию, чем нет.


This is a rather controversial issue, but much more likely than not you will need to implement it.


Просто бездумное калькирование логики построения и структуры фразы из английского языка на русский. Извините, но так статьи не переводят. Не для таких ресурсов. Постоянные повторы одних и тех же слов и словосочетаний: «довольно», «другими словами», вечные «это»/«эти»/«этим».

Если вы и правда зовете себя «переводчиком-фрилансером», то, пожалуйста, прочитайте ту же Нору Галь с её «Слово живое и Мертвое». Да, книжка старая и некоторые моменты устарели, но в вашем случае качество статей может увеличиться на порядок. ИМХО.

А, да, верстка режет глаз.

Использование защиты, включающей в себя драйвер — для меня этого достаточно, чтобы отнести игру к разряду малвари. Даже если разработчик весь из себя такой ангел, все равно у него могут украсть ключи, используемые для обновления этой фиговины. Или у разработчика защиты, если это отдельное лицо.
Разработчики игр совсем охренели и позволяют себе выходки, не допустимые даже среди самих читеров. У меня стоит ПО и настройки, препятствующие сканированию и установке драйверов. Если из-за них игра не запускается, я обращаюсь в магазин за компенсацией, потому что продали неработающую игру. В обращении так и пишу — на игру сработала защита от малвари. Возвращают.

Более того, драйвер под виндой обязательно должен быть подписан. А подписать драйвер навечно сейчас невозможно. То есть без обновления игра протухнет.
  1. НУЖНО использовать C++ в клиенте

Нет, не нужно. Более того, в некоторых случаях вы можете вообще открыть исходный код клиента игры. Просто не нужно обрабатывать логику на клиенте, тогда вам не нужно будет думать о читерах

Просто не нужно обрабатывать логику на клиенте, тогда вам не нужно будет думать о читерах

Вы же понимаете, что просто невозможно обрабатывать всё на сервере? Либо вычислительная сложность будет такой, что игра перестанет быть экономически оправданой.

Нет, не понимаю. Я уже много лет играю в ММО где применяется именно такой подход

А я утверждаю, что такой ММО не существует. Дело не в командах от клиента, а в том, что сервер всегда передаёт больше данных, чем требуется клиенту для отображения игровой сцены на экране. А по-другому никак: вы же не хотите, чтобы при вращении камеры игроки появлялись только через пару сотен миллисекунд?

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

Вы мыслите не в том направлении

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

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

EVE Online? Там, вроде, клиент ничего не решает. Урон считает сервер, попадания — сервер, даже позиции других игроков клиент не знает, пока в «поле зрения» не попадут.
Только ботов видел.

Хотите сказать, если пользователь крутанул камерой, то он перестаёт получать информацию о кораблях, которые временно выпали из поля зрения?

Тут мне надо спустя 5 с половиной лет уточнить, что «полем зрения» в EVE Online является сфера ~8000км вокруг корабля игрока. А камера там в целом не очень нужна, поскольку это Excel в космосе.
Мне удалили комментарий вчера, и видимо решили заодно одобрить залежавшуюся тухлятинку. :)

Есть браузерные MMO, которые генерят просто html/css

Учитывая развитие технологий предсказываю появление нейросетей, которые будут смотреть на видеопамять и подсвечивать вам замаскированных игроков. :)

Муж сестры дальтоник, в играх есть настройки, но они всё равно не сильно ему помогают. Зато жена помогает. Сидит рядом и наводит его. Читеры.
А когда в общаге устроили чемпионат в Q3, моя жена считала время появления брони и хелсы на двух секундомерах.
Играя онлайн, надо понимать, что у противника могут быть спецсредства, это неизбежно.

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

В динамичных играх читерство непобедимо, imho.
Смотря как определять «непобедимость».
С одной стороны – «На каждый чит найдётся античит».
С другой стороны – «На каждый античит найдётся чит».

Но надо отметить, что важно, чтобы за мыслью «читерство непобедимо» не следовала мысль «ну и не будем заморачиваться». Отлов читов – сама по себе интересная и креативная задача, и её решение может в итоге принести пользу даже безотносительно проблемной игрушки (а может даже и безотносительно игр вообще). Примерно как куча хороших эвристик в определённом смысле (хотя и не во всех, конечно) полезнее, чем доказательство алгоритмической неразрешимости проблемы останова. Аналогия слегка неточная, т.к. в случае проблемы останова никакого imho нет, но уж это свойство большинства аналогий.

Играю в World of Warships. Насколько я слышал, есть чит, который тупо показывает упреждение для стрельбы. Хоть разрабы трижды картинку отправлять будут — этот чит не умрет.

Против такого вида читов — подойдет только отправка другим игрокам картинки с вебкамеры, на которой должно быть видно игрока и его экран. Ну и плюс к этому punkbuster.

Никогда раньше не задумывался, что игра действительно может по требованию снимать скриншот прямо из видеопамяти и высылать в качестве доказательства. А ведь ничто, в принципе, не мешает. А на серверной стороне нейросеть натренеровать выделять на картинке посторонние элементы. Типа фотопулемёта…
На серверной стороне вполне достаточно к скриншоту добавить игровые данные, версию и настройки клиента, и срендерить картинку.

Сравнивать можно без нейросети — просто картинки должны совпадать на 100%.
Метод деанонимизации: отрендерить текст и посмотреть его размеры.
Для разных сочетаний CPU/GPU и т.д. результат будет отличаться на доли пикселя.
При растеризации и сглаживании возникнут колебания +-1 в канале яркости.
Таким образом картинка совпадет на 100% менее чем у 1% игроков.

С PC плохо выйдет — слишком много разных конфигураций. С консолями еще как-то возможно, но тоже не очень.


Можно, конечно, ограничить графику ровно тем, что одинаково поддерживается везде. Но даже в этом случае полного совпадения может и не быть. Из-за багов, разного понимания спецификаций, просто немного разных алгоритмов разные устройства с разными драйверами могут выдавать похожую, но немного отличающуюся картинку.

Не знаю, что за MMO, но как минимум в стрелялках без вычислений на клиенте нельзя вообще никак, вроде ещё Кармак по этому поводу ныл когда-то (пруфы затерялись)

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

Тогда выстрел, выглядящий абсолютно точным на стороне клиента, может оказаться промахом на стороне сервера из-за лага, джиттера, неидеальности физического движка, столкновения с другим игроком (все ведь замечали возникающие при этом дёргания?), чего угодно ещё. Так что сервер вынужден доверять клиенту, чтобы стрелялка была хоть как-нибудь играбельной
Не, не вынужден, и доверие клиенту на уровне «попал/не попал» фатально для неказуальной состязательной стрелялки. Лагокомпенсация, предсказание положений объектов и их отрисовка в ожидаемых положениях – что угодно, но не «окей, раз он утверждает, что попал, значит, попал».

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

толстая статья
Забавно, но именно её я в эту ветку и хотел скинуть в качестве подтверждения своих слов.)) Благо там прямым текстом написано:
Каждый раз когда вы пытаетесь узнать, получил ли кто-нибудь пулю, сервер просто возвращает всех игроков на правильные (с точки зрения задержки клиента) позиции, интерполирует время и наблюдает – получил кто пулю, или нет.

определением столкновений в 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 вообще не читая остальную память, так и делать стрейфы из-под огня.

Я уже вроде когда-то рассказывал, но повторюсь. В играх Blizzard используют несколько методов защиты: проверка целостности клиента, шифрование протокола, валидация всего, чего можно на сервере и т.д. Но все это так или иначе обходится, потому был придуман механизм Warden. Это бинарный код с унифицированным протоколом ввода-вывода, который отправляется на клиент и выполняется там. Сам Warden подписан 1024-битным RSA ключом (сейчас уже может и чем-то еще), идеально вылизан и занимает в среднем 20-30 кб. В зависимости от версии и предназначения он может выполнять разные системные и не системные операции — сканировать память процесса или всего компьютера, искать загруженные DLL, изменения в коде, считать контрольные суммы исходящих пакетов, да и вообще делать что-угодно на клиентской машине. По понятным причинам, кому-либо кроме разработчиков проблемно заменить и переподписать Warden без изменения ключа, вшитого в клиент. Сообщество какое-то время отслеживало новые версии warden'ов, изучало их протоколы и использовало в своих целях. Иногда антивирус мог запретить выполнение warden или доступ к части памяти, тогда продолжала использоваться старая версия либо вообще клиент работал без него, что было (а может и есть сейчас) серьезным упущением и большим пространством для маневра читеров. По большому счету, Warden это вирус, подписанный разработчиком и выполняемый им на компьютере клиента без его ведома и с неявным согласием (есть в EULA).
От таких советов потом и тормозят игры так, что люди взвывают и пользуются в том числе наработками сторонних людей, чтобы просто отключить эти навесы и играть честно. Просто потому что оно адски тормозит систему.

PS: знаком с этой ситуацией совсем не понаслышке.
Какой-то очень косноязычный перевод получился. Вроде бы и кириллица, но читается очень тяжело.
UFO just landed and posted this here
Я думаю, вы в них и так играете, просто не знаете, что там под капотом. Вряд ли разработчики будут писать в описании игры, что они сканируют вашу систему.
UFO just landed and posted this here
с другой стороны — от некоторых из этих мер защиты игры перестают работать даже когда пользователь честно хочет играть и ничего не читит (пример — 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 )- пишите разработчикам игры что у них проблемы.
Правило 0 или 23: у игры должна быть запись матча (replay), чтобы любой мог свободно просмотреть любой момент.

НЕЛЬЗЯ запускать читы внутри собственной сети (иначе исполнится мечта очень многих читеров)
Можно яснее?

особый тип ловушек — «honey pot». Технически «honey pot» отличается от обычной ловушки в том, что для читера создаётся искусственная мишень.
Гениально! Ложная мишень не отрисовывается, обычные игроки и не заметят, а вот чит на него среагирует.
Читу придётся проверять видимость мишени.
А если сделать постоянный рассинхрон координат головы цели и места его отрисовки на экране, чтобы чит не мог навестись?

UFO just landed and posted this here
А если сервер будет присылать спрайт противника, на котором он всегда в разной части, т.е. например, слева, а вся правая часть — часть кадра. Координата для экрана будет одна, тогда читу придётся же распознавать картинку визуально =)
Эдакая каптча получается.
UFO just landed and posted this here
А если добавлять в фон спрайта те самые шумы, на которых чит-распознаватель может разглядеть «лицо», которого нет?

Вы ведь правильно поняли, что я имел в виду? Обычный мультиплеер + облачный гейминг, в котором сервер рендерит для клиента его противников. Клиент накладывает этот прямоугольник на кадр игры. Чит видит только прямоугольник, но стрелять по его центру бессмысленно — противник всегда в случайном месте прямоугольного спрайта, допустим спрайт больше тела противника в несколько раз.
Тогда читу придётся выделять в спрайте или во всём кадре контуры противника. И вот я предлагаю вносить шум в фон, который не особо виден игроку, но очень мешает читу. Наверно, видели статью на Хабре о специальных очках, в которых человек распознаётся нейросетью совсем другим.
Также можно ведь не давать клиенту различия свой-чужой, чтобы чит пытался навестись на своих?
Нейросеть может и научат таки и различать и целиться, но будет ли он успевать за 16 миллисекунд? =)
Я только начинающий программист, поэтому может не всего ещё знаю, но можно ведь вообще этот прямоугольник с противником поместить в огромный кадр, допустим 3000 на 3000 пикселей с прозрачным фоном. Однотипное пространство хорошо сожмётся для передачи клиенту, видеокарта легко накладывает этот спрайт, а вот алгоритмам чита придётся весь этот массив обрабатывать же? Или CUDA всё испортит?
UFO just landed and posted this here
Наложить почти всю прозрачную текстуру 3000 на 3000 — это сложно для видеокарт? О_о

Шум не убирается, он должен мешать читу в поисках контуров головы. Игроку он не виден — контуры полупрозрачны.
Вы видимо не понимаете, как это работает. Чит не работает с контурами и вообще с визуальной составляющей. Он работает с хитбоксами, а что там наложено сверху — хоть тысяча текстур, он это не заметит даже. Визуально работает только воллхак, да и-то это на стороне клиента обрабатывается. Делается перехват координат целей (в памяти или траффике), и потом отрисовывается для читера уже красивая картинка с прозрачными стенами и подсвеченными врагами.

Или вы не поняли, что я писал. Ещё и ужасная привычка Хабра удалять юзера вместе с его сообщениями. У собеседника, как помню, было много полезной информации.
Да, чит получает координату противника из памяти. Моя идея была, что сервер присылает координату не для модели противника, а положения его спрайта на экране клиента.


Не подскажете — что такого случилось на Хабре сегодня, что пользователи массово начали заниматься некропостингом?

Это не некропостинг. :) Это мой комментарий пятилетней давности только что прошёл модерацию. X-D

Поздравляю, что ваша очередь дошла! xD

Во-первых, в соседней статье писали, что видеокарты не любят прозрачность.
Во-вторых, встроить подобное в алгоритм отрисовки крайне трудно, особенно, если противник выглядывает аз-за угла.
В-третьих, читерам станет еще проще: найти непрозрачные пиксели в текстуре. Это вообще одним шейдером делается.
Меньше, чем в 16 миллисекунд уложатся с поиском цельного объекта среди шума? Если противник вдали, то его размер сравнится с размером элементов шума. Если выявлять его по непрозрачности, то можно добавлять похожий непрозрачный шум, но подальше и в места потемнее на кадре, чтобы как можно меньше мешал игроку.
Тут многие возмущены некоторыми способами борьбы, особенно сканированием запущенных процессов, и мне кажется, такие люди не играют в соревновательные мультплееры.
В rainbow six siege есть возможность убивать врагов сквозь стены. При этом даже в небольшие дырочки от пуль видно кто там за стеной что делает.
Это означает, что положения всех игроков приходится всегда передавать на клиентскую сторону.
Это значит, что от wallhack-чита не спасёт вообще ничего, только банить постфактум по репортам от соперников.
После того, как юбисофт ввели в игру сканирование на читсистемы со стороны клиента — таких волхакеров стало значительно меньше. За что им стали благодарны множество игроков.
В общем, имхо, не стоит так радикально недовольствоваться тем, что защита от читеров сложная и комплексная.

Основная проблема в том, что типичные создатели античитов большие поклонники "security through obscurity". Пользователь должен установить бинарный блоб, который требует повышенных прав в системе. Что там внутри никто не знает. Это вызывает закономерное недоверие со стороны всех остальных. Параноиком можно и не быть, но ожидать, что там не будет багов, позволяющих выполнить произвольных код, несколько сложно.

И даже были прецеденты когда удавалось преодолеть барьеры обскурности и увидеть, как античит тырит пользовательские данные.
Наверное, читерство можно победить только в пошаговых играх, перенеся всю логику на сервер. Если игра не пошаговая, и для гейплея важны реакция игрока и умение пользоваться мышью, ничего не выйдет.
Хороший пример — World of Tanks. Почти все расчёты на сервере, но читерство процветает. Убирание кустов, автоматическая стрельба с упреждением, автоматическая стрельба по уязвимым точкам, и ничего радикального с этим не сделаешь.

Интересно, а можно ли использовать подход, который используют авторы полиморфных вирусов? Например, каждую неделю (а может и каждый день), выпускать микро-патчи, которые меняют клиент. От всех читов не спасёт, конечно, но не позволит модифицировать данные в памяти игры или читать их.

А вообще, как мне кажется, единственный способ борьбы с читерами — это запись статистики вообще всего, что происходит на клиенте и какой-нибудь полуавтоматический анализ. Да, в пылу сражения нужно доверять клиенту, но потом можно же слить с клиента все «логи» (вплоть до координат курсора мыши в каждую миллисекунду времени) и не торопясь сравнить эти данные с серверными реплеями. Да, читы станут «маскироваться под человека», но тогда они и преимущество будут давать меньшее.
Можно обновлять код игры каждый день — просто переставлять данные для памяти случайным образом.
Интересно, что можно против этого предпринять? Читу придётся находить нужные значения каждый день, это легко автоматизировать? Неужели читеру не будет лень каждый день перед игрой сидеть как за «АртМани»?
Или вообще менять код перед каждым матчем.
есть готовые решения платишь денюжку и за тебя всё зделают, обновление скачал и бот работает дальше, судя по таким проектам они довольно успешные, кучи игр поддерживают и очень редко банят пользователей, и бизнес модель удачная, месячная подписка и играй себе, против них я так понимаю можно бороться только используя жалобы других игроков, ну и killcam очень полезная штука, там легко определить читер ли тебя с полкарты замочил даже не видя или всё-таки сам дурак и не надо было высовываться лишний раз
Как думаете, как можно найти нужные данные для чита в памяти, если они будут меняться прямо во время игры? =)
Совершенно случайным образом, поступая от сервера.
Да ещё логика если будет меняться, например счётчик шёл в сторону повышения, а теперь наоборот.

Как Вы думаете, насколько просто это написать и потом искать баги, возникновение которых будет зависеть от взаимного сочетания разнообразных логик?

Завернуть все в библеотечку.
Типа она дает блок на 1 Кб.
Вы в него пишете, а она иногда что-нибудь где-нибудь переставляет.

А что насчет читов работающих в ring0 т.е. на уровне ядра?
По идее такой чит может сканировать память и внедряться в процесс без обнаружения с верхних уровней.

Понимаю, что некропост... Но лично вы бы купили и использовали чит на rung0 для своей любимой игры? Я - нет. Потому что код разработчика игры хотя бы юридически наказуем в случае доказательства. А чит вы покупаете на ноунейм ресурсе, и написан он ноунейм Василием. И что именно он абьюзит в ринг0 - я не берусь предсказать.

все эти советы годятся для читеров-любителей, для профессионалов которые продают ботов это всё не совсем проблема, есть деньги и наработаная база знаний и всё, нужно просто следить за обновлениями и изучать систему защиты, я не говорю что с читерами бороться бесполезно, но нужны более правильные способы чем «прятать исходный код» и «следить за процессами» в шутерах например killcam помогает понять что ктото читит, а в ММО я сам не особо играю, но по мне надо делать геймплей менее рутинным тогда экономическая выгода будет для ботоделов меньше, ведь если надо фармить часами то все хотябы разок поисчут бота, а если процесс не скучный то искать будут меньше и естественно потенциальных покупателей меньше, а там где нет выгоды то никто не будет возиться
в диабле 3 было много ботов пока не прикрыли аукцион и обмен вещами, и теперь боты там разве что заядлыми ботоводами используются, но это почти никак не влияет на других игроков, а раз не мешает то пусть себе сидят с ботами

Сравнение с diablo 3 крайне неправильное. После отказа от всех аукционов они превратили игру в синглплейер с чатом. Ну или разуменее назвать это коопом. Это не ММО. Ближайший конкурент в этом жанре - POE. Это почти ММО, причем практически без ПВП режима. Однако, там ботоводство и читерство процветает. Как и РМТ. Казалось бы, всего лишь почти синглплейер, нет аукциона, практически нет соревновательных режимов... А вот так вот.

>в диабле 3 было много ботов пока не прикрыли аукцион и обмен вещами
В связи с этим у меня есть отличное предложение, которое поможет справиться со 100% ботов: прикрыть игру целиком. Тогда-то уж точно никто читерить не будет.
Дьябло, например, потерял на волне борьбы с ботами очень многое. Настолько многое, что и вовсе не вызывает больше желания в неё играть. Вот вопрос — зачем это было нужно, если игра фактически не многопользовательская?
Я вообще не любитель онлайн игр. Но в BF1 очень крепко залип. И какое-то время действительно удивлялся как некоторые ребята выносят из многих видов оружия с огромных расстрояний прямо как со снайперок. Потом на youtube случайно попался ролик про читы в BF1 и всё стало на свои места. После понимания механики работы очень чётко видно, кто использует читы.
Но до сих пор я не могу понять в чём смысл их использования для игрока. Единственный вариант — это человек — полный неудачник и вот он приходит с работы, которую ненавидит и ему нужно поднять своё самомнение. Он заходит в игру, включает чит и всех выносит. Ура. Теперь жизнь совершенно другого цвета — теперь он победитель.

1) Бустить аккаунт
2) Руинить катку
3) Руинить аккаунт
4) По фану
5) Много сливал. Купил на недельку.
6) Нужен какой-то шмот. почитерил 2-3 дня (2-3 катки).
Много можно придумать.

Фан в том, что Вы видите всех на карте, а Вас не видят и в Вас стреляют с отдачей и т.п., а Вы убиваете с одного выстрела из любого оружия или просто всегда попадаете?
А всё остальное укладывается, по-моему, в «нет времени играть нормально, поэтому я испорчу игру другим». Верно?

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

А всё остальное укладывается, по-моему, в «нет времени играть нормально, поэтому я испорчу игру другим».

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


Сужу по примеру wot/war thunder. Хочется поиграть на нормальной технике — качай всю предыдущую ветку. (если жалко времени или предыдущая техника принципиально не нравится — плати, переводи опыт).
Открыл новый танк — а он со стоковыми модулями (т.е., пушка, двигатель, рация, и вообще характеристики значительно хуже), страдай или снова плати, чтобы "проскочить" это состояние.
Жалко тратить 30 часов на прокачку? Плати за премиум и прокачивай за 20.
Дошёл до высокоуровневой техники — она неприбыльная, покупай прем или снова играй на низких уровнях.

Ваше отношение крайне зашоренное. Приложу пасту, которую писал когда-то на другом ресурсе... Я читер, так сказать, "с опытом".

Давай я скажу прямую, но не очень популярную точку зрения. Мало кто из читеров признается в этом.

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

Лично твой дофаминовый уровень работает таким образом, что от сложности исполнения плана зависит финальный дофаминовый отклик. Ты получаешь больше удовлетворения, если пришел к результату путём упорных усилий. Оттачивал скилл, тренировался, и всё такое.

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

Есть люди, которые ставят целью именно победу, а не процесс. Победил - получил дофамин. И, в общем-то, категорически пофиг, каким путём получена победа.

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

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

Есть РМТ-шники, которым дофамин либо побоку (это их рутина), либо которые получают его от продажи полученного аккаунта или валюты.

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

Вариантов, почему люди читерят, на самом деле довольно много. Я привёл далеко не все варианты. Мозг каждого уникален.

Вброшу почти полный офф:
Eсть такая интересная старинная стратегия, называется странным словом «шахматы»
В нее некоторые психи (причём, не далее как в прошлом веке) вообще играли по переписке.
Делаешь свой ход и отправляешь его противнику в письме. Он пару дней думает и отправляет свой. И так далее.
И (о, ужас!) никто особенно о читерах не задумывался, хотя чисто теоретически возможности читерства открывались широчайшие, начиная от коллективного творчества, консультирования с игроками любого уровня и прочих шалостей.

Нет, читеры, конечно, были, есть и будут даже в шахматах. Но возникает главный вопрос — А ЗАЧЕМ?
Я вот сейчас могу тупо взять два компа, залезть на одном на какой-нибудь чесс.ком, а на другом — поставить какую-нибудь сильную шахматную программу. Ни один программный античит, скорее всего, эту проблему не отловит, а я быстро, работая переставляльщиком фигур и не зная о шахматах ничего вообще, могу выбиться в лидерборд сайта.
И? Это принесет мне какое-то моральное удовлетворение в долгосрочной перспективе? Как быстро мне надоест впустую двигать фигуры, не развивая ровным счётом _никаких_ скиллов вообще?

Или уже не осталось онлайн-игр, где играют на интерес, а всё насквозь монетизировано, а за такую победу сразу отвалят много денег?
Я тогда, пожалуй, продолжу лучше играть в шахматы :)
Я вот тоже не могу понять зачем читить в BF1. Всё, что там можно получить — это очки и уровень. Но это не имеет никакого значения. Единственная цель в данном случае «выносить всех» — это удовлетворение своего униженного жизнью эго. И касательно BF1 — как раз пара таких «недоразвитых» реально портит игру остальным 40-50 игрокам. И фан для них — это как раз зайти и испортить игру.
Я лично не понимаю совсем интереса игры с читами.
Нашёл интересное интервью с читером https://www.youtube.com/watch?v=I7vmGjOOdSM Чувак использует читы, чтобы выносить явных читеров.
> А ЗАЧЕМ?

А представьте что вам за каждую победу деньги платят. Ну или игровую валюту, которая тоже ценность и которую можно так или иначе поменять на настоящие деньги. А можно не менять на деньги, а разблокировать внутриигровой контент.

Если бы в ММОРПГ не было бы гринда, то не было бы и ботов
>Если бы в ММОРПГ не было бы гринда, то не было бы и ботов
не уверен… Есть люди которым испортить настроение другим в радость. Но в реальной жизни можно на сильную ответку нарваться…

Представьте, что вы открыли партию в шахматы, а вам доступны только пешки и король, а для того, чтобы открыть остальные фигуры вам придётся сыграть ~600 партий.

Выпускать игру на PS или XBOX, профита больше, и читеров нет)
>5. НУЖНО шифровать трафик
Один из полубессмысленных советов. Секретный ключ достается из памяти процесса.
Представил себе ГТА без списка кодов, кучу игр без артманей. И загрустил.
Если говорить про ММОРПГ, полезными советами выглядят только 4 (серверная логика) и 5 (шифрование трафика). При том, целью шифрования должно быть не закрытие протокола, а защита личных данных пользователя.

Не увидел тут гораздо более важного и эффективного пункта для борьбы с ботами: не добавлять в игру механик, которые легко и полезно автоматизировать.

Приведу два примера:
1. рыбалка и добыча ресурсов с фиксированным спотом. Персонаж стоит на месте, нажимает пару кнопок, и получает игровые ценности. Таких занятий либо вообще не должно быть, либо в них не должно быть особой прибыли, либо там должны быть механики, заставляющего игрока много перемещаться и/или сражаться с другими игроками. А так только ленивый не сделает не то что бота, а простейший кликер, и будет получать доход
2. аукцион с фиксированной максимальной ценой. Приводит к тому, что часть товаров начинают скупать боты за долю секунды, и честные игроки их никогда не увидят, и будут вынуждены покупать/писать бота. Выходы могут быть разные, самый простой — не делать фиксированной максимальной цены
Автору респект за перевод, конечно в некоторых местах есть неточности — но они незначительны.

Оригинал же статьи по сути ничего реально интересного не предложил, статья на уровня — КЭП сказал.
То что автор этой статьи пишет книгу по разработке ММО, не делает его специалистом по античитам.

Просто прокомментирую те моменты где я не совсем согласен с автором:

2. Большинство движков защиты к которыми я работал имеют свой SDK для встраивания, правда обычно разработчики не всегда следуют Protection Guidelines и отсюда растут проблемы в большинстве случаев.

8. Политика блокировок проста — если игра F2P, то делают — лицензия на временный доступ, все кто хочет — могут просто посмотреть на Blizzard WoW, там сделано очень качественно.

11. На .NET при желании можно сделать не хуже систему защиты, просто большинство игр на Unity или в целом на .NET не сильно думают об этом. Сама среда исполнения CLR допускает ОЧЕНЬ много хитрых моментов, а поскольку реверс байткод не настолько хорошо исследован как скажем реверс нативного кода — это может быть наоборот плюсом.

22. Ну это как правило бесполезно, потому что лечить следствие, а не причину — причина — «Получение преимущества», например в шутера — гораздо эффективнее искать не сам чит, а скорее аномальное поведение игрока, т.е. сначала играл очень плохо с КД 0.8, а потом вдруг резко КД стал 5+, вот тогда и нужно проводить анализ.
Sign up to leave a comment.

Articles