Техники предотвращения неофициальных клиентов в сетевых играх?


22

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

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

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

Спасибо!


Некоторые считают, что общие облачные игры не за горами. Это отчасти решает этот вопрос полностью.
Лоран Кувиду

Ответы:


13

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

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

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

Так что вопрос должен быть - как обнаружить бота игрока?

Здесь у вас есть несколько вариантов - измерение времени между щелчками, измерение скорости движений мыши - перемещается ли мышь точно из точки A в точку B много раз и попадает в одни и те же координаты? Является ли движение пользователя повторяемым? Если когда ресурс, который собирал пользователь, был исчерпан, переходит ли пользователь к другому действию или он часами ждет на месте? В конце дня вы пишете код распознавания образов.


4
Вашу технику проверки бота можно обойти за считанные минуты, добавив немного шума вокруг действия бота.
AsTeR

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

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

1
@AsTeR Это были лишь некоторые идеи, чтобы подтолкнуть в правильном направлении. Существует множество статей и презентаций, в которых эта проблема рассматривается более глубоко, например, эта: iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Камил,

5
«Так что вопрос должен быть - как обнаружить бота игрока?» Я не согласен, есть несколько способов обмануть, не имея бота. Например, позволить клиенту получить слишком много информации или доверять клиенту.
Мацеманн

9

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

Я не думаю, что это правильный подход к этому или, по крайней мере, не единственное, что вас должно волновать.

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

  2. Делайте большую часть расчетов на стороне сервера (позиционирование и т. Д.). Клиент делает свои собственные расчеты, НО никогда не сможет отправлять свои собственные значения только свои действия. Сервер должен проверить, действительно ли это действие и как оно повлияет на игру.

  3. 1 и 2 обычно сочетаются с предсказаниями. Клиент и сервер пытаются предсказать определенное поведение. Например, клиент перемещает игрока, но каждые х секунд или мс. получает исправление от сервера

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

С 2 вы можете быть уверены, что нет взлома денег, взлома позиции, взлома стен и т. Д., Но боты всегда были проблемой для многих компаний. Даже такие крупные компании, как Blizzard, имеют проблемы с этим. Что вы можете сделать, так это ограничить игровое время для каждой учетной записи, чтобы кто-то не мог находиться в сети более 540 часов в месяц. Я помню бота, который использовал цветовые значения monsters + mouse input для того, чтобы фармить XP. Другим способом было бы предоставить дополнительную программу, которая проверяет наличие других работающих приложений и доступ к памяти, но это приносит несколько новых проблем.

Редактировать:

Очень хорошо написанные статьи для начинающих: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


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

@UpTheCreek Не могли бы вы рассказать нам, что вас больше всего беспокоит? Боты, изменяющие данные, какую информацию отправляют клиенту или от клиента, которые необходимо защитить. Как вы уже заметили, обезопасить клиента - непростая задача, но, возможно, мы сможем вам немного помочь, перейдя к корням ваших проблем.

Что ж, для нас это случай баланса серверных проверок / симуляции с затратами на сервер. Мы не можем включить все, что хотели бы. Я много думал об этом, но я хотел посмотреть, есть ли какие-нибудь хитрые уловки, чтобы лучше защитить клиента :) Клиент основан на javascript, так что вы можете себе представить, что взломать его даже проще, чем обычно !
UpTheCreek

4

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

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

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

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

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


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

4

Вы не указываете тип игры, поэтому я буду сильно склоняться к играм RPG / MMO. Но многое из этого может и действительно относится к FPS, Стратегии и Экшн-играм. То, как крупные многопользовательские игровые компании, такие как Blizzard, решают эту проблему в своих играх:

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

Затем они появляются в игре (если это возможно, для таких же игр, как Starcraft 2, это не так) или иным образом наблюдают / говорят с игроком об их действиях как о «проверке человеком». Или, по крайней мере, так должно быть. Blizzard довольно хороша в этом, но исторически других MMO-компаний не было.

Проверять неочевидных ботов нелегко, но следует соблюдать несколько основных правил:

  • Ищем игроков, которые, с небольшими колебаниями, выполняют одни и те же действия снова и снова. Это может быть сидеть в узле ресурса в MMO и обрабатывать его, когда он возрождается, или он может вращаться по кругу между пакетами здоровья / боеприпасов в FPS и никогда не отклоняться от определенного пути и всегда использовать одно и то же оружие. (Субоптимальные боты в FPS редки, но если в вашей игре есть лестница, на которую нужно подняться, где количество игр более важно, чем талант игрока, как у некоторых современных FPS, боты снова становятся ценными)
  • Поиск игроков, выполняющих один и тот же точный рывок или стратегию снова и снова в RTS. В Starcraft есть определенные порядки сборки, которые могут быть почти непобедимыми при выполнении ботом.
  • Ищем игроков, которые собрали огромные суммы ресурсов и теперь бесконечно вытачивают один предмет. Это было большой проблемой в Ultima Online.

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

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

