Как можно предотвратить или уменьшить читерство в многопользовательских онлайн-играх? [закрыто]

19

Punkbuster существует только для предотвращения мошенничества, но, тем не менее, мошенничество распространено в играх с поддержкой punkbuster. Modern Warefare 2 серьезно заблокирован конечным пользователем, работающим на своем собственном сервере или создающим какие-либо моды, и мошенничество происходит постоянно.

Что можно сделать для многопользовательской игры, в которой каждый клиент работает на ПК, чтобы уменьшить или устранить мошенничество?

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

Ответы:

18

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

Wallhacks обычно пишутся путем внедрения кода между вашим процессом и библиотеками DirectX / GL, чтобы установить прозрачность материалов, чтобы их было видно. Вы можете добавить некоторый код в вашу систему сцен / отбраковки, чтобы специально не рисовать других игроков / полезных сущностей, если они находятся за стенами (чтобы предотвратить обман таким образом).

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

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

Это довольно сложная тема, но, надеюсь, это укажет вам неопределенное направление.

Роб Эштон
источник
Или даже лучше, чем прятать объекты за стенами (которые все еще могут быть взломаны), не сообщая клиенту информацию о местонахождении этого игрока вообще (или только то, что необходимо, например, для хорошего звучания трехмерного звукового эффекта)
Барт ван Хейкелом
17

При самом крайнем решении вы в основном никогда не доверяете клиенту. Для таких игр, как MMO, пользователи не запускают свои серверы, и любая логика игрового процесса обрабатывается на стороне сервера. Никогда не давайте клиенту права сказать «у меня Х здоровья» или «У меня Х патронов» и т. Д.

тетрада
источник
4
Это замечательно, если у вас действительно есть ресурсы для запуска выделенного сервера, но это довольно упрощенный подход. Скорее всего, вам все равно придется выполнять большую часть логики на клиентах и ​​минимальное подмножество логики на сервере с периодической синхронизацией для обеспечения соблюдения основных правил. Это также не обязательно предотвращает против всех читов на стороне клиента, таких как взломы стен / манипулирование памятью, чтобы обмануть клиента в раскрытии полезной информации и т. Д.
Роб Эштон
10

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

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

ZorbaTHut
источник
+1 С точки зрения производительности, стохастические подходы, подобные этим, являются единственным реалистичным ответом на более широкие вопросы, ИМО. Кроме OnLive, то есть, если вы ориентируетесь только на США.
Инженер
5

Существует также много типов хакерских атак для шутеров от первого лица, которые также работают, подключаясь к вызовам графической библиотеки. У OGC Hook для Counter-Strike / HL1 было множество возможностей, кроме того, чтобы сделать стены прозрачными.

Если информация о местонахождении врагов в какой-то момент передается в библиотеку более низкого уровня, имеющую широко доступный код, эти вызовы можно подключить, а данные о местоположении, масштабе, повороте и т. Д. Можно использовать для точного расчета наилучшего вектора для стрельбы. на этого врага. Античит-системы, такие как PunkBuster, часто включают в себя эвристическое обнаружение (как часто этот игрок получает идеальный выстрел, как часто они поворачиваются на 180 градусов, чтобы нанести один выстрел, и т. Д.) В дополнение к мониторингу памяти и процесса.

В конечном итоге задача предотвращения мошенничества в многопользовательских играх - игра в кошки-мышки. По мере разработки новых читов создаются новые методы против читов, а затем создаются новые читы, чтобы избежать новых технологий против читов.

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

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

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

Чарльз Эллис
источник
3

Все ответы выше великолепны, но я добавлю еще один кусок:

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

Пример, с которым я очень хорошо знаком: Starcraft 2. Один из способов, которым Blizzard блокирует хакеров, заключается в получении мошеннических доказательств в качестве повторов игры.

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

Затем вы сообщаете о нем с повтором, и если доказательства против него достаточно хороши, он забанен. Насколько я знаю, компании, которые занимаются этим, принимают только серьезные доказательства или многочисленные источники доказательств того же поведения перед тем, как запретить.

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

SirKnigget
источник
0

Это может быть не полный ответ, но у меня есть некоторый вклад здесь. Один из лучших способов предотвратить обман - это запутывание или использование C / C ++. Это не позволяет людям изменять клиентский код.

LiquidFeline
источник
Стоит отметить, что существует много деобфускаторов. Также .Net (C #, XNA) игры могут быть изменены с помощью Reflection. Из того, что я знаю, я предполагаю, что C / C ++ действительно является одним из способов усложнить работу с кодом.
user1306322
Да. Моя точка зрения заключается в том, что запутывание препятствует тому, чтобы легко декомпилированный код был нечитаемым, а C / C ++ нелегко компилировать, они оба являются хорошими вариантами.
LiquidFeline
Кроме того, если вы часто исправляете свою игру и меняете двоичные смещения в исполняемом файле или вставляете случайные NOP, ни один хак не выживет достаточно долго ...
SirKnigget
@CPP_Person: На самом деле C довольно известен тем, что очень легко компилируется. Это совсем другой вопрос для C ++, который на самом деле является довольно сложным языком с точки зрения компиляторов. Однако я не понимаю, почему это должно иметь значение, насколько легко скомпилировать определенный язык программирования - вы хотите запретить людям писать чит-инструменты, а не писать хороший компилятор - они все равно будут использовать существующий компилятор C ++ - делая сложная декомпиляция кажется мне гораздо интереснее, чем сложная.
Кайзерлуди,