Sicherstellen, dass gespeicherte Daten in einem Spiel mit Offline- und Online-Komponenten nicht bearbeitet wurden


8

Ich bin in der Vorplanungsphase, um ein Spieldesign zu entwickeln, und ich habe mich gefragt, ob es einen vernünftigen Weg gibt, Leute davon abzuhalten, Spielstände in einem Spiel mit Offline- und Online-Komponenten zu bearbeiten.

Die Offline-Komponente würde es dem Spieler ermöglichen, das Spiel durchzuspielen, und die Online-Komponente würde es ihnen ermöglichen, gegen andere Spieler zu spielen. Daher müsste ich sicherstellen, dass die Leute den Quellcode nicht bearbeitet / Dateien gespeichert haben, während sie offline sind, um einen Vorteil zu erzielen während online.

Das Spiel wird wahrscheinlich entweder in .Net oder Java entwickelt, die beide leider leicht zu dekompilieren sind.

Antworten:


10

Die einfache Dekompilierung / Rückentwicklung des Client-Codes ist eigentlich nur ein kleines Hindernis. Unternehmerische Hacker haben jahrelang ausführbare Dateien nach ihrem Willen (böswillig und nicht böswillig) gebogen, bevor hochrangige, trivial zu dekompilierende Sprachen wie C # auf den Markt kamen. Sicherheit durch Dunkelheit allein ist überhaupt keine Sicherheit.

Alle Daten auf dem Computer des Benutzers (Code oder reguläre Asset-Daten) sind im Wesentlichen bereits gefährdet. Sie können sich nicht wirklich davor schützen - wenn Sie nicht möchten, dass Benutzer Daten bearbeiten, legen Sie sie nicht auf ihrem Computer ab, sondern speichern Sie sie auf Ihren Servern. Wenn Sie nicht möchten, dass sie den Code im Client ändern, stellen Sie sicher, dass der Client keine Kontrolle über nützliche Funktionen hat.

Wenn dies keine Option ist (zum Beispiel ist Ihr Multiplayer vollständig Peer-to-Peer), können Sie beispielsweise Hashes der relevanten Assets berechnen und nur zulassen, dass Personen miteinander spielen, wenn die Hashes übereinstimmen. Ja, jemand könnte die ausführbare Datei sorgfältig so bearbeiten, dass sie einen anderen Hash zurückgibt. Dies sollte jedoch nur bedeuten, dass der betreffende Spieler relativ schnell desynchronisiert und vom Spiel getrennt wird, da sein Vermögen nicht mit dem Rest des Spiels übereinstimmt die Spieler'.

Sie können auch einen Test vom Typ "Mehrheitsregeln" verwenden, mit dem Sie Spieler trennen können, deren Simulation nicht mehr mit anderen Spielern synchronisiert ist, und dem "Host" -Spieler (der das Spiel gestartet hat) die entscheidende Stimme geben.


3

Wenn die Daten alle clientseitig generiert werden, können Sie nichts dagegen tun. Sie können den Unterschied zwischen einer von Ihrer Software vorgenommenen Bearbeitung und einer von jemandem oder etwas anderem vorgenommenen Bearbeitung, die vorgibt, Ihre Software zu sein, nicht erkennen.

Eine Abschreckung, die Sie versuchen können, ist das Verschlüsseln der Sicherungsdatei mit einem Schlüssel in der Software. Wenn der Benutzer gut genug ist, um eine Sicherungsdatei zu bearbeiten, ist er leider auch gut genug, um den Schlüssel in Ihrer Software zu finden.

Sie können die Bearbeitung der Speicherungen verhindern, indem Sie sie nicht auf dem Computer des Clients speichern, z. indem Sie sie auf den Server hochladen - aber das hindert sie nicht daran, einen gehackten Save hochzuladen! Online-Spiele lösen dieses Problem, indem sie den autorisierenden Spielstatus ständig auf ihrem Server behalten. Dies funktioniert jedoch nicht für Ihren Offline-Modus.

Die Antwort lautet also wirklich nein - alles, was Ihr Spiel tun kann, um die Daten zu bearbeiten, zu verschleiern oder zu verschlüsseln, kann auch von einem Hacker ausgeführt werden.


Mir ist klar, dass dies so ziemlich das ist, was Josh bereits gesagt hat, aber ich hatte einen Internetausfall und konnte dies vor 30 m nicht posten, als ich es zum ersten Mal tippte!
Kylotan

1

Als wir gerade mit der Entwicklung unseres aktuellen Spiels begannen, wollten auch wir den Offline-Spielmodus haben. Die Idee war, die Spieler offline durch die Spielebenen spielen zu lassen und dann ihren Fortschritt irgendwie zu synchronisieren, wenn sie online gehen. Also haben wir lange und intensiv darüber nachgedacht, wie wir Betrug verhindern können. Das Fazit war: Wir können nicht. Es gibt wirklich KEINE Möglichkeit, Spieler offline spielen zu lassen und 100% sicher zu sein, dass sie nicht betrogen haben.


1

Eine einfache Lösung für das Herunterladen von Dateien ist das Hashing. Hash die Sicherungsdatei und speichere diesen "Fingerabdruck" irgendwo. Wenn Sie es laden, hashen Sie die Datei und vergleichen Sie sie mit dem Fingerabdruck. Wenn sie nicht übereinstimmen, wurde die Datei geändert.

Wenn jemand Ihren Code dekompiliert, können Sie natürlich nichts tun. Für diese Antwort bedeutet dies, dass sie auch den Hash der geänderten Sicherungsdatei speichern können.

Eine andere Möglichkeit wäre, den Fingerabdruck an einen Server zu senden, auf dem der Endbenutzer ihn nicht manuell ändern kann, wenn er die Sicherungsdatei geändert hat. Dies ähnelt der Vorgehensweise von iTunes beim Wiederherstellen von iPhone-Bildern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.