Frage

Ich spreche über ein Action-Spiel ohne oberes Punktelimit und keine Möglichkeit, die Partitur auf dem Server zu überprüfen, indem Sie bewegen usw. Wiedergabe

Was ich wirklich brauchen, ist die stärkste Verschlüsselung möglich in Flash / PHP, und ein Weg, um Menschen den Aufruf der PHP-Seite anders als durch meine Flash-Datei zu verhindern. Ich habe einige einfache Methoden in der Vergangenheit versuchte mehrere Anrufe für eine einzelne Punktzahl zu machen und eine Prüfsumme / Fibonacci-Sequenz usw. abgeschlossen, und auch die SWF mit Amayeta SWF Encrypt Verschleiern, aber sie schließlich alle gehackt wurden.

Danke Antworten auf Stackoverflow Ich habe jetzt ein paar mehr Infos von Adobe gefunden - http: //www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_12.html und https: // github .com / mikechambers / as3corelib - was ich glaube, ich für die Verschlüsselung verwenden kann. Nicht sicher, dies obwohl mich um Cheatengine erhalten wird.

Ich brauche die besten Lösungen für AS2 und AS3 wissen, wenn sie anders sind.

Die Hauptprobleme scheinen Dinge wie TamperData und LiveHTTP Header zu sein, aber ich verstehe es fortgeschritteneren Hacking-Tools und sind - wie Cheatengine (dank Mark Webster)

War es hilfreich?

Lösung

Dies ist ein klassisches Problem mit Internet-Spiele und Wettbewerbe. Flash-Code funktioniert mit den Nutzern eine Punktzahl für ein Spiel zu entscheiden. Aber die Benutzer nicht vertraut, und der Flash-Code läuft auf dem Computer des Benutzers. Du bist SOL. Es gibt nichts, was man tun kann, um einen Angreifer aus Schmiede High Scores zu verhindern:

  • Flash ist noch einfacher, Reverse Engineering, als Sie vielleicht denken, es ist, da die Bytecode gut dokumentiert sind und eine höhere Programmiersprache (Actionscript) beschreiben --- wenn Sie ein Flash-Spiel veröffentlichen, Sie veröffentlichen Ihren Quellcode, ob Sie es wissen oder nicht.

  • Attackers steuert den Laufzeitspeicher des Flash-Interpreter, so dass jeder, der weiß, wie man einen programmierbaren Debugger verwendet eine Variable verändern kann (einschließlich der aktuellen Punktzahl) jederzeit oder ändern, das Programm selbst.

Der einfachste mögliche Angriff gegen das System ist der HTTP-Datenverkehr für das Spiel über einen Proxy, fängt das High-Score speichern und Wiedergabe mit einer höheren Punktzahl laufen.

Sie können versuchen, diesen Angriff zu blockieren, indem jede hohe Punktzahl speichern zu einer einzigen Instanz des Spiels zu binden, zum Beispiel durch ein verschlüsseltes Token an den Client bei Spielstart zu senden, die wie folgt aussehen könnte:

hex-encoding( AES(secret-key-stored-only-on-server, timestamp, user-id, random-number))

(Sie können auch einen Session-Cookie mit dem gleichen Effekt verwendet werden).

Das Spiel Code Echo dieses Token zurück an den Server mit dem High-Score speichern. Aber ein Angreifer kann immer noch nur das Spiel erneut starten, ein Token erhalten, und fügen Sie anschließend sofort, dass die Token in eine wiederHighsCore speichern.

Also die nächsten Sie füttern nicht nur ein Token oder Session-Cookie, sondern auch einen High-Score-Verschlüsselung Sitzungsschlüssel. Dies wird eine 128-Bit-AES-Schlüssel sein, sich mit einem Schlüssel verschlüsselt in das Flash-Spiel fest einprogrammiert:

hex-encoding( AES(key-hardcoded-in-flash-game, random-128-bit-key))

Nun, bevor das Spiel setzt der Highscore, es entschlüsselt den High-Score-Verschlüsselung-Sitzungsschlüssel, die sie tun können, weil Sie den High-Score-Verschlüsselung-Session-Schlüssel-Entschlüsselungsschlüssel in den Flash binären fest einprogrammiert. Sie verschlüsseln den Highscore mit diesem entschlüsselten Schlüssel, zusammen mit dem SHA1-Hash des Highscore:

