Bezpieczne listy najlepszych wyników Online dla gier innych niż internetowe

Bawię się natywną (nie-internetową) grą dla jednego gracza, którą piszę, i okazało się, że posiadanie dziennej/tygodniowej/wszech czasów listy najlepszych wyników online (myślę, że ranking Xbox Live) uczyni grę o wiele ciekawszą, dodając trochę (małej) społeczności i konkurencji. Obawiam się jednak, że ludzie zobaczyliby taką funkcję, jak zaproszenie do hakowania, co zniechęciłoby zwykłych graczy ze względu na niemożliwie wysokie wyniki.

Myślałem o oczywistych sposobach zapobiegać takim próbom (na przykład szyfrowanie klucza publicznego/prywatnego), ale odkryłem dość proste sposoby, w jakie hakerzy mogą obejść wszystkie moje pomysły(wydobywanie klucza publicznego z binarnego i wysyłanie fałszywych zaszyfrowanych wyników, na przykład).

Czy kiedykolwiek wdrożyłeś listę najlepszych wyników online lub liderów? Czy znalazłeś sposób, w jaki można to zaimplementować? Jeśli tak, to jak to zrobiłeś? Jakie są Twoje doświadczenia z próbami hakowania?

Author: LKM, 2008-08-25

10 answers

W końcu polegasz na zaufaniu klientowi. Jeśli klient wysyła powtórki na serwer, łatwo jest odtworzyć lub zmodyfikować udaną rozgrywkę i wysłać ją na serwer.

Najlepszym rozwiązaniem jest podniesienie poprzeczki za oszukiwanie powyżej tego, co gracz uzna za warte pokonania. Aby to zrobić, istnieje wiele sprawdzonych (ale często nie wymienionych) technik, których możesz użyć:

  1. Zostaw oszustów na czarnej liście w honeypot. Mogą zobaczyć własne wyniki, ale nikt inny nie może. O ile nie zweryfikują, logując się na inne konto, uważają, że zhakowali twoją grę.
  2. Gdy ktoś zostanie oznaczony jako oszust, odrocz wszelkie reperkusje konta od pojawienia się do określonego punktu w przyszłości. Zrób to losowo, w ciągu jednego do trzech dni. Zazwyczaj oszust spróbuje wielu metod i w końcu się powiedzie. Odkładając informacje o stanie konta na późniejszy termin, nie rozumieją, co ich spotkało złapany.
  3. Przechwyć wszystkie polecenia użytkownika gry i wyślij je na serwer. Zweryfikuj je z innymi wynikami w danej delcie. Na przykład, jeśli gracz użył akcji strzelania 200 razy, ale uzyskał wynik 200 000, ale sąsiedzi gracze w grze strzelali 5000 razy, aby uzyskać wynik 210 000, może to wywołać próg oznaczający osobę do dalszego lub ludzkiego dochodzenia.
  4. Dodaj wartość i trwałość do swoich kont użytkowników. Jeśli Twoje konta użytkowników mają jeśli gra wymaga zakupu, waga blokady jest większa, ponieważ użytkownik nie może odzyskać poprzedniego statusu konta, po prostu tworząc nowe konto za pośrednictwem internetowego serwera proxy.
 39
Author: Michael Labbé,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 08:04:12

Żadne rozwiązanie nigdy nie będzie idealne, gdy gra działa na systemie pod kontrolą użytkownika, ale istnieje kilka kroków, które możesz podjąć, aby hakowanie systemu było bardziej kłopotliwe. W końcu celem może być tylko to, aby hakowanie systemu było bardziej kłopotliwe niż jest warte.

  • Wyślij dodatkowe informacje z żądaniami wysokiego wyniku, aby zweryfikować jedną stronę serwera. Jeśli otrzymasz 5 punktów za każde X, a gra zawiera tylko 10 Xs, to masz kilka dodatkowych obręczy do spraw, aby haker przeskoczył, aby uzyskać ich wynik zaakceptowany jako ważny.
  • niech serwer wyśle losowe wyzwanie, które musi zostać spełnione za pomocą kilku bajtów binarnych gry z tego przesunięcia. Oznacza to, że haker musi zachować nieskazitelną kopię pliku binarnego wokół (tylko trochę więcej kłopotów).
  • Jeśli masz klucze licencyjne, wymagaj wysokich wyników, aby je uwzględnić, dzięki czemu możesz zakazać osób przyłapanych na hakowaniu systemu. Umożliwia to również śledzenie nieprawidłowych prób zdefiniowanych powyżej, aby zablokować testowanie protokół przed kiedykolwiek nawet złożyć poprawny wynik.

