2013-03-14 15 views
5

Tworzę grę w C++ 11, w której wyniki są wysyłane na serwer. Przechowuję wynik jako zwykły float, więc osoby korzystające z oprogramowania, takiego jak Cheat Engine, mogą z łatwością zmienić wartość wyniku przed jego wysłaniem na serwer.Ochrona gier za pomocą skanerów pamięci (takich jak Cheat Engine)

Jak mogę chronić swoją grę przed tego rodzaju atakami?

+0

Nie możesz. Musisz zweryfikować dane przesyłane do serwera po stronie serwera. – meagar

+0

Wysyłaj solone hash w tym samym czasie ... –

Odpowiedz

8

Istnieje wiele opcji, które można zrobić, ale najlepiej jest nie akceptować żadnych ważnych wartości od klienta. Niech serwer wykona wszystkie obliczenia i wyśle ​​wartości do klienta.

+0

To nie zawsze jest opcja. – supertonsky

+0

@supertonsky Jak to? Nie mogę wymyślić ani jednej gry, która tego nie robi. – Caesar

+0

Istnieje kilka gier, które wykonują swoje obliczenia na kliencie, ale bez względu na to, co zrobię z grą przy użyciu mechanizmu oszustwa, nie mogę po prostu zhakować gry. Z jakiegoś powodu nie mogłem uzyskać dostępu do pamięci. Teraz to jest coś. Cokolwiek to jest, jest genialne. Istnieje kilka gier, do których można uzyskać dostęp do pamięci, ale gdy już uzyska się adres, "zmienna" wydaje się nadal zmieniać adres pamięci, co w zasadzie powoduje, że aplikacje takie jak cheat engine są bezużyteczne. – supertonsky

2

Szyfruj wszystkie ważne dane (lub wszystkie dane, jeśli to możliwe), jeśli musisz zrobić coś po stronie klienta.

Są szanse, że lepiej będzie, aby serwer obliczył coś ważnego. Na przykład w Call of Duty chcesz, aby serwer zdecydował, kto zostanie postrzelony, aby komputery/opóźnienia poszczególnych graczy/etc. nie angażuje się.

Jeśli grasz tylko na komputerze lokalnym i chcesz tylko przesłać wyniki na koniec, obliczenia serwera nie są opcją. W takim przypadku musisz po prostu trzymać się szyfrowania i ukrywać ważne wartości w pierwszej kolejności. Jest tylko tyle, ile możesz zrobić; Prawdopodobnie nigdy nie będzie kuloodporne, jeśli zostanie obliczona 100% strona klienta.

+1

I oczekuję, że mógłbyś to zrobić bez posiadania klucza szyfrowania na kliencie? ;) –

+1

Wyrafinowany użytkownik może wyodrębnić klucz szyfrowania i użyć go do zaszyfrowania dowolnego wyniku, jaki chce wysłać do serwera –

3

Naprawdę nie ma możliwości, aby ZACHOWAĆ, że wartość nie zostanie zmieniona. Co możesz zrobić, to wysłać wystarczającą ilość informacji do serwera, aby mógł określić "jest to możliwe" - na przykład, jeśli twoja gra jest grą w stylu "Pac-Man", możesz również dostarczyć wszystkie "Bloby", które Pac- Człowiek jadł, lub liczba na poziom i czas potrzebny na ukończenie każdego poziomu itp. Nie jest NIEMOŻLIWE, aby oszust mógł odtworzyć wszystkie dodatkowe potrzebne dane, ale znacznie utrudnia to, jeśli wysyłasz więcej danych przez .

Jednak wszelkie dane dostępne w dowolnym momencie w oprogramowaniu mogą być modyfikowane przez aplikację typu "debugger". Nic nie możesz na to poradzić.

0

Jeśli jest to gra wieloosobowa, to w teorii można zastosować algorytm, w którym serwer żąda odpowiedzi na konkretne pytania od przypadkowej grupy użytkowników. Oszuści otrzymają różne odpowiedzi bez poważnej zmowy.

Jeśli w grze takiej jak Call of Duty, możesz mieć 30 graczy i potrzebujesz super-większości, aby zgodzić się na to, czy doszło do zabójstwa. W ten sposób żaden pojedynczy zespół nie może oszukiwać metodami zmowy. Nadal będziesz musiał uważać na konta alternatywne używane do wejścia na planszę liderów.

Powiązane problemy