hex-encoding( AES(random-128-bit-key-from-above, high-score, SHA1(high-score)))

Der PHP-Code auf dem Server überprüft die Token die Anforderung von einer gültigen Spiel Instanz kam, um sicherzustellen, entschlüsselt dann die verschlüsselte hohe Punktzahl, die Überprüfung sicherzustellen, dass der High-Score entspricht den SHA1 des High-Score (wenn Sie überspringen Sie diesen Schritt, Entschlüsselung einfach erzeugen zufälligen, wahrscheinlich sehr hoch, High Scores).

So, jetzt der Angreifer dekompiliert Flash-Code und findet schnell den AES-Code, der wie ein wunder Daumen absteht, obwohl selbst wenn es so wäre es nicht in 15 Minuten nach unten mit einer Speicher Suche und einem Tracer verfolgt werden würde ( „ich weiß, dass meine Punkte für dieses Spiel ist 666, also lassen Sie sich 666 im Speicher finden, dann eine Operation fangen, die diesen Wert berührt --- oh schauen, den Highscore-Verschlüsselungscode!“). Mit dem Sitzungsschlüssel, wird der Angreifer nicht einmal, um den Flash-Code ausführen; packt sie ein Spiel Start-Token und einen Sitzungsschlüssel und kann beliebig hohe Punktzahl zurückschicken.

Sie sind jetzt an dem Punkt, wo die meisten Entwickler einfach aufgeben --- geben oder ein paar Monate dauern, mit Angreifern von Unordnung durch:

  • Scrambling den AES-Schlüssel mit XOR-Operationen

  • Ersetzen Schlüssel Bytefeldgruppen mit Funktionen, die den Schlüssel

  • berechnen
  • Scattering gefälschte Schlüssel Verschlüsselungen und High-Score-Buchungen in der gesamten binären.

Das ist alles meist eine Verschwendung von Zeit. Es versteht sich von selbst, SSL ist nicht helfen Ihnen entweder; SSL können Sie nicht schützen, wenn einer der beiden SSL-Endpunkte Übel ist.

Hier sind einige Dinge, die High-Score-Betrug tatsächlich reduzieren kann:

  • eine Anmeldung erforderlich, das Spiel zu spielen, müssen die Anmeldung ein Sitzungs-Cookie produzieren, und nicht zulassen, dass mehrere ausstehende Spiel auf der gleichen Sitzung startet oder mehrere gleichzeitige Sitzungen für denselben Benutzer.

  • Ablehnen hohe Werte von Spiel-Sessions, die weniger als die kürzesten realen Spiele jemals gespielt (für einen anspruchsvolleren Ansatz dauern, try „Quarantäne“ High Scores für Spiel-Sessions, die weniger als 2 Standardabweichungen unter der Mittelwert Spieldauer dauern). Stellen Sie sicher, dass Sie Tracking-Spiel Dauern server.

  • Ablehnen oder unter Quarantäne stellen hohe Werte von Anmeldungen, die nur das Spiel ein- oder zweimal gespielt haben, so dass Angreifer ein „paper trail“ begründeten suche Spiel für jede Anmeldung sie erstellen produzieren.

  • „Heartbeat“ Noten während des Spiels, so dass der Server die Partitur Wachstum über die gesamte Lebensdauer eines Spiels sieht. Ablehnen hohe Werte, die keine angemessenen Punktzahl Kurven folgen (zum Beispiel 0-999999 Springen).

  • „Snapshot“ Spielzustand während des Spiels (zum Beispiel Menge an Munition, Position in der Ebene, etc.), die Sie gegen aufgezeichnet Zwischen Partituren später versöhnen können. Sie müssen nicht einmal eine Möglichkeit haben, Anomalien in diesen Daten zu erfassen, mit zu beginnen; Sie es nur sammeln müssen, und dann können Sie zurückgehen und analysieren es, wenn die Dinge faul aussehen.

  • Deaktivieren Sie das Konto jeden Benutzers, der eine Ihrer Sicherheitsüberprüfungen fehlschlägt (zum Beispiel durch je eine verschlüsselte hohe Punktzahl einreichen, die die Validierung fehlschlägt).

