Hallo,
Nach langer Abwesenheit habe ich mal wieder den Weg zurück zur Spieleprogrammierung und diesem Forum gefunden
Ich bin gerade dabei ein neues Hobbyprojekt zu planen und stehe vor dem Problem eines einfachen manipulationssicheren online Highscores.
Nehmen wir einfach mal an, es soll nur die Punktzahl und ein Name am Ende einer Runde zum Server geschickt werden und dort gespeichert werden. Dann ist es ja absolut kein Problem einfach während des Spiels auf den Speicher zuzugreifen und seine erreichte Punktezahl zu ändern, ohne, dass das Spiel dies mitbekommt (wenn keine Vorkehrungen getroffen wurden).
Mir sind jetzt drei Lösungen für das Problem eingefallen, mit denen ich aber nicht wirklich zufrieden bin:
1. Client-Server-Architektur: Nur Anfragen an den Server schicken, und alles dort überprüfen lassen. Für den Multiplayermodus möglicherweise akzeptabel, für Singeplayer aber eigentlich nicht, da dann 1. immer eine Internetanbindung vorhanden sein muss, 2. der server unnötig belastet wird.
2. Anlegen eines logs (Replay) der einzelnen Events im game, welches am Ende mitübertragen wird und welches dann nochvollzogen werden kann um die Punktzahl zu berechnen. Die Replaymöglichkeit wäre eigentlich ein nettes Nebenprodukt, trotzdem bedeutet auch das viel Arbeit und ich habe noch keine Vorstellung davon, wie groß ein solches Replay werden könnte. Die Übertragung zum Server könnte lange dauern.
3. Verschleierung des Punktwertes, bzw. alternative Speicherung. Beispielsweise die angezeigte Punktzahl immer aus einem div+mod wert berechnen lassen. Am ende des Spiels würde man dann die Punkte erneut aus den div+mod werten berechnen und diese dann übertragen. Eine reine Änderung des angezeigten wertes würde also nichts nützen. Allerdings denke ich, dass auch solche Methoden für einen etwas geübteren "Hacker" relativ schnell zu knacken sind.
Wie würdet ihr sowas schummelsicher gestalten? Weiß jemand wie kommerzielle spiele sich vor solchem speichermanipulationen schützen?