Jakie są sposoby zapobiegania oszustwom lub ograniczenia ich w grach online dla wielu graczy? [Zamknięte]

19

Punkbuster istnieje tylko po to, by zapobiegać oszukiwaniu, a jednak oszukiwanie jest powszechne w grach obsługujących punkbuster. Modern Warefare 2 jest poważnie zablokowany przed użytkownikiem końcowym prowadzącym własny serwer lub wprowadzającym modyfikacje, a oszustwo odbywa się nieustannie.

W przypadku gry wieloosobowej, w której każdy klient działa na komputerze, co można zrobić, aby ograniczyć lub wyeliminować oszustwo?

kevin42
źródło
1
To nie jest kompletna odpowiedź sama w sobie, więc nie wymienię jej jako jednej, ale jeśli dodasz pewną wartość do konta gracza oprócz tradycyjnych metod anty-cheat, uważam, że to może pomóc. Na przykład, jeśli nowi gracze zostaną przeniesieni na serwery „noob”, dopóki nie zdobędą wystarczającego doświadczenia, aby uzyskać dostęp do reszty gry, utrudnia to hakerów ponowne wyrównywanie konta po każdorazowym zbanowaniu. Prawdopodobnie jest jeszcze kilku hakerów, którzy mogą to ominąć, ale zabezpieczenie konta / serwerów kojarzeń jest znacznie łatwiejsze niż zabezpieczenie klientów.
Lewis Wakeford,

Odpowiedzi:

18

To zależy od tego, jak oszukują, skupiając się na jednym z podstawowych sposobów tworzenia kodów, innych procesach zaczepiających się w twoją aplikację i modyfikujących ją - możesz wyliczyć wszystkie inne procesy i zaczepić ich metody manipulacji pamięcią oraz ich emulację klawiatury / myszy metody

Wallhacki są zwykle pisane przez wstrzykiwanie kodu między twoim procesem a bibliotekami DirectX / GL, aby ustawić przezroczystość materiałów, aby były widoczne. Możesz dodać trochę kodu do swojego scenegraph / culling system, aby nie rysować innych graczy / użytecznych bytów, jeśli są za murami (aby zapobiec oszukiwaniu w ten sposób).

Jeśli wybierasz grę wieloosobową i chcesz zapobiec modyfikowaniu pakietów między klientem / serwerem, wówczas utworzenie sumy kontrolnej danych, które wysyłasz za pomocą własnego algorytmu, i sprawdzenie tego, jak przechodzi przez drugą stronę, może być skuteczne. (Prawdopodobnie i tak to zrobisz dla różnych celów kontroli jakości).

To samo dotyczy większości zasobów w pamięci, tworząc sumę kontrolną na początku ramki i weryfikując ją na różnych etapach, można uzyskać całkiem przydatne wykrywanie manipulacji pamięcią.

Jest to dość zaangażowany temat, ale mam nadzieję, że ustawia cię w niejasnym kierunku.

Rob Ashton
źródło
Lub nawet lepiej niż ukrywanie obiektów za ścianami (które wciąż mogą zostać zhakowane), w ogóle nie dając klientowi informacji o lokalizacji tego gracza (lub tylko tej, która jest potrzebna np. Do uzyskania dobrze brzmiącego efektu 3D)
Bart van Heukelom
17

W najbardziej ekstremalnym rozwiązaniu w zasadzie nigdy nie ufasz klientowi. W przypadku gier takich jak MMO użytkownicy nie uruchamiają swoich serwerów, a logika rozgrywki jest obsługiwana po stronie serwera. Nigdy nie udzielaj klientowi uprawnień do powiedzenia „Mam X zdrowia” lub „Mam X amunicji” itp.

Tetrad
źródło
4
To świetnie, jeśli faktycznie masz zasoby do uruchomienia serwera dedykowanego, ale jest to dość uproszczony sposób patrzenia na niego. Najprawdopodobniej nadal robiłbyś dużo logiki na klientach i minimalny podzbiór logiki na serwerze, z okazjonalną synchronizacją w celu egzekwowania podstawowych reguł. To również nie koniecznie zapobiec przed wszystkimi kody po stronie klienta jak manipulacji wallhacks / pamięci oszukać klienta do ujawnienia przydatnych informacji / etc
Rob Ashton
10

Jeśli masz system, w którym logika jest droga i musi być wykonywana głównie na kliencie, aby oszczędzać cykle serwera, możesz wdrożyć probabilistyczny system wykrywania oszustw. Co kilka minut wybiera kilku różnych graczy do dokładnej inspekcji i kontroli spójności na serwerze. Ponieważ oszuści rzadko ograniczają oszustwo do krótkich i rzadkich okresów, w końcu zostaną złapani.

Kolejną zaletą tego jest to, że nie będą mieli szybkiego cyklu rozwoju - jeśli serwer potrzebuje 10 godzin gry, aby zwrócić na ciebie uwagę, to jest to 10-godzinny cykl zmian za każdym razem, gdy chcesz zobaczyć jeśli coś zadziałało. A jeśli to nie praca, to nawet dłużej, bo nie będzie wiedział, czy serwer został im dany thumbs-up lub po prostu nie ma zdobyć wokół nich.

ZorbaTHut
źródło
+1 Pod względem wydajności takie stochastyczne podejścia są jedyną realistyczną odpowiedzią na szersze problemy, IMO. Oprócz OnLive, to znaczy, jeśli celujesz tylko w USA.
Inżynier
5

Istnieje również wiele rodzajów hacków wspomagających celowanie dla strzelanek FPS, które działają również poprzez dołączanie do wywołań biblioteki graficznej. Hak OGC do Counter-Strike / HL1 miał wiele opcji poza tym, że ściany były przezroczyste.

