Techniki zapobiegania nieoficjalnym klientom w grach sieciowych?

22

W przypadku gier sieciowych dla wielu graczy, jakie techniki istnieją, aby zapewnić, że użytkownicy łączą się z oficjalną aplikacją kliencką, a nie zhakowaną aplikacją kliencką?

Zdaję sobie sprawę, że prawdopodobnie nie ma pewnego sposobu, aby to zrobić, ale interesują mnie techniki, które można zastosować w celu złagodzenia problemu.

Szczególnie interesują mnie wszelkie techniki, które można zastosować w grach internetowych, ale wydaje mi się, że większość można zastosować ogólnie.

Dziękuję Ci!

UpTheCreek
źródło
Niektórzy uważają, że uogólnione gry w chmurze są tuż za rogiem. To całkowicie rozwiązuje to pytanie.
Laurent Couvidou

Odpowiedzi:

13

To interesujący problem, ale myślę, że zadajesz tutaj niewłaściwe pytanie. Zacznę od wykrycia zhakowanego klienta:

Jeśli Twój klient jest wykonywany po stronie użytkownika, może zrobić z Twoim kodem wszystko, co chce (dopóki nie będzie to dla niego zbyt skomplikowane, ale w linii zawsze będzie ktoś mądrzejszy). Wszystko, co możesz zrobić, na przykład szyfrowanie szyfrowane wiadomości między klientem a serwerem, tworzenie certyfikatów klienta, a nawet zmuszanie klienta do obliczenia sumy kontrolnej, może i przy wystarczającej ilości czasu zostanie zdekompilowany i złamany. Widziałem oprogramowanie dostarczone z kluczem sprzętowym, ten klucz miał część kodu aplikacji, ale aby móc go uruchomić, klucz najpierw sprawdził CRC aplikacji, jeśli nie był hartowany ... oczywiście po pewnym czasie włamano klucz sprzętowy też .. plus, jeśli wykonasz aktualizację oprogramowania, musisz ponownie wysłać klucz sprzętowy ..

Oprócz tego użytkownik może używać własnego klienta do oszukiwania - na przykład poprzez symulację ruchu myszy i kliknięć.

Pytanie powinno zatem brzmieć - jak wykryć robota-bota?

Tutaj masz kilka opcji - pomiar czasu między kliknięciami, pomiar prędkości ruchów myszy - czy mysz porusza się dokładnie od punktu A do punktu B i uderza dokładnie w te same struny? Czy ruch użytkownika jest powtarzalny? Jeśli kiedy zasoby, które gromadził użytkownik, zostały wyczerpane, to czy użytkownik przechodzi do innej akcji lub czeka przez wiele godzin? Na koniec dnia kończysz pisanie kodu rozpoznawania wzorców.

Kamil
źródło
4
Twoje techniki sprawdzania botów mogą zostać pokonane w ciągu kilku minut, dodając trochę hałasu wokół akcji bota.
AsTeR
+1 do tego; biorąc pod uwagę, że zapobieganie jest niemożliwe (a jeśli ktoś jest naprawdę zdeterminowany, może nawet posunąć się do hakowania swoich sterowników, co powinno to podkreślać), zdecydowanie powinieneś skupić się na wykrywaniu. Dodam również, że każda rozsądna społeczność, która mogłaby się gromadzić wokół gry, prawdopodobnie sama skończy się ochroną, więc możesz również włożyć trochę pracy w zapewnienie narzędzi, które w tym pomogą.
Maximus Minimus
2
Samo zapobieganie programowe jest niemożliwe, dlatego gry takie jak WoW mają mnóstwo administratorów, którzy sprawdzają ludzi wykonujących powtarzające się czynności i zadają im pytania, aby udowodnić, że są ludźmi.
DampeS8N,
1
@AsTeR Były to tylko niektóre pomysły, aby pójść we właściwym kierunku. Istnieje wiele artykułów i prezentacji, które bardziej szczegółowo zajmują się tym problemem, na przykład ten: iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Kamil
5
„Więc pytanie powinno brzmieć - jak wykryć robota-bota?” Nie zgadzam się, istnieje wiele sposobów oszukiwania bez posiadania bota. Na przykład pozwolenie klientowi na uzyskanie zbyt dużej ilości informacji lub zaufanie klientowi.
Matsemann,
9