Denken Sie jedoch daran, dass Sie nur High-Score-Betrug hier abzuschrecken. Es gibt nichts können Sie tun, wenn zu verhindern. Wenn es in Ihrem Spiel Geld auf der Strecke ist, wird jemand geht jedes System Sie kommen mit besiegen. Das Ziel ist nicht zu Stop dieser Angriff; es ist der Angriff teurer als nur immer wirklich gut auf dem Spiel zu machen und es zu schlagen.

Andere Tipps

Sie sein kann, die falsche Frage. Sie scheinen auf die Methoden konzentriert Menschen ihren Weg nach oben die Highscore-Liste zum Spiel verwenden, aber spezifische Methoden blockiert geht nur so weit. Ich habe keine Erfahrung mit TamperData, so kann ich zu, dass nicht sprechen.

Die Frage, die Sie sollten fragen, ist: „Wie kann ich feststellen, ob eingereichten Partituren gültig und authentisch sind?“ Die spezifische Art und Weise zu tun, ist Spiel abhängig. mit den gleichen Bewegungen für sehr einfache Puzzle-Spiele, können Sie über die Partitur zusammen mit dem spezifischen Ausgangszustand und den Zugfolge senden, die im Endzustand geführt, und dann das Spiel auf der Server-Seite erneut auszuführen. Bestätigen Sie, dass die angegebene Punktzahl gleich der berechneten Score ist und nur die Partitur akzeptieren, wenn sie übereinstimmen.

Eine einfache Möglichkeit, dies zu tun wäre zusammen mit der Partitur es selbst einen verschlüsselten Hash Ihres Highscore-Wert zu schaffen sein. Wenn zum Beispiel der Ergebnisse per HTTP-GET-Posting: http://example.com/highscores.php?score=500&checksum=0a16df3dc0301a36a34f9065c3ff8095

Wenn diese Prüfsumme berechnet wird, ein gemeinsames Geheimnis verwendet werden sollte; dieses Geheimnis soll nie über das Netzwerk übertragen werden, sollte aber hart sowohl in dem PHP-Backend und der Flash-Frontend codiert werden. Die Prüfsumme oben durch das Voranstellen der Zeichenfolge " geheim ", um die Punktzahl " 500 " erstellt wurde, und es durch md5sum ausgeführt wird.

Obwohl dieses System einen Benutzer zu veröffentlichen beliebige Noten verhindert, ist es nicht eine „Replay-Attacke“ verhindern, in dem ein Benutzer reposts eine zuvor berechnete Punktzahl und Hash-Kombination. In dem obigen Beispiel würde eine Punktzahl von 500 produziert immer den gleichen Hash-String. Ein Teil dieses Risikos kann durch den Einbau von mehr Informationen (wie ein Benutzername, Zeitstempel oder IP-Adresse) im String abgemildert werden, die gehasht werden soll. Obwohl dies die Wiedergabe von Daten nicht verhindern, es wird sichergestellt, dass ein Satz von Daten für einen einzelnen Benutzer zu einem einzigen Zeitpunkt gültig ist.

verhindern alle Replay-Attacken auftreten, irgendeine Art von Challenge-Response-System muß geschaffen werden, wie die folgenden:

  1. Das Flash-Spiel ( "der Client") führt ein HTTP-GET von http://example.com /highscores.php ohne Parameter. Diese Seite gibt zwei Werte: ein zufällig generierte Salz Wert und einen verschlüsselten Hash dieses Salz Wert mit dem gemeinsamen geheimen Schlüssel kombiniert. Dieses Salz Wert sollte in einer lokalen Datenbank von anstehenden Anfragen gespeichert werden und soll einen Zeitstempel zugeordnet sein, so dass es nach vielleicht einer Minute „auslaufen“ kann.
  2. Das Flash-Spiel kombiniert den Salz-Wert mit dem gemeinsamen geheimen Schlüssel und berechnet einen Hash zu überprüfen, ob dies den einen vom Server bereitgestellte übereinstimmt. Dieser Schritt ist notwendig, werden von den Benutzern Manipulation Salzwerte zu verhindern, wie es überprüft, ob das Salz Wert wurde vom Server tatsächlich erzeugt wird.
  3. Das Flash-Spiel kombiniert den Salz-Wert mit dem gemeinsamen geheimen Schlüssel, High-Score-Wert, und alle anderen relevanten Informationen (Nickname, IP, Zeitstempel) und berechnet einen Hash. Er sendet dann diese Informationen zurück an den PHP-Backend über HTTP GET oder POST, zusammen mit dem Salz Wert, hohen Punktzahl, und anderen Informationen.
  4. verbindet der Server die Informationen in der gleichen Weise wie auf dem Client empfangen wird, und berechnet einen Hash zu überprüfen, ob diese den einen vom Kunden zur Verfügung gestellt einstimmt. Es überprüft dann auch, dass das Salz Wert noch gültig ist, wie in der anhängigen Abfrageliste aufgeführt. Wenn diese beiden Bedingungen erfüllt sind, schreibt es die hohe Punktzahl in die Highscore-Tabelle und gibt eine signierte „Erfolg“ Nachricht an den Client. Es beseitigt auch das Salz Wert aus der anstehenden Abfrageliste.

