Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.12.2011, 19:41

"Cheat-Schutz" bei Browsergames

Hallo,

ich habe eine Frage bzgl. von "Cheat-Schutz" in (HTML5-)Browsergames. Ich habe bereits viel zu diesem Thema gelesen, jedoch noch keine für mich praktisch umsetzbare Lösung gefunden, einen ungefälschten Highscore in mein PHP-Skript zu bekommen. ( Praktisch umsetzbar bezieht sich für mich auf die Möglichkeit der Umsetzung auf einem einfachen Webhost mit MySQL/PHP/Ruby/Python )

Ich konnte bisher leider keine wirkliche Lösung finden die sich nicht auf permanente Validierung mit Hilfe eines separaten Servers bezieht.

Ich hoffe jemand kann mir helfen.

~
Thurien

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

10.12.2011, 20:08

Eventuell solltest Du erstmal über die Art des Spiels und die Kommunikation mit dem Server erzählen, denn verschiedene Ansätze fordern verschiedene Validierungs-Umsetzungen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

10.12.2011, 20:31

Es geht mir weniger um ein aktuelles Projekt sondern eher um eine prophylaktische Überlegung aufgrund derer ich über Möglichkeiten meines Vorhabens erfahren will.
Es sollte allerdings eher etwas simpleres sein. Evtl. eine Art simples "Vier gewinnt" oder ein einfaches Rennspiel. ( Dabei geht es mir noch eher ums experimentieren und lernen )

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

10.12.2011, 20:46

Die sicherste Möglichkeit ist es, wenn das Spiel sämtliche Eingaben des Spielers aufzeichnet und zusammen mit der (angeblichen) Punktzahl/Rekordzeit an den Server übermittelt.
Auf dem Server wird das Spiel nun erneut mit den mitgesendeten Benutzereingaben durchgespielt (im Schnelldurchlauf, ohne Grafik, Sound etc.) und die am Ende erreichte Punktzahl/Rekordzeit mit der vom Client übermittelten Zahl verglichen.
Wenn es eine Abweichung gibt, wurde etwas manipuliert.
Dies setzt voraus, dass das Spiel absolut "deterministisch" läuft und auf allen unterstützten Plattformen gleiche Ergebnisse bei gleichen Eingaben liefert. Das ist jedoch insbesondere bei Floating-Point-Berechnungen oft schwer zu erreichen, da sogar schon verschiedene Compiler-Versionen/-Einstellungen dazu führen können, dass Berechnungen anders durchgeführt werden und am Ende leicht unterschiedliche Ergebnisse liefern. In einem Spiel reicht das aber manchmal, um einen Unterschied zwischen "Leben" und "Tod" zur Folge zu haben.
Siehe dazu auch: http://gafferongames.com/networking-for-…nt-determinism/

5

10.12.2011, 21:44

Die Idee mit dem "nachsimulieren" mit den Eingaben habe ich schon öfters gelesen. Aber mir fehlt da so ein bisschen die Idee hinter der Umsetzung. Auch muss das Spiel, wie du bereits sagtest, in einen gewissen Rahmen "berechenbar" sein. Mir fehlt dann bspw. die Möglichkeit das Box2DJS Framework einzubinden und zu validieren. Ich kann nicht glauben, dass es dort so eine große Lücke gibt :P. Außerdem verhindert dies nicht das Einsetzen von Bots. Das schlimme ist, dass egal was ich in Javascript versuche umzusetzen, letztendlich doch für jeden einsehbar ist und somit evtl. Lücken leichter zu finden sind.
Ich kann nicht glauben, dass es dort keine richtigen Möglichkeit gibt Cheaten zu unterbinden.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

10.12.2011, 22:05

Es wird niemals einen 100%igen Schutz gegen Cheating geben.
Das Problem ist, dass alles, was beim Client läuft, potenziell manipuliert werden kann und du deshalb nicht darauf vertrauen kannst, dass dein Spiel unverändert ausgeführt wird. Insbesondere bei Javascript ist es relativ einfach, z.B. das Spiel langsamer laufen zu lassen, damit man sich einen unfairen Vorteil verschaffen kann, oder einen Bot einzusetzen. Dagegen kannst du eigentlich nichts tun! Du kannst dein Programm "verschlüsseln", aber letztendlich muss es ja ausgeführt werden und kann damit auch von Angreifern analysiert werden. Auch Tools wie Punkbuster werden ja mit Leichtigkeit umgangen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

10.12.2011, 22:21

Ein 4-Gewinnt kann man auch komplett auf dem Server laufen lassen, sodass der Client nur die Eingaben an den Server übermittelt z.B. mit Ajax. Damit wäre Cheat für Punktzahlen von vornherein also ausgeschlossen. Ohne solche Logik kann vom Prinzip her immer ein Client/Bot nachprogrammiert werden, der zwar korrekte Ergebnisse an den Server schickt, aber besser spielt als ein Spieler es je könnte.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

10.12.2011, 22:28

Einen Bot kannst du aber auch einsetzen, wenn das Spiel komplett auf dem Server läuft.
Um Bots zu erkennen, braucht man Tools wie Punkbuster, die ständig im Hintergrund auf dem Client-Rechner laufen und alle Prozesse überwachen. Aber Punkbuster zu umgehen ist wohl nicht sonderlich schwer, wenn man sich anschaut, wie viele Hacks es für Spiele gibt, die auf Punkbuster setzen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

10.12.2011, 22:48

Bots zu detektieren ist sicher eine sehr aktuelle Problematik und Bots schreiben auch (hab' ich beides schon machen dürfen ;) ). Aber du hast beim Spielen der Logik auf dem Server immerhin nicht das Problem, dass das Spiel illegale Züge macht oder falsche Punktzahlen übermittelt. Automatisiertes Spielen wird man aber gerade bei Browser-(Flash/Javascript)-Games wohl so schnell nicht in den Griff bekommen.

Von den Bot-Protektoren/Detektoren gibt's aber echt 'nen Haufen kranker Sachen. Ganz schlimm fand ich persönlich GameGuard, verpackt in Themida (Kernel-Mode-Driver-Laufzeitverschlüsselung kombiniert mit teilweiser Ersetzung von CPU-Befehlen durch Virtual-Machine-Code). Üble Sache.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

10.12.2011, 23:33

Man könnte natürlich auch ganz anders ansetzen und mehr "gesunden Menschenverstand" einsetzen (ist natürlich schwer in Code zu fassen).
Z.B. den Fortschritt eines Spielers protokollieren. Ein absoluter Neuling wird wohl kaum nach ein paar Versuchen den neuen Weltrekord im Spiel aufstellen. Jemand, der aber über lange Zeit immer wieder spielt und ständig besser wird, hat viel bessere Chancen.

Werbeanzeige