W przypadku gier sieciowych dla wielu graczy, jakie techniki istnieją, aby zapewnić, że użytkownicy łączą się z oficjalną aplikacją kliencką, a nie zhakowaną aplikacją kliencką?

Nie sądzę, że jest to właściwy sposób podejścia do tego, a przynajmniej nie jedynej rzeczy, którą powinieneś się martwić.

  1. Upewnij się, że wysyłasz tylko określone informacje o kliencie każdemu klientowi (np. Klient nie musi wiedzieć, co potwór może na przykład upuścić, wystarczy wysłać informacje po zabiciu i tylko do określonych klientów)

  2. Wykonaj większość obliczeń po stronie serwera (pozycjonowanie itp.). Klient wykonuje własne obliczenia, ALE nigdy nie może wysłać własnych wartości tylko swoich działań. Serwer musi sprawdzić, czy ta akcja jest prawidłowa i jak wpłynie na grę.

  3. 1 i 2 są zwykle łączone z prognozami. Klient i serwer próbują przewidzieć określone zachowania. Na przykład klient przesuwa odtwarzacz, ale co x sekund lub ms. otrzymuje korektę przez serwer

  4. Obciążaj użytkowników za ich konta, a nie za klienta, w ten sposób użytkownik może dostać crackowaną wersję, ale nie może grać bez konta.

Dzięki 2 możesz upewnić się, że nie ma żadnych hacków pieniężnych, haków pozycjonujących, haków ściennych itp., Ale boty zawsze stanowiły problem dla wielu firm. Nawet duże firmy, takie jak zamieć, mają z tym problem. Możesz ograniczyć czas gry na konto, aby ktoś nie mógł być online dłużej niż 540 godzin miesięcznie. Pamiętam bota, który używał wartości kolorów potworów + danych wejściowych myszy w celu uzyskania XP. Innym sposobem byłoby zapewnienie dodatkowego programu, który sprawdza inne uruchomione aplikacje i dostęp do pamięci, ale przynosi to garść nowych problemów.

Edytować:

Bardzo dobrze napisane artykuły dla początkujących: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


źródło
Tak, zgadzam się, że nie jest to jedyna rzecz, którą powinniśmy się martwić. Robimy już większość tych rzeczy, ale niektóre odsłonięte elementy po stronie klienta są nieuniknione.
UpTheCreek
@UpTheCreek Czy możesz nam powiedzieć, czym się najbardziej martwisz? Boty, zmieniające dane, jakie informacje są wysyłane do klienta lub od klienta, które należy chronić. Jak już zauważyłeś, zapewnienie bezpieczeństwa crackowi klienta nie jest łatwym zadaniem, ale może możemy ci pomóc nieco lepiej, sięgając do źródeł twoich obaw.
Cóż, dla nas jest to kwestia równoważenia kontroli / symulacji po stronie serwera z kosztami serwera. Nie jesteśmy w stanie uwzględnić wszystkiego, co chcielibyśmy. Dużo o tym myślałem, ale chciałem sprawdzić, czy istnieją jakieś genialne sztuczki, które lepiej chronią klienta :) Klient jest oparty na javascript, więc możesz sobie wyobrazić, że hackowanie jest jeszcze łatwiejsze dla użytkowników !
UpTheCreek
4

Nie ma żadnego niezawodnego sposobu, aby zagwarantować, że „oficjalny klient” działa; każdy taki mechanizm będzie polegał na kodzie weryfikującym przekazującym serwerowi pewien „sekret”, który można poddać inżynierii wstecznej, mając wystarczająco dużo czasu. Zasadniczo dzieje się tak, gdy oprogramowanie antywłamaniowe informuje serwer, że klient jest w porządku.