Bitte beachten Sie, dass die Sicherheit eine der oben genannten Techniken beeinträchtigt wird, wenn das gemeinsame Geheimnis jemals für den Benutzer zugänglich ist

Als Alternative einige dieser Hin und Her konnten indem das Client vermieden werden, mit dem Server über HTTPS zu kommunizieren, und die Versicherung, dass der Client vorkonfiguriert ist nur Zertifikate, die von einer bestimmten Zertifizierungsstelle signiert an Vertrauen, das Sie allein Zugriff hat.

Ich mag, was tpqf sagte, sondern als ein Konto zu deaktivieren, wenn Betrug entdeckt wird, ein Honeypot implementieren so, wenn sie sich anmelden, sehen sie ihre gehackt Noten und nie vermuten, dass sie als Troll markiert wurden. Google für "phpBB MOD Troll" und du wirst einen genialen Ansatz sehen.

In der akzeptierten Antwort tqbf erwähnt, dass Sie nur einen Speicher Suche nach der Partitur Variable tun können ( „Mein Score ist 666, so sehe mich für die Nummer 666 im Speicher“).

Es gibt einen Weg, um dieses. Ich habe eine Klasse hier: http://divillysausages.com/blog/safenumber_and_safeint

Grundsätzlich haben Sie ein Objekt um Ihre Punktzahl zu speichern. In dem Setter multipliziert sie den Wert, den Sie es mit einer Zufallszahl übergeben (+ und -), und in dem Getter teilen Sie den gespeicherten Wert durch den Zufallsgenerator Multiplikators das Original zurück zu bekommen. Es ist einfach, aber hilft Suchstopp-Speicher.

Überprüfen Sie auch das Video von einigen der Jungs hinter dem Pushbutton-Engine aus, die über einige der verschiedenen Möglichkeiten sprechen Hacking Sie bekämpfen können: http://zaa.tv/2010/12/the-art-of-hacking-flash-games/ . Sie waren die Inspiration hinter der Klasse.

Ich habe Art von Problem zu umgehen ... Ich hatte eine gibt, wo Noten erhöht (man bekommt +1 Punktzahl immer). Zuerst begann ich aus zufälligen num zu zählen (wir 14 sagen), und wenn ich die Noten angezeigt werden, zeigten nur die Noten var minus 14. Dies war so, wenn die Cracker 20 zum Beispiel suchen, werden sie es nicht (es finden 34 wird in dem Speicher sein kann). Zweitens, da ich weiß, was der nächste Punkt sein sollte ... Ich Adobe Krypto-Bibliothek verwendet, den Hash von dem, was den nächsten Punkt zu erstellen sollte sein. Wenn ich die Noten zu erhöhen haben, überprüfe ich, ob der Hash der inkrementierten Werte ist gleich der Hash ist sein sollte. Wenn der Cracker der Punkte im Speicher geändert hat, sind die Hashes nicht gleich. Ich fahre einige serverseitige Überprüfung und wenn ich verschiedene Punkte aus dem Spiel und aus dem PHP bekam, ich weiß, dass Betrug beteiligt war. Hier ist meine Code-Schnipsel ot (Ich bin mit Adobe Crypto libraty MD5-Klasse und zufällige Kryptographie Salz. CallPhp () ist meine serverseitige Validierung)

private function addPoint(event:Event = null):void{
            trace("expectedHash: " + expectedHash + "  || new hash: " + MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt) );
            if(expectedHash == MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt)){
                SCORES +=POINT;
                callPhp();
                expectedHash = MD5.hash( Number(SCORES + POINT).toString() + expectedHashSalt);
            } else {
                //trace("cheat engine usage");
            }
        }

