2016-09-04 3 views
0

Ich entwickle ein einfaches Spiel in swift, aber mit GamePlayer (auf Cydia, ein cheat-engine like), ich bin in der Lage zu lokalisieren, verfolgen und ändern meine Punktzahl.Swift: Gameplayer Address Tracking verhindern

Ich frage mich, wie kann ich diese Art von Cheats verhindern ... Ich habe versucht, eine neue Instanz des Elements zu schaffen, wenn sie sich ändert, Beispiel:

score = Int(score + 1) 

ich auch versucht, die var zurückgesetzt auf Null und neu ordnen sie:

let tmp = score + 1 
score = nil 
score = tmp 

Aber es funktioniert nicht ... Meine erste Frage ist: ist es möglich, die Adresse einer variablen in swift zu ändern? Und wird es Adressverfolgung verhindern?

Meine zweite Frage ist: Eine andere Sache, die funktionieren kann, Codierung meiner Punktzahl, aber ist es die Arbeit wert?

+1

Normalerweise funktioniert "Sicherheit durch Dunkelheit" überhaupt nicht. Aber hier kann es helfen. Ein klassischer Trick besteht darin, für jedes Spiel einen eindeutigen Schlüssel zu generieren. Ändern Sie Ihre Score-Variable nicht direkt, verwenden Sie eine dedizierte Methode, um * eine private Variable zu speichern, in der Sie den Score multipliziert mit diesem geheimen Schlüssel speichern (oder bitshifted oder stringified and mangled oder was auch immer). Wenn Sie die Score-Variable lesen, vergleichen Sie sie immer mit ihrem geheimen Gegenstück, indem Sie die umgekehrte Operation ausführen. Wenn das Ergebnis zur Laufzeit temperiert wurde, wissen Sie es, weil die geheime Variable nicht mehr synchron ist. – Moritz

+0

Okay, ich sehe was du meinst und das kann ziemlich schnell umgesetzt werden! Aber wissen Sie aus meinem Allgemeinwissen, ob es möglich ist, die Adresse einer Variablen schnell zu ändern? – Dliix

Antwort

0

Sie können Ihre score Variable in eine struct setzen und Copy-on-Write verwenden. Wenn Sie dann einen Wert ändern, erhalten Sie eine neue Kopie des score. Die Möglichkeiten und Funktionsweise von Copy-on-Write werden hier mit Beispielen beschrieben: copy-on-write

Verglichen mit der Lösung, bei der Sie tatsächlich die Nummer verschlüsselt haben, hat sie Vor- und Nachteile. Nur einige von ihnen von oben (Ich bin gespannt, was Ihre Punkte sind)

  • Verschlüsselung benötigt mehr CPU-Leistung und damit mehr Batterie. Während das Copy-on-Write tief auf iOS-Ebene implementiert ist, können wir davon ausgehen, dass es sehr gut optimiert ist.
  • Die Copy-on-Write-Lösung ist weniger sicher, da man die richtige Adresse nur am Anfang finden und verfolgen kann (jetzt, dass ich darüber nachdenke, nicht wirklich ...)
  • Die Kopie- On-Write fügt Ihrem Quellcode mehr Komplexität hinzu, da Sie ihn bei jeder Änderung auslösen müssen.