В сетевых многопользовательских играх существуют какие-либо методы, позволяющие пользователям подключаться к официальному клиентскому приложению, а не к взломанному клиентскому приложению?
Я понимаю, что, вероятно, нет надежного способа сделать это, но мне интересны методы, которые можно использовать для смягчения проблемы.
Меня особенно интересуют любые методы, которые можно использовать для веб-игр, но я думаю, что большинство из них можно применять в целом.
Спасибо!
networking
multiplayer
security
UpTheCreek
источник
источник
Ответы:
Это интересная проблема, но я думаю, что вы задаете неправильный вопрос здесь. Позвольте мне начать с обнаружения взломанного клиентского подхода:
Если ваш клиент выполняется на стороне пользователя, он может делать с вашим кодом все, что он хочет (пока он не станет слишком сложным для него, но всегда будет кто-то умнее в линии). Все, что вы можете сделать, например, жестко закодировать шифрование сообщений между клиентом и сервером, создать клиентские сертификаты или даже заставить клиента вычислить его контрольную сумму, может, и при наличии достаточного времени, будет декомпилировано и взломано. Я видел программное обеспечение, которое поставлялось с ключом, этот ключ имел часть кода приложения, но чтобы его можно было выполнить, ключ сначала проверил crc приложения, если оно не было закалено ... конечно, через некоторое время ключ был взломан тоже .. плюс, если вы делаете обновление программного обеспечения, вам нужно повторно отправить ключ ..
Кроме того, пользователь может использовать свой собственный клиент для мошенничества - например, имитируя движение мыши и щелчки.
Так что вопрос должен быть - как обнаружить бота игрока?
Здесь у вас есть несколько вариантов - измерение времени между щелчками, измерение скорости движений мыши - перемещается ли мышь точно из точки A в точку B много раз и попадает в одни и те же координаты? Является ли движение пользователя повторяемым? Если когда ресурс, который собирал пользователь, был исчерпан, переходит ли пользователь к другому действию или он часами ждет на месте? В конце дня вы пишете код распознавания образов.
источник
Я не думаю, что это правильный подход к этому или, по крайней мере, не единственное, что вас должно волновать.
Удостоверьтесь, что вы отправляете информацию о клиенте каждому клиенту (например, клиенту не нужно знать, что монстр, например, может отбросить, просто отправьте информацию после его уничтожения и только указанным клиентам)
Делайте большую часть расчетов на стороне сервера (позиционирование и т. Д.). Клиент делает свои собственные расчеты, НО никогда не сможет отправлять свои собственные значения только свои действия. Сервер должен проверить, действительно ли это действие и как оно повлияет на игру.
1 и 2 обычно сочетаются с предсказаниями. Клиент и сервер пытаются предсказать определенное поведение. Например, клиент перемещает игрока, но каждые х секунд или мс. получает исправление от сервера
Заряжайте пользователей за их учетные записи, а не за клиента. Таким образом, пользователь может получить взломанную версию, но не сможет играть без учетной записи.
С 2 вы можете быть уверены, что нет взлома денег, взлома позиции, взлома стен и т. Д., Но боты всегда были проблемой для многих компаний. Даже такие крупные компании, как Blizzard, имеют проблемы с этим. Что вы можете сделать, так это ограничить игровое время для каждой учетной записи, чтобы кто-то не мог находиться в сети более 540 часов в месяц. Я помню бота, который использовал цветовые значения monsters + mouse input для того, чтобы фармить XP. Другим способом было бы предоставить дополнительную программу, которая проверяет наличие других работающих приложений и доступ к памяти, но это приносит несколько новых проблем.
Редактировать:
Очень хорошо написанные статьи для начинающих: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/
источник
Нет реального надежного способа гарантировать, что «официальный клиент» работает; любой такой механизм будет опираться на проверяющий код, сообщающий какой-то «секрет» серверу, который может быть реконструирован при наличии достаточного времени. Это в основном то, что происходит, когда анти-хакерское программное обеспечение сообщает серверу, что с клиентом все в порядке.
Отредактируйте: чтобы прояснить немного выше, рассмотрите код, который проверяет клиентскую сторону. У него есть две очень трудные задачи: проверить, используется ли исходный код (и больше ничего нет, что может помешать исходному коду динамически / во время выполнения (!)), И передать этот результат обратно на сервер таким образом, что это сообщение не может быть подделано. В то время как первая часть безумно трудна, вторая часть совершенно невозможна.
Если вы можете регулярно обновлять как клиента, так и сервер, то вы можете регулярно переключать секрет, надеясь, что взломщикам будет трудно его поддерживать. Однако, по всей вероятности, если вы не измените способ кодирования / реализации секрета, его можно снова очень быстро взломать. Так что, по сути, это гонка вооружений между вами и тем, кто хочет его взломать - у кого есть больше времени и денег, чтобы бросить эту проблему.
Приняв эту часть, можем ли мы что-нибудь еще сделать? В идеальном мире с бесконечной вычислительной мощностью и пропускной способностью вы могли бы просто непрерывно передавать состояние между клиентом и сервером, и сервер выполнял бы идеальную симуляцию того, что происходит на клиенте. Затем эту модель можно использовать для проверки действий, которые клиент, по утверждениям, совершает. Это не определит, играет ли человек или бот, но сможет проверить, заявляет ли клиент, что выстрел произошел через стену, или какое-то другое немыслимое действие.
Наличие достаточного количества данных на сервере также является первым шагом в обнаружении нерегулярного поведения - возможно, прицеливание слишком быстрое для людей и т. Д. Очевидно, что идеальная ситуация симуляции, как правило, неосуществима, но некоторую уменьшенную оценочную модель можно использовать в много ситуаций.
источник
Вы не указываете тип игры, поэтому я буду сильно склоняться к играм RPG / MMO. Но многое из этого может и действительно относится к FPS, Стратегии и Экшн-играм. То, как крупные многопользовательские игровые компании, такие как Blizzard, решают эту проблему в своих играх:
Затем они появляются в игре (если это возможно, для таких же игр, как Starcraft 2, это не так) или иным образом наблюдают / говорят с игроком об их действиях как о «проверке человеком». Или, по крайней мере, так должно быть. Blizzard довольно хороша в этом, но исторически других MMO-компаний не было.
Проверять неочевидных ботов нелегко, но следует соблюдать несколько основных правил:
Проблема в том, что чем популярнее ваша игра, и чем больше ботов может принести скука в вашей игре, тем больше вероятность того, что люди будут использовать и создавать этих ботов. И тривиально ограничить скорость движения мыши, добавить случайные гуманистические вариации для кликов, даже если бот совершает ошибки с человеческой скоростью, открывая и закрывая части меню, нажимая неправильную кнопку и затем закрывая окно, переключаясь между клавиатурой и работа мыши, как люди делают, чтобы уменьшить усталость рук. (ты даже не понимаешь, что делаешь это)
Таким образом, последний шаг, когда кто-то или бот делают что-то повторяющееся в течение очень долгого времени, действительно должен быть человеческим модом, подходящим к игроку и разговаривающим с ним. Если они там и отвечают человеческими ответами, они люди. Обычно моды просят игрока остановиться на некоторое время или следовать за ними где-нибудь и выполнить некоторые другие действия, обручи становятся более сложными со временем.
Tanget
Конечно, в конце концов кто-то создаст бота, который будет неотличим от реального человека, пройдя тест Тьюринга. И есть много авторов ботов, которые стремятся сделать именно это.
Я сам был очарован этой идеей, когда впервые начал программировать и создавал бесполезных ботов для Ultima Online, которые будут стоять в городе и подражать NPC. Команды были очень простыми, поэтому их было легко выполнять, просто нажимая клавиши для перехода в разные стороны, и просматривая журнал чата на свое имя и передавая сообщения ALICE через веб-версию AI. Я не помню, какой из них, и, вероятно, больше не существует.
/ Tangent
Дело в том, что вам нужно решить, где провести линию. Если вы не можете позволить армии модераторов общаться с людьми, которых ваша система идентифицирует как ботов, вам, вероятно, лучше позволить сообществу помечать людей как ботов, а затем, если этого будет достаточно со временем, пнуть игрока в течение часа. Не бан, просто пни. Настоящая проблема для большинства игроков заключается в том, что боты могут использовать ресурсы других людей. Если мобов мало, как и в случае с Ragnarok Online, то боты, которые бродят и очищают целые области от врагов, собирая предметы (или нет), являются обычным явлением, и они разрушают игру для других людей. Таким образом, вы можете обойти стоимость админских армий таким образом.
Наконец, вы также можете жить с ботами как реальностью вашего игрового пространства и поощрять их использование. Это требует разработки вашей игры на основе возможного и общего использования ботов, тренеров и вспомогательных программ. Я хочу сказать, что была MMO, которая сделала это около 10 лет назад, но я не могу вспомнить, какая это была. Это означало конец игры, потому что ММО очень тяжелые, и это означало, что 95% игроков отошли от своих клавиатур в любой момент времени и разрушили сообщество. Если вы идете по этому пути, будьте осторожны.
источник
Избегайте игровых функций, от которых пользователь может выиграть, выполняя повторяющиеся задания , особенно в играх, подобных браузеру. игровые функции, которые вызывают повторяющиеся задачи, не только злят других пользователей, потому что у них нет времени на их выполнение, но также делают игру намного более удобной для загрузки (и гораздо менее увлекательной!)
Если данная игровая функция может быть загружаемой, почему эта функция есть в игре? Эта функция явно призывает пользователя создать бота.
Игра предназначена для того, чтобы дать игроку достаточное количество развлечений, обычно с помощью набора нетривиальных вариантов. Способность решать, что перед нетривиальным выбором отделяет человека от бота. В конечном счете, вместо поиска ботов, поищите в своей игре, где может быть реализован бот, и внедрите его сами, чтобы каждый мог его использовать. Делая это, вы экономите время для игрока, избегая его выполнения скучных заданий, в то время как вы боретесь с ботами из корня: если нет доступных для загрузки функций игры, как могут быть боты?
Суть в том, что я бы сказал, что существует минимальный уровень сложности, при котором игра не должна быть загружаемой. Сделайте вашу игру выше этого порога, добавив нетривиальный выбор, который в конечном итоге увеличит пользовательский опыт.
В любом случае, может быть, эта парадигма больше не применяется в наши дни ... но я все еще верю, что это то, что делает хорошую игру.
источник
Существующие ответы уже хороши, но я хотел бы отметить, что если ваши чеки стоят дорого (например: запуск всей игровой серверной части, чтобы убедиться, что клиент не обманывает), то вы можете сделать это только в некоторых случаях. время .
Например, вы можете проверять действия только в определенном регионе или по отдельным игрокам (случайно изменяющимся через некоторое время), или просто иметь очередь действий и случайным образом выбирать, какие из них проверять (и игнорировать другие). Может быть, придумать эвристику о том, кто может обманывать (в основном искать людей, которые наиболее успешны) и проверить свои действия на сервере.
Убедитесь, что сервер не выдает, когда он проверяет действия, а когда нет. Всегда отправляйте стандартный ответ до тех пор, пока вы не будете готовы к действиям (и не отдавайте его, тратя больше времени на отправку ответа, когда вы проверяете, а когда нет).
Таким образом, вы можете получить довольно хорошую защиту от мошенничества, используя только ресурсы сервера, которые вы можете сэкономить (хотя, очевидно, чем ближе вы подходите к проверке каждого действия, тем лучше защита от мошенничества).
источник
Ну, я не думаю, что есть "раствор Ультиамте". Вы можете закодировать Datapackages и дать серверу, который получает пакеты, некоторые правила. Например, вы можете установить, что самый большой реалистичный / разрешенный ход равен +1, а не как мошенник / хакер, который установил бы его на 5 или выше, просто чтобы быть быстрее. Подумайте, что может сделать хакер, чтобы быть лучше других игроков, и установите для него правила.
источник
Самый простой способ - сделать клиента тупым терминалом. Все делается на сервере, и клиент просто отправляет команды на сервер. Таким образом, сервер полностью контролирует все.
Однако это, вероятно, не самый подходящий случай для вас, потому что сервер должен выполнять больше вычислений, и пользовательский опыт будет слабым. Таким образом, чем больше логики вы оставляете на усмотрение клиента, тем лучше пользовательский интерфейс, но тем ниже безопасность. Таким образом, вам придется найти золотую середину, которая приемлема для вас.
Также отправляйте клиенту только то, что он «должен» знать. Например, если вражеский игрок находится за стеной, не отправляйте эту информацию клиенту, или взломанный клиент сможет распознать эту информацию (читай: wallhack).
источник
РЕДАКТИРОВАТЬ: я неправильно понял вопрос. Я интерпретировал это как «предотвратить пиратский / взломанный ключ» вместо «взломанного программного обеспечения, которое может послать сообщение, чтобы сгенерировать для игрока 1 миллиард золота».
Большинство игр в наши дни имеют значение, привязанное к учетной записи в базе данных, поскольку все, что клиент может отправить на сервер, может быть изменено. Это, наверное, самый простой и эффективный метод.
С распространением высокоскоростного Интернета и передачи файлов P2P компании переключились с CD-ключей, которые хранятся локально на клиенте, на ключи, которые связаны с учетной записью на их серверах. Больше не существует «официального» или «неофициального» клиентского программного обеспечения, поскольку любой может загрузить клиент. Но вы можете играть, только если у вас есть аккаунт с доступом к игре.
Это также приносит пользу компании, поскольку им не нужно тратить столько же на создание физических копий программного обеспечения.
источник