Entwickler-Ecke
C# - Die Sprache - Spiel vor Manipulationen (Hacks) schützen
beginner98 - Mo 12.01.15 22:12
Titel: Spiel vor Manipulationen (Hacks) schützen
Hallo,
ich möchte seit Längetem ein serverseitiges Minispiel programmieren.
Es handelt sich um ein 2D Racing Spiel im Retro-Look, das beim Gameover für jede während der Strecke gesammelte Münze einen Wert in der Spalte "Münzen" der MySQL-Datenbank um 1 erhöhen soll.
Was mich aber davon abhält, ist die Gefahr, dass jemand den Wert des int-Wertes der Münze manipulieren könnte.
Beispiel: Am Anfang des Races ist gegeben:
int coins = 0;
Nach 20 Sekunden hat Spieler Max 6 Münzen gesammelt.
int coins = 6
Durch Manipulation bringt er den Wert auf 2000.
int coins = 300000;
Beim Gameover werden uhm in der MySQL-Datenbank 300000 erschummelte Münzen gutgeschrieben, die er eigentlich nicht besitzen dürfte.
Nun die Frage: Wie kann ich mein C# Spiel möglichst sicher vor Hacker schützen? So sicher, dass selbst Geheimdienste es nicht schaffen, müsste es auch nicht sein.
Ich habe das Stichwort RSA erhalten, weiß jedoch nicht, ob dieses Kryptosystem sicher genug ist. Auch sind mir Sockets mit Threads eingefallen, mir ist jedoch unbekannt, wie ich den Socket sichern könnte. Vielleicht irgendwas mit Sicherheitskeys?
Ich danke im Voraus!
glotzer - Di 13.01.15 01:26
Kurze Antwort: das geht nicht.
Wenn du nicht willst, dass ein Spieler Daten verändert, dann gib sie ihm nicht sondern berechne sie am Server.
beginner98 - Di 13.01.15 03:33
Ok, das habe ich mir schon gedacht.
Wie könnte ich die Daten denn am Server brechnen? Es muss ja erkannt werden, wann der Spieler eine Münze aufhebt und dazu muss der Client bzw. die Anwendung des Spielers dem Server ein Zeichen geben.
Hast du ein Beispiel?
Ralf Jansen - Di 13.01.15 11:07
Zitat: |
Es muss ja erkannt werden, wann der Spieler eine Münze aufhebt und dazu muss der Client bzw. die Anwendung des Spielers dem Server ein Zeichen geben. |
Nein? Wenn das Spiel quasi auf dem Server stattfindet und der Client an den Server die Clienteingaben weitergibt, der Art "ich habe gerade nach rechts gelenkt, ich habe nach links gelenkt, ich habe gebremst, ich habe beschleunigt" dann kann der Server die Position auf der Strecke selbst bestimmen und ermitteln ob ein Münze überfahren wurde oder eben nicht. Das muß ihm der Client nicht sagen. Umgekehrt muß der Server dem Client Bescheid sagen das entsprechendes vorgefallen ist damit der Client das passende anzeigen kann. Der Server sollte auf die oben genannten ~Signale~ die vom Client an den Server gesendet werden nur ihre Sinnhaftigkeit prüfen. Eben der Art ob diese Serie von Steuersignalen überhaupt menschenmöglich ist.
OlafSt - Di 13.01.15 13:54
Eigentlich kann der Client ja durchaus die Räume und Laufwege, Positionen von Monstern usw. kennen. Aber ansonsten ist der Client nur für das Anzeigen des Spiels zuständig.
Ansonsten sendet der Client nur Infos über seine Bewegungen und Aktionen zum Server und dieser entscheidet über die besonderen Events (Aggro-Range unterschritten, ergo Monster greift an, in eine Falle getreten und HP werden abgezogen, über eine Münze gelaufen) und sendet entsprechende Informationen zum Client zurück - der dann nur noch die Anzeige macht.
So funktioniert WoW (wenn auch einige Zehnerpotenzen komplexer) und nahezu alle MMO's.
beginner98 - Di 13.01.15 17:36
Danke, ihr habt mir sehr weitergeholfen! :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!