Mit dieser Technik + SWF obfustication, konnte ich die Cracker stoppen. Auch wenn ich die Noten auf die Server-Seite zu senden, verwende ich meine eigene kleine, Verschlüsselungs- / Entschlüsselungs-Funktion. So etwas wie dieser (Server-Side-Code nicht enthalten, aber Sie können den Algorithmus und schreiben Sie es in PHP sehen):

package  {

    import bassta.utils.Hash;

    public class ScoresEncoder {

        private static var ranChars:Array;
        private static var charsTable:Hash;

        public function ScoresEncoder() {

        }

        public static function init():void{

            ranChars = String("qwertyuiopasdfghjklzxcvbnm").split("")

            charsTable = new Hash({
                "0": "x",
                "1": "f",
                "2": "q",
                "3": "z",
                "4": "a",
                "5": "o",
                "6": "n",
                "7": "p",
                "8": "w",
                "9": "y"

            });

        }

        public static function encodeScore(_s:Number):String{

            var _fin:String = "";

            var scores:String = addLeadingZeros(_s);
            for(var i:uint = 0; i< scores.length; i++){
                //trace( scores.charAt(i) + " - > " + charsTable[ scores.charAt(i) ] );
                _fin += charsTable[ scores.charAt(i) ];
            }

            return _fin;

        }

        public static function decodeScore(_s:String):String{

            var _fin:String = "";

            var decoded:String = _s;

            for(var i:uint = 0; i< decoded.length; i++){
                //trace( decoded.charAt(i) + " - > "  + charsTable.getKey( decoded.charAt(i) ) );
                _fin += charsTable.getKey( decoded.charAt(i) );
            }

            return _fin;

        }

        public static function encodeScoreRand(_s:Number):String{
            var _fin:String = "";

            _fin += generateRandomChars(10) + encodeScore(_s) + generateRandomChars(3)

            return _fin;
        }

        public static function decodeScoreRand(_s:String):Number{

            var decodedString:String = _s;
            var decoded:Number;

            decodedString = decodedString.substring(10,13);         
            decodedString = decodeScore(decodedString);

            decoded = Number(decodedString);

            return decoded;
        }

        public static function generateRandomChars(_length:Number):String{

            var newRandChars:String = "";

            for(var i:uint = 0; i< _length; i++){
                newRandChars+= ranChars[ Math.ceil( Math.random()*ranChars.length-1 )];
            }

            return newRandChars;
        }

        private static function addLeadingZeros(_s:Number):String{

            var _fin:String;

            if(_s < 10 ){
                 _fin = "00" + _s.toString();
            }

            if(_s >= 10 && _s < 99 ) {
                 _fin = "0" + _s.toString();
            }

            if(_s >= 100 ) {
                _fin = _s.toString();
            }           

            return _fin;
        }


    }//end
}

Dann habe ich die Variable unter anderen fake-Vars senden und es ist nur unter dem Weg verloren gehen ... Es ist eine Menge Arbeit für nur kleine Flash-Spiel, aber wo Preise einige Leute nur gierig beteiligt sind. Wenn Sie Hilfe benötigen, schreiben Sie mir eine PM.

Cheers, Ico

Verschlüsseln eines bekannten (privat) umkehrbar Schlüssel wäre die einfachste Methode. Ich bin nicht wie alle bis auf so bin ich nicht sicher, welche Art von Verschlüsselungsanbieter gibt.

Aber man könnte Variablen wie Spiel-Länge (verschlüsselt wieder) und eine Klick Zählung enthalten.

Alle Dinge wie diese kann Reverse Engineering werden, so betrachtet in einem Bündel von Datenmüll zu werfen Menschen aus dem Duft zu werfen.

Edit: Es könnte in einigen PHP-Sessions Aufspannung auch wert sein. Starten Sie die Sitzung, wenn sie Spiel starten klicken und (als Kommentar zu diesem Beitrag sagt) log Zeit. Wenn sie die Partitur einreichen können Sie überprüfen, sie haben tatsächlich ein offenes Spiel, und sie sind nicht eine Punktzahl zu früh oder zu groß einreichen.

Es könnte sich lohnen, einen skalaren ausarbeitet, um zu sehen, was sagen die maximale Punktzahl ist pro Sekunde / Minute des Spiels.