Jeśli informacje o lokalizacji wrogów zostaną w pewnym momencie przekazane do biblioteki niższego poziomu, która ma szeroko dostępny kod, połączenia te można podłączyć, a dane dotyczące lokalizacji, skali, obrotu itp. Można wykorzystać do dokładnego obliczenia najlepszego wektora do odpalenia na tego wroga. Systemy anty-cheatowe, takie jak PunkBuster, często zawierają wykrywanie typu heurystycznego (jak często ten gracz dostaje idealne ujęcie, jak często obracają się o 180 stopni, aby zabić jednym strzałem itp.) Oprócz monitorowania pamięci i procesu.

Ostatecznie zadaniem zapobiegania oszustwom w grach wieloosobowych jest gra w kotka i myszkę. W miarę opracowywania nowych cheatów tworzone są nowe metody anty-cheatowe, a następnie tworzone są nowe cheaty w celu uniknięcia nowych technologii anty-cheat.

Jak powiedział Tetrad w swojej odpowiedzi, jedynymi twardymi i szybkimi zasadami „bezpieczeństwa gry” jest dostarczanie klientowi możliwie jak najmniej informacji i jak najmniejsze zaufanie do niego. Różne typy gier będą miały różne wymagania, które mogą mieć wpływ na to, jak dobrze będziesz przestrzegać tych zasad.

W grze FPS, ponieważ szybkość rozgrywki jest tak szybka, często nie jest możliwe podanie klientowi tylko danych, które powinien wiedzieć o tej właśnie chwili. Jeśli nie powiesz klientowi, że za rogiem jest wróg, a gracz rzuci się za ten narożnik, nagle musisz wysłać mu te informacje w ciągu milisekund lub ryzykować, że gracz zostanie zabity przez wroga, którego nie zrobił kiedykolwiek zobaczysz.

Jedyną „poprawką” dla tych problemów, która jest obecnie dostępna, jest prawdopodobnie OnLive. Ponieważ ta usługa dostarcza tylko treści audio i wideo od klienta działającego bezpiecznie w centrum danych, jedynym sposobem oszukiwania byłoby stworzenie ludzkiej sztucznej inteligencji, która mogłaby analizować przychodzący strumień wideo i podjąć działania w oparciu o to - zadanie, które niewielu, jeśli w ogóle, oszustów.

Charles Ellis
źródło
3

Wszystkie powyższe odpowiedzi są świetne, ale dodam kolejny kawałek:

Niektóre gry mają bardzo solidną funkcję odtwarzania, która pozwala zapisać powtórkę każdej gry po jej zakończeniu w kompaktowym formacie i oglądać ją na różne sposoby - różne perspektywy gracza, interfejs statystyk w czasie rzeczywistym i tak dalej.

Przykład, który znam bardzo dobrze: Starcraft 2. Jednym ze sposobów, w jaki Blizzard blokuje hakerów, jest otrzymywanie dowodów oszustwa podczas powtórki gry.

Przykładem użycia w FPS może być: jeśli grałeś w grę i podejrzewasz, że druga osoba oszukiwała za pomocą hakowania do ściany, oglądasz powtórkę, a potem widzisz, że w swojej normalnej wizji powtórek nie mógł widziałem cię i rzucasz granatem za róg, czy cokolwiek innego.

Następnie zgłaszasz mu powtórkę, a jeśli dowody przeciwko niemu są wystarczające, zostaje zbanowany. O ile mi wiadomo, firmy, które robią te rzeczy, zbierają tylko poważne dowody lub wiele źródeł dowodów tego samego zachowania przed banowaniem.

Nie jest to więc technika zapobiegająca debugowaniu, to system raportów użytkownika, który umożliwia wygodny dowód oszustwa z pomocą człowieka.

SirKnigget
źródło
0

To może nie być pełna odpowiedź, ale mam tu pewien wkład. Jednym z najlepszych sposobów zapobiegania oszustwom jest zaciemnianie lub używanie C / C ++. Zapobiega to modyfikowaniu kodu klienta.

LiquidFeline
źródło
Warto wspomnieć, że istnieje wiele deobfuscatorów. Również gry .Net (C #, XNA) można modyfikować za pomocą Reflection. Z tego co wiem, myślę, że C / C ++ jest naprawdę jednym ze sposobów na utrudnienie manipulacji kodem.
user1306322
Tak. Chodzi mi o to, że zaciemnianie uniemożliwia odczytanie łatwo dekompilowanego kodu, a kompilacja C / C ++ nie jest łatwa, oba są dobrymi opcjami.
LiquidFeline
Ponadto, jeśli często aktualizujesz grę i zmieniasz binarne przesunięcia w pliku wykonywalnym lub wstawisz losowe NOP, żaden hack nie przetrwa wystarczająco długo ...
SirKnigget
@CPP_Person: W rzeczywistości C jest bardzo znany z tego, że jest bardzo łatwy do skompilowania. Jest to zupełnie inna sprawa dla C ++, który jest rzeczywiście dość złożonym językiem z perspektywy kompilatorów. Nie rozumiem jednak, dlaczego powinno to mieć znaczenie, jak łatwo jest skompilować określony język programowania - chcesz uniemożliwić ludziom pisanie oszukiwaczy, a nie napisanie dobrego kompilatora - i tak użyliby istniejącego kompilatora C ++ - dzięki czemu trudna dekompilacja wydaje mi się o wiele bardziej interesująca niż utrudnienie kompilacji.
Kaiserludi