Tanget

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

Я сам был очарован этой идеей, когда впервые начал программировать и создавал бесполезных ботов для Ultima Online, которые будут стоять в городе и подражать NPC. Команды были очень простыми, поэтому их было легко выполнять, просто нажимая клавиши для перехода в разные стороны, и просматривая журнал чата на свое имя и передавая сообщения ALICE через веб-версию AI. Я не помню, какой из них, и, вероятно, больше не существует.

/ Tangent

Дело в том, что вам нужно решить, где провести линию. Если вы не можете позволить армии модераторов общаться с людьми, которых ваша система идентифицирует как ботов, вам, вероятно, лучше позволить сообществу помечать людей как ботов, а затем, если этого будет достаточно со временем, пнуть игрока в течение часа. Не бан, просто пни. Настоящая проблема для большинства игроков заключается в том, что боты могут использовать ресурсы других людей. Если мобов мало, как и в случае с Ragnarok Online, то боты, которые бродят и очищают целые области от врагов, собирая предметы (или нет), являются обычным явлением, и они разрушают игру для других людей. Таким образом, вы можете обойти стоимость админских армий таким образом.

Наконец, вы также можете жить с ботами как реальностью вашего игрового пространства и поощрять их использование. Это требует разработки вашей игры на основе возможного и общего использования ботов, тренеров и вспомогательных программ. Я хочу сказать, что была MMO, которая сделала это около 10 лет назад, но я не могу вспомнить, какая это была. Это означало конец игры, потому что ММО очень тяжелые, и это означало, что 95% игроков отошли от своих клавиатур в любой момент времени и разрушили сообщество. Если вы идете по этому пути, будьте осторожны.


3
В последнем параграфе SOE Star Wars Galaxies был примером MMO с довольно мощным игровым скриптовым / макроязыком, но у него не было особых проблем с ботами. В конечном итоге произошло то, что некоторые из наиболее утомительных потребностей в игре были написаны по сценарию (например, большинство звездных портов имели очередь игроков перед полностью автоматизированным ботом-билингом целителя), и низкоуровневое измельчение XP часто делалось таким образом. слишком. ИМО все это в значительной степени добавило в игру, что убило это были некоторые невероятно плохие решения и изменения в игре, почти без предупреждения или общения.
GAThrawn

3

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

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

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

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

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


1
+1 Единственный эффективный способ избежать мошенничества - это разработать игру так, чтобы мошенничество было неэффективным с самого начала.
API-Beast

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

2

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

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

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

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


1

Ну, я не думаю, что есть "раствор Ультиамте". Вы можете закодировать Datapackages и дать серверу, который получает пакеты, некоторые правила. Например, вы можете установить, что самый большой реалистичный / разрешенный ход равен +1, а не как мошенник / хакер, который установил бы его на 5 или выше, просто чтобы быть быстрее. Подумайте, что может сделать хакер, чтобы быть лучше других игроков, и установите для него правила.


0

Самый простой способ - сделать клиента тупым терминалом. Все делается на сервере, и клиент просто отправляет команды на сервер. Таким образом, сервер полностью контролирует все.

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

Также отправляйте клиенту только то, что он «должен» знать. Например, если вражеский игрок находится за стеной, не отправляйте эту информацию клиенту, или взломанный клиент сможет распознать эту информацию (читай: wallhack).


-1

РЕДАКТИРОВАТЬ: я неправильно понял вопрос. Я интерпретировал это как «предотвратить пиратский / взломанный ключ» вместо «взломанного программного обеспечения, которое может послать сообщение, чтобы сгенерировать для игрока 1 миллиард золота».

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

С распространением высокоскоростного Интернета и передачи файлов P2P компании переключились с CD-ключей, которые хранятся локально на клиенте, на ключи, которые связаны с учетной записью на их серверах. Больше не существует «официального» или «неофициального» клиентского программного обеспечения, поскольку любой может загрузить клиент. Но вы можете играть, только если у вас есть аккаунт с доступом к игре.

Это также приносит пользу компании, поскольку им не нужно тратить столько же на создание физических копий программного обеспечения.


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

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

Арг, ты прав. Я неправильно понял вопрос.
Орин МакГрегор
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.