Методи запобігання неофіційним клієнтам у мережевих іграх?


22

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

Я розумію, що, мабуть, немає надійного способу зробити це, але, швидше, мене цікавлять методи, які можна застосувати для зменшення проблеми.

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

Дякую!


Деякі вважають, що узагальнені хмарні ігри стоять за кутом. Це наче вирішує це питання цілком.
Лоран Кувіду

Відповіді:


13

Це цікава проблема, але я думаю, ви тут задаєте неправильне запитання. Дозвольте почати з виявлення зламаного клієнтського підходу:

Якщо ваш клієнт виконаний на стороні користувача, він може робити все, що завгодно, з вашим кодом (поки це занадто складно для нього, але в рядку завжди знайдеться хтось розумніший). Все, що ви можете зробити, як жорстке кодування шифрування повідомлень між клієнтом і сервером, створення клієнтських сертифікатів або навіть змушення клієнта для обчислення контрольної суми, може, і приділяючи достатньо часу, буде декомпільовано і зламано. Я бачив програмне забезпечення, яке постачалося з ключем, у цього ключа він був частиною коду програми, але щоб мати змогу його виконати, dongle спочатку перевірив crc програми, якщо він не був загартований. також .. плюс якщо ви оновлюєте програмне забезпечення, вам потрібно повторно надіслати ключ ..

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

Тож має бути питання - як виявити бот-гравця?

Тут у вас є кілька варіантів - вимірювання часу між клацаннями, вимірювання швидкості рухів миші - чи миша рухається точно від точки А до точки В чимало разів і вдаряється точно в ті самі координати? Чи повторюється рух користувача? Якщо ресурс, який збирав користувач, виснажився, чи переходить користувач на інші дії, або він чекає на місці годинами? Наприкінці дня ви закінчите писати код розпізнавання шаблонів.


4
Ваші методи перевірки бота можуть бути побиті протягом декількох хвилин, додавши трохи шуму навколо дії бота.
AsTeR

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

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

1
@AsTeR Це були лише деякі ідеї, щоб просуватися в правильному напрямку. Є численні статті та презентації, які більш глибоко вирішують цю проблему, наприклад, наприклад: iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Каміль

5
"Тож має бути питання - як виявити бот-гравця?" Я не згоден, існує кілька способів обману, не маючи бота. Наприклад, дозволяти клієнту отримувати занадто багато інформації або довіряти клієнту.
Мацеманн

9

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

Я не думаю, що це правильний спосіб підійти до цього чи, принаймні, не єдине, про що ти маєш хвилюватись.

  1. Переконайтеся, що ви надсилаєте кожному клієнту лише конкретну інформацію клієнта (наприклад, клієнту не потрібно знати, на що може потрапити монстр, просто надсилайте інформацію після вбивства та лише вказаним клієнтам)

  2. Робіть більшість обчислень на стороні сервера (позиціонування тощо). Клієнт робить свої власні розрахунки, АЛЕ ніколи не може надсилати власні цінності лише своїми діями. Сервер повинен перевірити, чи дійсна ця дія та як вона вплине на гру.

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

  4. Стягуйте користувачів із своїх облікових записів не за клієнта, таким чином користувач може отримати зламану версію, але не може грати без акаунта.

Завдяки 2 ви можете переконатися, що немає грошей, позиціонерів або настінних хаків тощо, але боти завжди були проблемою для багатьох компаній. Навіть великі назви компаній, наприклад, хуртовина, мають проблеми з цим. Що ви можете зробити, це обмежити відтворюваний час на один обліковий запис, щоб хтось не міг бути в мережі більше 540 годин на місяць. Я пам’ятаю бота, який використовував значення кольорів монстрів + введення миші, щоб обробляти 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 і виконувати його обробку, коли він відновлюється, або він може працювати в колі між пакетами здоров’я / боєприпасів у FPS і ніколи не відхилятися від певного шляху та завжди використовувати один і той же пістолет. (Неоптимальні боти в FPS зустрічаються рідко, але якщо у вашій грі є драбина, на яку потрібно піднятися, де кількість ігор важливіше, ніж талант гравця, як у деяких сучасних FPS, боти знову стають цінними)
  • Шукаєте гравців, які виконують однаковий точний пік або стратегію в RTS і знову. У Starcraft є певні замовлення на збір, які можуть бути майже неперевершеними при виконанні ботом.
  • Шукаю гравців, які зібрали величезні суми ресурсів і тепер нескінченно розмелюють один предмет. Це було великою проблемою в Ultima Online.

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

Таким чином, останнім кроком, коли хтось або бот робить щось повторюване протягом дуже довгого часу, справді має бути людиною, яка підходить до гравця та розмовляє з ними. Якщо вони там і відповідають на відповіді людини, вони люди. Зазвичай модники вимагають від гравця зупинитися на деякий час або слідувати за ними десь і виконати деякі інші дії, обручі з часом стають складнішими.

Тангет

Звичайно, зрештою хтось створить бота, який не відрізнятиметься від реальної людини, пройшовши тест Тьюрінга. І є багато письменників-ботів, які прагнуть зробити саме це.

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

/ Дотична