W sumie jednak, uzyskanie gry wystarczająco popularne dla ludzi, aby dbać, aby włamać to prawdopodobnie znacznie większe wyzwanie.

 23
Author: Matt Sheppard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-25 13:28:20

Naprawdę nie sądzę, żeby to było możliwe.

Zrobiłem to przed użyciem dość prostego szyfrowania klucza ze skompresowanym binarnym, który działał wystarczająco dobrze dla bezpieczeństwa wymaganego, ale szczerze myślę, że jeśli ktoś rozważa złamanie tabeli wyników online włamać to będzie zrobione.

Są dość smutni ludzie, którzy również są całkiem bystrzy, chyba że możesz ich wszystkich przelecieć, to przegrana sprawa.

 6
Author: sparkes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-25 13:17:44

Jeśli Twoja gra ma wbudowany system powtórek, możesz przesłać powtórki na serwer i zlecić serwerowi obliczenie wyniku z powtórki.

Ta metoda nie jest idealna, nadal możesz oszukiwać spowalniając grę (jeśli jest oparta na akcji) lub pisząc bota.

 5
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 00:00:52

Trochę tego robiłem z moimi grami Flash, i to jest przegrana bitwa naprawdę. Szczególnie w przypadku języka ActionScript, który można bez większego wysiłku dekompilować w nieco czytelny kod.

Sposób, w jaki to robię, jest raczej konwencjonalnym podejściem do wysyłania wyniku i nazwy gracza w zwykłym tekście, a następnie hash z dwóch (odpowiednio solone). Bardzo niewielu ludzi jest na tyle zdeterminowanych, aby podjąć wysiłek, aby to rozgryźć, a nieliczni, którzy są, i tak by to zrobili, negując wszystkie czas na to.

Podsumowując, moją filozofią jest poświęcenie czasu na ulepszanie gry i po prostu utrudnianie oszukiwania.

Jedną z rzeczy, która może być dość skuteczna, jest to, aby gra przesłała wynik na serwer kilka razy w trakcie gry, wysyłając za każdym razem trochę informacji o rozgrywce, co pozwala potwierdzić, czy wynik jest "realistyczny". Ale to może być trochę przesadzone.

 5
Author: grapefrukt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-15 21:46:29

To naprawdę trudne pytanie.

Nigdy nie zaimplementowałem czegoś takiego, ale oto prosta aproksymacja.

Twoim głównym zmartwieniem jest to, że hakerzy zgadują, co robi Twoja aplikacja, a następnie wysyłają własne wyniki.

Cóż, po pierwsze, jeśli Twoja aplikacja nie przyniesie wielkiego sukcesu, Nie będę się martwić. Robienie takich rzeczy jest niezwykle trudne.

Szyfrowanie nie pomoże w rozwiązaniu problemu. Widzisz, szyfrowanie pomaga chronić dane po drodze, ale nie chroni żadnej ze stron transakcji przed zaszyfrowaniem danych (gdzie może być główna Luka). Więc jeśli zaszyfrujesz sure, dane pozostaną prywatne, ale nie będą bezpieczne.

Jeśli naprawdę się tym martwisz, zasugeruję zaciemnienie kodu i zaprojektowanie systemu punktacji w sposób nie do końca oczywisty, co robi. Tutaj możemy pożyczyć kilka rzeczy z protokołu szyfrowania. Oto przykład:

  1. powiedzmy, że wynik to jakaś liczba m
  2. Oblicz jakiś rodzaj kontroli nad wynikiem (na przykład CRC lub inny system, który widzisz. W rzeczywistości, jeśli po prostu wymyślić jeden, bez względu na to, jak kiepski jest to będzie działać lepiej)
  3. uzyskaj klucz prywatny użytkownika (D) ze zdalnego serwera (oczywiście przez bezpieczne połączenie). Tylko Ty znasz ten klucz.
  4. Oblicz X = M^D mod n (N jest modułem publicznym twojego algorytmu klucza publicznego / prywatnego) (czyli zaszyfruj go : P)

Jak widzisz, to tylko zaciemnienie innego rodzaju. Możesz tam iść tak długo, jak chcesz. Na przykład możesz wyszukać dwie najbliższe liczby pierwsze do X i użyć ich do zaszyfrowania CRC i wysłania go również na serwer, więc będziesz mieć CRC i wynik osobno i z różnymi schematami szyfrowania.