Edycja: aby rozwinąć nieco powyższe, rozważ kod, który sprawdza poprawność po stronie klienta. Ma dwa bardzo trudne zadania: sprawdzenie, czy oryginalny kod jest używany (i nic więcej nie jest obecne, co mogłoby dynamicznie zakłócać oryginalny kod / w czasie wykonywania (!)), I przekazanie tego wyniku z powrotem do serwera, w taki sposób że tej komunikacji nie można sfałszować. Podczas gdy pierwsza część jest niesamowicie trudna, druga część jest wręcz niemożliwa.

Jeśli możesz regularnie aktualizować zarówno klienta, jak i serwer, możesz regularnie przełączać sekret, mając nadzieję na utrudnienie krakersom dotrzymania kroku. Najprawdopodobniej jednak, chyba że zmienisz sposób, w jaki sekret jest kodowany / wdrażany, może zostać ponownie bardzo szybko złamany. Więc w zasadzie jest to wyścig zbrojeń między tobą a tym, kto chce go złamać - kto ma więcej czasu i pieniędzy, aby rzucić wyzwanie.

Czy po zaakceptowaniu tej części możemy zrobić coś jeszcze? W idealnym świecie, z nieskończoną mocą obliczeniową i przepustowością, możesz po prostu w sposób ciągły przenosić stan między klientem a serwerem, a serwer może przeprowadzić doskonałą symulację tego, co dzieje się na kliencie. Ten model można następnie wykorzystać do sprawdzenia poprawności działań, które klient twierdzi, że wykonuje. Nie wykryje to, czy gra człowiek czy bot, ale będzie w stanie zweryfikować, czy klient żąda strzału przez ścianę, czy innej niepojętej akcji.

Posiadanie wystarczającej ilości danych na serwerze jest także pierwszym krokiem w wykrywaniu nieregularnych zachowań - być może celowanie jest zbyt szybkie dla ludzi itp. Oczywiście idealna sytuacja symulacyjna jest generalnie niewykonalna, ale można zastosować pewien rodzaj zmniejszonego, szacowanego modelu wiele sytuacji.

Daniel B.
źródło
+1. Przybyłem tutaj, aby wspomnieć o częstym zmienianiu tajemnicy, co oznacza, że ​​hakerzy musieliby powtarzać swoją pracę. Złożone sekrety sprawiłyby, że byłoby jeszcze lepiej, np. taki, który zmienia się w zależności od tego, co serwer wysyła.
Kylotan
4

Nie określasz rodzaju gry, więc skupię się na grach RPG / MMO. Ale wiele z tego może i dotyczy gier FPS, strategicznych i akcji. Sposób, w jaki duże firmy zajmujące się grami wieloosobowymi, takie jak Blizzard, rozwiązują ten problem w swoich grach:

  1. Wykonuj wszystkie obliczenia i działania po stronie serwera, klient to tylko głupi terminal i silnik graficzny. Jeśli więc gracze korzystają z innego klienta, to nie ma to znaczenia pod względem gry, nie mogą oszukiwać fizyki gry.
  2. Sprawdza oczywiste programy / klientów botów, szukając oczywistych działań komputera, takich jak idealne powtórzenie zdarzeń kliknięcia i ruchów myszy.
  3. Sprawdza nieoczywiste programy / klientów botów i powiadamia moderatorów w grze o problemie.

Następnie pojawiają się w grze (jeśli jest to możliwe, w przypadku takich samych gier, jak Starcraft 2, nie jest) lub w inny sposób oglądają / rozmawiają z graczem o swoich działaniach jako „ludzki czek”. A przynajmniej tak należy sobie z tym poradzić. Blizzard jest w tym całkiem niezły, ale historycznie inne firmy MMO nie były.