Справа в тому, що вам потрібно вирішити, де провести лінію. Якщо ви не можете дозволити собі армію модераторів, щоб поговорити з людьми, які ваша система визначає як ботів, вам, ймовірно, краще дозволити громаді позначати людей як ботів, а тоді, коли достатньо зробити часу, виганяйте гравця близько години. Не забороняйте, просто брикайте. Справжньою проблемою для більшості гравців є те, що бот-свинячі ресурси, якими можуть користуватися інші людські гравці. Якщо мобів не вистачає, як це було у Ragnarok Online, боти, які бродять і очищають цілі області ворогів, забираючи предмети (чи ні), є загальними, і вони руйнують гру для інших людей. Таким чином, ви можете спіднити вартість адміністративних армій таким чином.

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


3
На останньому абзаці, "Зоряні війни" Галактики SOE були прикладом MMO з досить міцною мовою скриптів / макросів, але це не мало особливих проблем з ботом. У результаті все ж таки було, що деякі найнасипніші потреби в іграх були написані (більшість зіркових портів мали чергу гравців перед повністю автоматизованим ботом, що бофірує, наприклад), і низький рівень шліфування XP часто робився саме так теж. ІМО це все масово додало до гри, те, що її вбило, - це були неймовірно погані рішення та зміни в грі, без жодного попередження чи спілкування.
GAThrawn

3

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

Якщо дана гра-функція може бути завантаженою, то чому вона взагалі існує в грі ?? Ця особливість чітко закликає користувача створити бота.

Гра призначена для гри, надаючи гравцеві розумну кількість розваг, як правило, набором нетривіальних варіантів. Здатність вирішувати, що стоїть перед нетривіальним вибором, відокремлює людину від бота. Зрештою, замість того, щоб шукати ботів, шукайте у своїй грі, де міг би бути реалізований бот, і впроваджуйте її ви самі, щоб їх використовували всі. Тим самим ви заощаджуєте час гравцеві, уникаючи виконання нудних завдань, а боти ви боретеся з коренем: якщо немає бот-функцій гри, як там можуть бути боти?

Мій підсумок: Я б сказав, що існує поріг щодо мінімальної складності, яку гра не повинна піддавати обробці. Зробіть свою гру вище цієї межі, додавши нетривіальний вибір, що в кінцевому підсумку збільшить користувацький досвід.

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


1
+1 Єдиний ефективний спосіб проти обману - це спроектувати гру таким чином, щоб обман в першу чергу не був ефективним.
API-Beast

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

2

Існуючі відповіді вже хороші, але я хотів би зазначити, що якщо ваші чеки дорогі (наприклад: запуск усієї ігрової серверної сторони, щоб переконатися, що клієнт не обманює), то ви можете вибрати, щоб це зробити лише деякі час .

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

Переконайтесь, що сервер не видає, коли він перевіряє дії та коли це не так. Завжди надсилайте свою стандартну відповідь, поки ви не будете готові вживати заходів (і не віддавайте її, триваючи більше часу, щоб надсилати відповідь, коли ви перевіряєте чи коли ви ні).

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


1

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


0

Найпростіший спосіб - це по суті зробити клієнта тупим терміналом. Все робиться на сервері, а клієнт просто відправляє команди на сервер. Таким чином сервер повністю контролює все.

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

Крім того, надішліть клієнту лише те, що він повинен «знати». Наприклад, якщо ворожий гравець знаходиться за стіною, не надсилайте цю інформацію клієнту, або зламаний клієнт зможе розпізнати цю інформацію (читайте: wallhack).


-1

Редагувати: Я неправильно зрозумів питання. Я трактував це як "запобігання піратському / злому ключу" замість "зламаного програмного забезпечення, яке може надіслати повідомлення для отримання 1 мільярда золота для гравця".

У більшості ігор сьогодні є значення, пов’язане з обліковим записом у базі даних, оскільки все, що клієнт може надіслати на сервер, можна змінити. Це, мабуть, найпростіший та найефективніший метод.

З поширенням швидкодіючої передачі файлів в Інтернеті та P2P компанії перейшли від CD-ключів, які зберігаються локально на клієнті, до ключів, які пов'язані з обліковим записом на їх серверах. Більше немає "офіційного" чи "неофіційного" клієнтського програмного забезпечення, оскільки кожен може завантажити його. Але ви можете грати, лише якщо у вас є обліковий запис з доступом до гри.

Це також приносить користь компанії, оскільки їм не потрібно витрачати стільки, щоб виробляти фізичні копії програмного забезпечення.


Я не був тим, хто вас проголосував, але для мене це насправді не забезпечує захисту. Здається, ви говорите лише про те, щоб дозволити підключитися авторизованим користувачам - це легко вирішити. Але проблема полягає в тому, що не було б нічого, щоб зупинити когось із дійсним обліковим записом, що реверсує обмін повідомленнями та пише мого власного зламаного клієнта.
UpTheCreek

-1 це не відповідає на запитання, наявність он-лайн акаунта не заважає комусь зв’язатися із зламаним клієнтом, який, наприклад, автоматизує ігрові дії. wow заснована повністю в Інтернеті, і вона все ще постійно ламається. щоб запобігти цій хуртовині, використовується їхнє програмне забезпечення проти накрутки, яке є прикладом для вирішення проблеми
dreta

Аргумент, ти маєш рацію. Я неправильно зрозумів питання.
Орін Макгрегор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.