Jeśli użyjesz tego w połączeniu z zaciemnieniem, powiedziałbym, że byłoby to trudne do zhakowania. Nie bez znaczenia nawet to, co można odwrócić, wszystko zależy na zainteresowanie i możliwości hakera, ale ... poważnie, co za świr tyle wysiłku poświęca, by zmienić swoje wyniki w grze? (Chyba że jest WoW czy coś)

Ostatnia nuta

Obfuscator for. net

Obfuscator dla Delphi / C++

Obfuscator for assembler (x86)

 3
Author: Jorge Córdoba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-25 14:01:15

Jak mówi druga odpowiedź, jesteś zmuszony zaufać potencjalnie złośliwemu klientowi, A prosty odstraszacz plus mały ludzki monitoring będzie wystarczający do małej gry.

Jeśli chcesz nabrać fantazji, to musisz poszukać wzorców oszustw w danych wyników. Im więcej stanu klient komunikuje się na twoim serwerze, tym potencjalnie łatwiej jest znaleźć wzór poprawnego lub nieprawidłowego zachowania za pomocą kodu. Na przykład. powiedzmy, że klient musiał przesłać dziennik kontroli oparty na czasie z wynikiem (który może być również używany, aby pozwolić innym klientom oglądać najlepsze gry), serwer może następnie sprawdzić, czy Dziennik wyników łamie którąkolwiek z zasad gry.

W końcu, nadal chodzi o uczynienie go wystarczająco kosztownym, aby zniechęcić do oszukiwania tablicy wyników. Chciałbyś system, w którym zawsze możesz ulepszyć (łatwiejsze do aktualizacji)kod serwera, aby poradzić sobie z nowymi atakami na Twój system walidacji.

 2
Author: Ari Pernick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-25 13:36:01

@Martin.

Tak chyba działa Mario Kart Wii. Dodatkowym bonusem jest to, że możesz pozwolić innym graczom obserwować, jak posiadacz wysokiego wyniku uzyskał wysoki wynik. Zabawne jest to, że jeśli sprawdzisz najszybszą trasę czasową" Grumble Volcano ", zobaczysz, że ktoś znalazł skrót, który pozwoli Ci ominąć 95% trasy. Nie jestem pewien, czy nadal mają to za najszybszy czas.

 2
Author: Kibbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 00:36:18

Nie można tego zrobić na niezaufanej platformie klienta. W praktyce możliwe jest pokonanie nawet niektórych "zaufanych" platform.

Istnieją różne ataki, których nie da się wykryć w ogólnym przypadku - głównie modyfikujące zmienne w pamięci. Jeśli nie możesz ufać zmiennym własnego programu, nie możesz naprawdę wiele osiągnąć.

Inne techniki opisane powyżej mogą pomóc, ale nie rozwiązują podstawowego problemu uruchamiania na niezaufanej platformie.


Out of interest, czy jesteś pewien, że ludzie będą próbować włamać wysokiej tabeli wyników? Mam grę online od ponad dwóch lat z trywialnie-crackabe tabeli wysoki wynik. Wiele osób grało w to, ale nie mam dowodów, że ktoś próbował złamać wysokie wyniki.

 2
Author: MarkR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 08:15:04

Zazwyczaj największym obrońcą przed oszustwami i hakerami jest community watch. Jeśli wynik wydaje się raczej podejrzany, użytkownik może zgłosić wynik za oszustwo. A jeśli wystarczająco dużo osób zgłosi ten wynik, powtórka może zostać sprawdzona przez administratorów pod kątem ważności. Dość łatwo jest dostrzec różnicę między botem a rzeczywistym graczem, jeśli istnieje już grupa graczy grających w grę w pełni legalną.

Admini muszą nadzorować tylko te wyniki, które są kwestionowane, bo tam jest mała szansa, że grupa użytkowników może bandwagon usunąć doskonale ciężko zarobiony wynik. A administratorzy muszą tylko zobaczyć kilka wyników, które zostaną zgłoszone, więc nie jest to zbyt dużo czasu, tym bardziej, że na małą grę.

Nawet sama świadomość, że jeśli ciężko pracujesz, aby zrobić bota, po prostu zostać zestrzelonym przez system raportowania, jest odstraszająca sama w sobie.

Być może nawet szyfrowanie danych powtórek też by nie zaszkodziło. Dane powtórkowe są często małe, a szyfrowanie ich nie zajmowałoby to dużo więcej miejsca. Aby to poprawić, serwer sam wypróbował powtórkę za pomocą dziennika kontroli i upewnił się, że pasuje do uzyskanego wyniku.

Jeśli jest coś, czego system anti-cheat nie może znaleźć, użytkownicy go znajdą.

 1
Author: James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-23 02:31:33