Sprawdzanie nieoczywistych botów nie jest łatwe, ale należy przestrzegać kilku podstawowych zasad

  • Poszukuję graczy, którzy przy niewielkich zmianach wykonują te same działania w kółko. Może siedzieć w węźle zasobów w MMO i hodować go, gdy się odrodzi, lub może biegać w kółko między pakietami zdrowia / amunicji w FPS i nigdy nie zboczyć z określonej ścieżki i zawsze używając tej samej broni. (Nieoptymalne boty w FPS są rzadkie, ale jeśli Twoja gra ma drabinę do wspinania się tam, gdzie liczba gier jest ważniejsza niż talent gracza, jak niektóre współczesne FPS, boty znów stają się cenne)
  • Poszukuję graczy wykonujących tę samą dokładną akcję lub strategię w trybie RTS. W Starcraft istnieją pewne rozkazy budowy, które mogą być prawie nie do pobicia, gdy są wykonywane przez bota.
  • Poszukuję graczy, którzy zgromadzili ogromne sumy zasobów i teraz bez końca szlifują jeden przedmiot. To był duży problem w Ultima Online.

Problem polega na tym, że im bardziej popularna jest Twoja gra, i im bardziej owocne boty mogą być w zmniejszaniu nudy w Twojej grze, tym bardziej prawdopodobne jest, że ludzie będą używać i tworzyć te boty. Ograniczanie prędkości ruchu myszy, dodawanie losowych odmian humanistycznych do kliknięć jest trywialne, nawet bot może popełniać błędy z ludzką prędkością, otwierając i zamykając części menu, naciskając niewłaściwy przycisk, a następnie zamykając okno, przełączając między klawiaturą i praca myszy jak ludzie w celu zmniejszenia zmęczenia dłoni. (nawet nie zdajesz sobie sprawy, że to robisz)

Tak więc ostatnim krokiem, gdy ktoś lub bot robi coś powtarzającego się przez bardzo długi czas, naprawdę musi być ludzki mod podchodzący do gracza i rozmawiający z nim. Jeśli tam są i odpowiadają ludzkimi odpowiedziami, są ludźmi. Zazwyczaj mody proszą gracza o zatrzymanie się na chwilę lub podążenie za nimi i wykonanie innych czynności, z czasem obręcze stają się bardziej złożone.

Tanget

Oczywiście, w końcu ktoś stworzy bota, który jest nie do odróżnienia od prawdziwej osoby, przechodząc test Turinga. Istnieje wielu twórców botów, którzy chcą to zrobić.

Ja sam bardzo fascynowałem się tym pomysłem, kiedy zacząłem programować i stworzyłem bezużyteczne boty dla Ultima Online, które stałyby w mieście i naśladowały NPC. Polecenia były bardzo proste, więc były łatwe do wykonania, wystarczyły naciskać klawisze, aby kroczyć w różnych kierunkach, a także obserwować dziennik czatu pod kątem własnej nazwy i przesyłać wiadomości do ALICE za pośrednictwem internetowej wersji AI. Nie pamiętam, który i prawdopodobnie już nie istnieje.

/Tangens

Chodzi o to, że musisz zdecydować, gdzie narysować linię. Jeśli nie możesz sobie pozwolić na armię moderatorów, aby rozmawiać z ludźmi, których twój system identyfikuje jako boty, prawdopodobnie lepiej jest pozwolić społeczności na oznaczanie ludzi jako botów, a następnie, gdy będzie wystarczająco dużo czasu, wykopać gracza na około godzinę. Nie ban, tylko kopnij. Prawdziwym problemem dla większości graczy jest to, że boty gromadzą zasoby, z których mogą korzystać inni gracze. Jeśli mobów jest mało, podobnie jak w przypadku Ragnarok Online, boty wędrujące i usuwające całe obszary wrogów podczas zbierania przedmiotów (lub nie) są powszechne i rujnują grę dla innych ludzi. Możesz więc w ten sposób zmniejszyć koszty armii administracyjnej.

Wreszcie możesz także żyć z botami jako rzeczywistością przestrzeni gry i zachęcać do ich używania. Wymaga to zaprojektowania gry pod kątem ewentualnego i powszechnego korzystania z botów, trenerów i programów pomocniczych. Chcę powiedzieć, że była MMO, która zrobiła to około 10 lat temu, ale nie pamiętam, która to była. Oznaczało to koniec gry, ponieważ MMO są ciężkie, co oznaczało, że 95% graczy, którzy w danym momencie oddaliliśmy się od ich klawiatur, zniszczyło społeczność. Jeśli wybierzesz tę trasę, bądź ostrożny.