Keines dieser Dinge sind unhintergehbaren aber es wird eine gewisse Logik nicht im Flash haben, helfen, wo die Menschen sie sehen können.

Nach meiner Erfahrung, diese am besten als ein Social-Engineering-Problem genähert eher als ein Programmierproblem. Statt sich auf machen zu betrügen es unmöglich, den Schwerpunkt auf die es langweilig durch die Anreize Entfernung zu betrügen. Zum Beispiel, wenn der Hauptanreiz ist öffentlich sichtbar High Scores, einfach eine Verzögerung auf, wenn hohe Werte setzt für Cheater deutlich Betrug reduzieren, indem die positive Rückkopplungsschleife zu entfernen gezeigt können.

Sie können keine Daten den Client zurückgibt vertrauen. Die Validierung muss auf der Serverseite durchgeführt werden. Ich bin kein Spielentwickler, aber ich tue Business-Software machen. In beiden Fällen kann Geld beteiligt und Menschen Client-Seite Verschleierungstechniken brechen werden.

Vielleicht regelmäßig Daten zurück an den Server senden und einige Prüfungen durchführen. Konzentrieren Sie sich nicht auf dem Client-Code, auch wenn das ist, wo Ihr applicaiton lebt.

Jedes Mal, wenn Sie Ihr Highscore-System basiert auf der Tatsache, dass die Flash-Anwendung unencrpyted / unsigned Highscore-Daten über das Netzwerk sendet, die abgefangen und manipuliert werden können / abgespielt. Die Antwort ergibt sich aus dieser: encrypt (anständig!) Oder verschlüsselt Zeichen Highscore-Daten. Das zumindest macht es schwieriger für Menschen Ihres Highscore-System zu knacken, weil sie werden die geheimen Schlüssel aus dem SWF-Datei zu extrahieren. Viele Menschen werden wahrscheinlich genau dort aufgeben. Auf der anderen Seite, alles was man braucht ist eine einfach Person der Schlüssel zu extrahieren und sie irgendwo veröffentlichen.

Echte Lösungen beinhalten mehr Kommunikation zwischen der Flash-Anwendung und der Highscore-Datenbank, so dass dieser prüfen kann, ob eine bestimmte Punktzahl etwas realistisch ist. Dies ist wahrscheinlich kompliziert, je nachdem, welche Art von Spiel, das Sie haben.

Es gibt keinen Weg, um es vollständig unhackable zu machen, da es einfach ist, SWFs zu dekompilieren, und ein erfahrener Entwickler Hacker könnte dann verfolgen durch den Code und herauszufinden, wie jedes verschlüsseltes System umgehen Sie verwenden könnten.

obwohl

Wenn Sie einfach nur Kinder wollen über die Verwendung von einfachen Werkzeugen wie TamperData Betrug stoppen, dann könnten Sie einen Verschlüsselungsschlüssel generieren, die Sie den SWF beim Start übergeben. Dann etwas verwenden wie http://code.google.com/p/as3crypto/ die hohe Punktzahl verschlüsselt, bevor es zurück an den PHP-Code übergeben. Dann entschlüsselt es auf der Serverseite, bevor sie in der Datenbank zu speichern.

Sie sprechen über das, was das „Kundenvertrauen“ Problem bezeichnet wird. Da der Client (in diesem Bargeld, eine SWF-Datei in einem Browser ausgeführt wird) tut etwas, es zu tun entworfen ist. Speichern Sie eine hohe Punktzahl.

Das Problem ist, dass Sie sicherstellen möchten, dass „Partitur speichern“ Anfragen von Ihrem Flash-Film kommen, und nicht irgendeine beliebige HTTP-Anforderung. Eine mögliche Lösung dafür ist ein Token vom Server in die SWF zum Zeitpunkt der Anfrage (mit flasm ), der muss die Anfrage begleitet eine hohe Punktzahl zu speichern. Sobald der Server, dass die Partitur speichert, das Token abgelaufen ist und kann nicht mehr für Anfragen verwendet werden.

Die Kehrseite der Medaille ist, dass ein Benutzer nur in der Lage sein, eine hohe Punktzahl senden pro Ladung des Flash-Films - Sie haben haben, sie zu zwingen, die SWF zu aktualisieren / neu zu laden, bevor sie wieder für eine neue Partitur spielen.

