2013-03-14 6 views
5

Ich mache ein C++ 11-Spiel, bei dem Punkte auf den Server gesendet werden. Ich speichere den Punktestand als einfachen Gleitkommawert, sodass Benutzer, die Software wie Cheat Engine verwenden, den Wert des Punktestands leicht ändern können, bevor sie an den Server gesendet werden.Schutz von Spielen vor Speicherscannern (wie Cheat Engine)

Wie kann ich mein Spiel gegen diese Art von Angriffen schützen?

+0

Sie können nicht. Sie müssen die Daten überprüfen, die serverseitig an den Server gesendet werden. – meagar

+0

Senden Sie gleichzeitig einen gesalzenen Hash ... –

Antwort

8

Es gibt viele Optionen, die Sie tun können, aber das Beste ist, um keine wichtigen Werte vom Client übernehmen. Lassen Sie den Server alle Berechnungen durchführen und senden Sie die Werte an den Client.

+0

Dies ist nicht immer eine Option. – supertonsky

+0

@supertonsky Wie so? Ich kann mir kein einziges Spiel vorstellen, das das nicht tut. – Caesar

+0

Es gibt einige Spiele, die ihre Berechnung auf dem Client durchführen, aber egal was ich mit dem Spiel mit einer Cheat-Engine mache, ich kann das Spiel nicht einfach hacken. Aus irgendeinem Grund konnte ich nicht auf den Speicher zugreifen. Das ist etwas. Was auch immer das ist, es ist brillant. Es gibt einige Spiele, die Sie auf den Speicher zugreifen können, aber sobald Sie die Adresse erhalten, scheint die "Variable" die Speicheradresse ständig zu ändern, was Apps wie die Cheat-Engine im Grunde unbrauchbar macht. – supertonsky

2

verschlüsselt alle Daten, die Sie interessieren (oder alle Daten, wenn möglich), wenn Sie etwas auf der Client-Seite in erster Linie zu tun haben.

Wahrscheinlich ist es besser, wenn der Server etwas Wichtiges berechnet. In Call of Duty beispielsweise möchten Sie, dass der Server entscheidet, wer angeschossen wird, so dass Computer/Latenz/etc. sich nicht einmischen.

Wenn Sie einen lokalen PC-Spiel nur tun und wollen nur Noten am Ende laden, sind Server Berechnungen keine Option. In diesem Fall müssen Sie wirklich nur bei der Verschlüsselung bleiben und die wichtigen Werte verschleiern. Es gibt nur so viel, was du tun kannst; Es wird wahrscheinlich nie kugelsicher sein, wenn es zu 100% auf Kundenseite berechnet wird.

+1

Und ich nehme an, Sie könnten das tun, ohne einen Verschlüsselungsschlüssel auf dem Client zu haben? ;) –

+1

Ein erfahrener Benutzer könnte den Verschlüsselungsschlüssel extrahieren und ihn zum Verschlüsseln der Punkte verwenden, die er an den Server senden möchte –

3

Es gibt wirklich keine Möglichkeit, dass Sie sicherstellen können, dass der Wert nicht manipuliert wird. Was Sie tun könnten, ist ausreichende Informationen an den Server zu senden, dass er feststellen kann, "ist das möglich" - zum Beispiel, wenn Ihr Spiel ein "Pac-Man" -Spiel ist, könnten Sie auch alle "Blobs" zur Verfügung stellen. Man aß, oder die Anzahl pro Level und die Zeit, die es brauchte, um jedes Level zu beenden, etc. Es ist NICHT UNMÖGLICH, dass ein Betrüger alle zusätzlichen Daten reproduzieren kann, aber es macht es viel schwieriger, dies zu tun, wenn mehr Daten gesendet werden .

Aber alle Daten, die jederzeit in der Software zur Verfügung unterliegen durch eine „Debugger“ Typs Anwendung modifiziert werden. Du kannst nichts dagegen tun.

0

Wenn es Massively Multiplayer ist, dann in der Theorie, können Sie einig Algorithmus, wo der Server Antworten auf spezifische Fragen aus einer zufälligen Gruppe von Benutzern anfordert. Ein Betrüger erhält verschiedene Antworten ohne größere Absprachen.

Wenn in einem Spiel wie Call of Duty, könnten Sie 30 Spieler und eine Super-Mehrheit zustimmen müssen, wenn ein Kill passiert ist. Auf diese Weise konnte kein einzelnes Team durch Kollusionsmethoden betrügen. Sie müssen immer noch nach alternativen Accounts Ausschau halten, die verwendet werden, um eine Rangliste zu erklimmen.

Verwandte Themen