DampeS8N
źródło
3
W ostatnim akapicie Gwiezdne Wojny SOE to przykład MMO z dość solidnym językiem skryptowym / makro w grze, ale nie miał większego problemu z botem. Ostatecznie stało się tak, że niektóre z bardziej żmudnych potrzeb w grze zostały napisane (większość portów kosmicznych miała kolejkę graczy przed na przykład w pełni zautomatyzowanym botem wzmacniającym uzdrowicieli), a szlifowanie XP na niskim poziomie było często wykonywane w ten sposób zbyt. IMO to wszystko masowo dodało do gry, co spowodowało, że były to bardzo złe decyzje i zmiany w grze, bez żadnego ostrzeżenia lub komunikacji.
GAThrawn
3

unikaj funkcji gier, z których użytkownik może wygrać, wykonując powtarzalne zadania , szczególnie w grach podobnych do przeglądarki. funkcje gry, które powodują powtarzalne zadania, nie tylko denerwują innych użytkowników, ponieważ nie mają czasu na ich wykonanie, ale także sprawiają, że gra jest łatwa do botowania (i znacznie mniej zabawy!)

Jeśli dana funkcja gry może być botowalna, to dlaczego w ogóle ta funkcja jest dostępna w grze? Ta funkcja wyraźnie wzywa użytkownika do zbudowania bota.

W grę należy grać, zapewniając graczowi rozsądną rozrywkę, zwykle poprzez zestaw nietrywialnych wyborów. Umiejętność decydowania w obliczu nietrywialnych wyborów oddziela człowieka od bota. Ostatecznie, zamiast szukać botów, wyszukaj w swojej grze, w której można zaimplementować bota, i zaimplementuj go samodzielnie, aby każdy mógł z niego korzystać. W ten sposób oszczędzasz czas graczowi, unikając wykonywania nudnych zadań, a jednocześnie walcząc z botami od podstaw: jeśli nie ma żadnych botnych funkcji w grze, w jaki sposób mogą istnieć boty?

Moje podstawowe zdanie: powiedziałbym, że istnieje minimalny poziom złożoności, której gra nie musi być botowalna. Ustaw swoją grę powyżej tego progu, dodając nietrywialne wybory, które ostatecznie poprawią wrażenia użytkownika.

W każdym razie może ten paradygmat nie ma już zastosowania w dzisiejszych czasach ... ale nadal uważam, że to jest dobra gra.

Jorge Leitao
źródło
1
+1 Jedynym skutecznym sposobem na oszustwo jest takie zaprojektowanie gry, aby oszustwo nie było skuteczne.
API-Beast,
Moje ostatnie zdanie było słuszne, ponieważ nikt mnie nie zdziwił, nawet nie wziął tego pod uwagę ...
Jorge Leitao,
2

Istniejące odpowiedzi są już dobre, ale chciałem zwrócić uwagę, że jeśli twoje kontrole są drogie (np. Uruchomienie całej gry po stronie serwera, aby upewnić się, że klient nie oszukuje), możesz zrobić tylko część czas .

Na przykład, możesz sprawdzać akcje tylko w określonym regionie lub przez poszczególnych graczy (losowo zmieniające się po pewnym czasie), lub po prostu mieć kolejkę akcji i losowo wybierać, które z nich sprawdzić (i ignorować inne). Może wymyślisz heurystykę, która prawdopodobnie będzie oszukiwać (w zasadzie szuka ludzi, którzy odnoszą największe sukcesy) i zweryfikuje swoje działania na serwerze.

Upewnij się, że serwer nie zdradza, kiedy sprawdza poprawność akcji, a kiedy nie. Zawsze wysyłaj swoją standardową odpowiedź, dopóki nie będziesz gotowy do podjęcia działania (i nie dawaj jej dłużej, wysyłając odpowiedź w trakcie sprawdzania poprawności, a gdy nie jesteś).