I gehört in der Regel „Geisterdaten“ der Spielsitzung mit dem Highscore-Eintrag. Also, wenn ich ein Rennspiel zu machen, schließe ich die Wiedergabedaten. Sie oft die Replay-Daten bereits für Replay-Funktion oder Geisterrennen-Funktionalität (spielen gegen Ihre letzten Rennen, oder spielen gegen den Geist von Geck # 14 auf der Rangliste) haben.

Überprüfen diese ist sehr körperliche Arbeit, aber wenn das Ziel, wenn die Top-10-Einträge in einem Wettbewerb, um zu überprüfen ist echt sind, kann dies eine sinnvolle Ergänzung zu dem Arsenal von Sicherheitsmaßnahmen anderen Unternehmen sein bereits hingewiesen.

Wenn das Ziel Highscores zu halten Liste Online bis zum Ende der Zeit ist, ohne dass jemand auf sie schauen zu müssen, dies wird nicht viel bringen.

Die Art und Weise, dass ein neuer beliebter Arcade-mod tut es ist, dass es Daten aus dem Flash zu php sendet, zurück zu Flash (oder neu geladen es), dann zurück zu PHP. Auf diese Weise können Sie alles, was Sie tun möchten, die Daten als auch Bypass-Post-Daten / Entschlüsselungs-Hacks und dergleichen vergleichen. Eine Möglichkeit, dass es dies tut, ist durch die Zuordnung 2 rechneten Werte von PHP in den Flash (die man nicht greifen kann oder sehen sogar eine Echtzeit-Flash-Daten-Grabber, wenn ausgeführt wird), eine mathematische Formel mit der Partitur mit den Zufallswerten hinzufügen dann überprüft es mit die gleiche Formel es umgekehrt zu sehen, ob die Partitur sie paßt, wenn es um die php am Ende schließlich geht. Diese Zufallswerte sind nie sichtbar, sowie es auch mal die Transaktion stattfindet, und wenn es noch mehr als ein paar Sekunden, dann ist es auch Fahnen es als Betrug, weil es vorausgesetzt, dass Sie den Send aufgehört haben zu versuchen, die rechneten Werte, um herauszufinden, oder laufen die Zahlen durch irgendeine Art von Chiffre möglich Zufallswerte zurück mit dem Scorewert zu vergleichen.

Dies scheint eine ziemlich gute Lösung, wenn Sie mich fragen, sieht jemand irgendwelche Probleme mit dieser Methode? Oder Möglichkeiten um ihn herum?

Ich denke, die einfachste Art und Weise Anrufe wie RegisterScore auf eine Funktion zu machen wäre (score) jedes Mal das Spiel eine Punktzahl hinzugefügt werden registriert und dann codieren, Paket, und es zu einem PHP-Skript als String senden. Der PHP-Skript würde wissen, wie man es richtig entschlüsseln. Dies würde alle Anrufe direkt auf die PHP-Skript wie jeder versucht stoppen, um eine Punktzahl Kraft in einer Dekompression Fehler führen würde.

Es ist nur möglich, indem die alle Spiellogik auf serverseitige halten , die auch die Partitur speichert intern ohne Wissen des Benutzers. Aus wirtschaftlichen und wissenschaftlichen Gründen kann die Menschheit diese Theorie zu allen Spielarten mit Ausnahme von rundenbasierten keine Anwendung. Für z.B. Physik an dem Server-Seite zu halten, ist rechnerisch teuer und hart reagieren, wie Geschwindigkeit von Hand zu bekommen. Auch möglich, während die Schach spielen kann jeder KI Schach Gameplay Gegner anzupassen. Daher besser Multiplayer-Spiele auch On-Demand Kreativität enthalten sollen.

Es ist nicht wirklich möglich, zu erreichen, was Sie wollen. Die Interna des Flash-App sind immer teilweise zugänglich, vor allem, wenn man weiß, wie die Dinge zu verwenden, wie Cheatengine, bedeutung egal, wie sicher Ihre Website und Browser <->. Server-Kommunikation ist, ist es noch relativ einfach sein wird, zu überwinden

Es könnte eine gute Idee sein, mit Back-End-Kommunikation über AMFPHP . Es soll die Faulen zumindest davon abhalten, zu versuchen, die Ergebnisse über den Browser-Konsole zu drücken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top