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!
networking
multiplayer
security
UpTheCreek
źródło
źródło
Odpowiedzi:
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.
źródło
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ć.
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)
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ę.
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
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
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.
źródło
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:
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
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.
źródło
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.
źródło
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).
źródło
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.
źródło
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).
źródło
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.
źródło