W ten sposób możesz uzyskać całkiem dobrą ochronę przed oszustwem, wykorzystując jedynie energię serwera, którą możesz zaoszczędzić (chociaż oczywiście im bliżej sprawdzania poprawności każdej akcji, tym lepsza ochrona przed oszustwem).

Przywróć Monikę
źródło
1

Cóż, nie sądzę, że istnieje „ostateczne rozwiązanie”. Możesz zakodować pakiety danych i podać serwerowi, który odbiera pakiety, pewne reguły. Na przykład możesz ustawić, że największy realistyczny / dozwolony ruch to +1, a nie oszust / haker, który ustawiłby go na 5 lub więcej, aby był szybszy. Pomyśl tylko o tym, co haker może zrobić, aby być lepszym od innych graczy i ustal dla niego reguły.

LaVolpe
źródło
0

Najprostszym sposobem jest uczynienie klienta głupim terminalem. Wszystko odbywa się na serwerze, a klient po prostu wysyła polecenia do serwera. W ten sposób serwer ma pełną kontrolę nad wszystkim.

Prawdopodobnie nie jest to jednak najbardziej odpowiedni przypadek, ponieważ serwer musi wykonać więcej obliczeń, a wrażenia użytkownika będą bezbłędne. Im więcej logiki pozostawiasz klientowi do wykonania, tym lepsze wrażenia użytkownika, ale tym mniej bezpieczeństwa. Musisz więc znaleźć środek, który będzie dla ciebie akceptowalny.

Ponadto wysyłaj klientowi tylko to, co „powinien” wiedzieć. Na przykład, jeśli wrogi gracz znajduje się za ścianą, nie wysyłaj tych informacji do klienta, w przeciwnym razie zhakowany klient będzie w stanie rozpoznać te informacje (czytaj: wallhack).

Wardd
źródło
-1

EDYCJA: Źle zrozumiałem pytanie. Zinterpretowałem to jako „zapobieganie piractwu / zhakowaniu klucza” zamiast „zhakowanego oprogramowania, które może wysłać wiadomość, aby wygenerować 1 miliard złota dla gracza”.

Większość gier ma obecnie wartość powiązaną z kontem w bazie danych, ponieważ wszystko, co klient może wysłać na serwer, można zmodyfikować. Jest to prawdopodobnie najprostsza i najskuteczniejsza metoda.

W związku z rozpowszechnieniem szybkiego Internetu i przesyłania plików P2P firmy przeszły z kluczy CD przechowywanych lokalnie na kliencie na klucze połączone z kontem na swoich serwerach. Nie ma już „oficjalnego” ani „nieoficjalnego” oprogramowania klienckiego, ponieważ każdy może pobrać klienta. Ale możesz grać tylko wtedy, gdy masz konto z dostępem do gry.

Ma to również korzyść dla firmy, ponieważ nie muszą wydawać tyle na tworzenie fizycznych kopii oprogramowania.

Orin MacGregor
źródło
Nie byłem tym, który cię przegłosował, ale dla mnie tak naprawdę nie zapewnia to żadnej ochrony. Wygląda na to, że mówisz tylko o zezwoleniu autoryzowanym użytkownikom na łączenie się - z tym łatwo sobie poradzić. Problem polega jednak na tym, że nie byłoby nic, co mogłoby powstrzymać kogoś z ważnym kontem, który odwrócił inżynierowanie wiadomości i napisał własnego włamanego klienta.
UpTheCreek
-1 to nie odpowiada na pytanie, posiadanie konta on-line nie uniemożliwia komuś połączenia się z zaatakowanym klientem, który na przykład automatyzuje działania w grze. Wow jest w całości oparty na Internecie i ciągle jest hakowany. aby zapobiec tej zamieci, wykorzystuje swoje „naczelne” oprogramowanie anty-cheat, które jest przykładem radzenia sobie z danym problemem
dreta,
Arg, masz rację. Źle zrozumiałem pytanie.
Orin MacGregor