Ich habe vor, ein Single-Player-Action-RPG in js / html5 zu machen, und ich möchte Betrug verhindern. Ich brauche keinen 100% igen Schutz, da es kein Multiplayer-Spiel sein wird, aber ich möchte ein gewisses Maß an Schutz.
Also, welche Strategien schlagen Sie über die Minimierung und Verschleierung hinaus vor?
Ich würde mich nicht die Mühe machen, einige serverseitige Überprüfungen einfach durchzuführen, aber ich möchte nicht den Diablo 3-Pfad wählen, um alle Änderungen meines Spielstatus auf der Serverseite beizubehalten.
Da es sich um eine Art RPG handeln wird, kam mir die Idee, einen Statistikinspektor zu erstellen, der abrupte Änderungen der Werte überprüft, aber ich bin mir nicht sicher, wie konsistent und vertrauenswürdig dies sein kann.
Was ist mit Variablen und Funktionen Escopes? Wenn immer möglich, ist es sicherer, an kleineren Schneisen zu arbeiten, aber die Mühe lohnt sich?
Gibt es überhaupt eine Möglichkeit für das Javascript, seinen Text wie in einer Prüfsumme selbst zu überprüfen?
Gibt es browserspezifische Lösungen? Ich würde mich nicht die Mühe machen, es nur in den frühen Builds für Chrome einzuschränken.
quelle
Antworten:
Die kurze Antwort ist, dass Sie es nicht tun können. Alles, was auf der Client-Seite ausgeführt wird, insbesondere von der Quelle, kann geändert werden, um Ihre Taktik trivial zu besiegen. Wenn Sie ein clientseitiges Überprüfungsprogramm einrichten, um nach plötzlichen Änderungen zu suchen, kann ein Benutzer das Überprüfungsprogramm einfach deaktivieren.
Die gute Nachricht ist, dass Einzelspieler-Spiele im Allgemeinen kaum betrogen werden. Die einzige größere Ausnahme sind Spiele mit großen "YouTube Highscore" -Communitys wie Line Rider, in denen die Spieler über YouTube miteinander konkurrieren.
Wenn Sie das anstreben oder einfach zu hartnäckig sind, um zu akzeptieren, dass die Leute im Spiel schummeln oder selbst Highscores erzielen (was eine Form des Mehrspielers ist), müssen Sie alle Berechnungen serverseitig durchführen . Ja, alles was zählt. Sie können die Berechnungs-Client-Seite nicht einmal wiederholen, um zu versuchen, dem Benutzer die Punktzahl zu geben und sie dann beim Server zu "verifizieren", da der Benutzer dann einfach die Prüfung deaktivieren und jedes System deaktivieren kann, das sicherstellt, dass Prüfungen vorhanden sind.
Ich wünschte, es gäbe eine bessere Antwort darauf, aber es gibt keine.
Trotzdem gibt es Dinge, die Sie tun können, um das Betrügen etwas zu erschweren. Sie werden niemanden davon abhalten, es ernst zu nehmen und ein Toolkit zum Schummeln freizugeben, aber es wird sie verlangsamen:
So. Wie Sie sehen, lohnt es sich wahrscheinlich nicht, diesen Weg zu gehen. Es ist schwer. Erfordert eine Menge wirklich alberner Programmierpraktiken und ist letztendlich immer noch relativ einfach zu besiegen. Sie müssen alle Berechnungen serverseitig durchführen, um Betrug zu verhindern. Oder lass los und akzeptiere, dass Betrug passieren wird.
quelle
Ich antwortete schon eine Frage wie das hier , und es tut mir leid zu sagen , aber:
Ist das Schlimmste, was du hier sagen könntest. Wenn Sie einen "Anti-Cheat" -Motor verwenden möchten, müssen Sie dies tun. Sie können alles, was Sie möchten, clientseitig hinzufügen, um die serverseitige Arbeit zu erleichtern, aber Sie dürfen dem Client niemals vertrauen. Die gesamte Logik muss mindestens serverseitig sein. Sie können es clientseitig reproduzieren, wenn Sie möchten, aber keine clientseitige Lösung wird es tun.
Übrigens, wenn Sie die Schwachstelle Ihres Programms finden möchten, verschleiern Sie sie nicht, lassen Sie den Code von den Leuten sehen und sagen Sie "hier, Sie haben ein Problem".
Das ist gut für Sie, für Ihren Code, für Ihre Benutzer und für die Community.
quelle
Well, a good place to start is to use the Object.freeze function (which will enable protection against object patching).
This "prevents new properties from being added", "prevents existing properties from being removed", "prevents existing properties, or their enumerability, configurability, or writability, from being changed"; any changes to the internal state should be done through accessors. The following example works on chrome (should work on firefox, I dont know about IE though...):
quelle
Object.freeze = function(o) {};
in the JS console.unfortunately, you have to go the diablo 3 path, if you are really concerned about hacks/cheats. if you are not, then basic checks you must do or its strongly advised to do.
... and so on
1 point is little bit tricky is the hero's position, since you are not much worried about it you can leave it, but its better you do that too with a minimum check like one below
Hope this helps, it sounds difficult but you need to learn to make real working games
quelle
Its basically not possible. It would be so easy to work around anything you put in place to prevent cheating.
The thing is with any software you distribute people can modify it in memory easily.
Besides if they want to cheat, let them. They're just ruining the game for themselves. There's no real practical use to cheat in this situation, you'd just destroy the gameplay for yourself.
quelle
I had an idea for a measure you could take to prevent/reduce cheating (in addition to other answers). You could have it set up so that the client is not given all the source code at one time, rather that every time the client wants to, say, purchase a new item in the store, that the client would have to send certain information to the server, and only recieve all the information for whatever they are purchasing if the information all matches up with what it's supposed to. If it doesn't, the server blacklists their IP or something.
You could use this in conjunction with what Dampes8n said about using different source versions, that if you can figure out a way to generate a lot of different versions, so that each user would be running an entirely different source version each time, that failing the check blacklists that source version, too, that it won't ever give out the correct item info for that source version ever again.
The main reason this would be effective is that if a hacker doesn't get the hack right the first time, this would make it much harder for them to modify the hack, because every time the hack doesn't work perfectly, they have to change their IP and write the hack all over again for the new source version.
quelle
Yes, it can't fully be done. Always have check on the server. Anything that has an impact on the game should require authorization from the server.
That is the extend to which I will repeat other answers.
However, we can do a lot more towards the end of preventing cheats than just checking on the server. Well, we might have to add some special server checks. However, be aware that client side checks are not worthless, they save bandwidth and server work when cheaters are not involved.
With that said:
Ja, das sind alles Milderungen. Wir können immer noch einen maßgeschneiderten Browser haben, der die Integrität nicht überprüft und es Ihnen ermöglicht, Variablen in lokalen Bereichen zu erreichen und damit zu experimentieren. Dann sendet der Spielcode die geänderten Daten mit dem richtigen Token abspielen.
quelle