HOME

Cheat(ing)

XOR-Verschlüsselung

Die weite Verbreitung von Trainern veranlasst die Spielehersteller inzwischen verstärkt dazu relevante Speicherstellen zu verschlüsseln.
Neben der Verwendung von FLOAT-Zahlen(anstelle der gewohnten INTEGER) gibt es auch skurrile Methoden wie die Zahlen als STRING zu speichern, quasi als TEXT ^^
Gemeiner wird es mit XOR-Verschlüsselung, diese ist EIGENTLICH ganz einfach zu knacken.. wenn man den passenden Schlüssel kennt..

Zum Vergleich eine Tabelle mit verschiedenen XOR "Schlüsseln":
ZahlenwertXOR 10XOR 100XOR 1000XOR 33333
0010100
0111101
0208102
0309103
0414096
0515097
0612098
0713099
0802108
0903109
1000110


Die XOR-"Schlüssel" sind hier in dezimaler Schreibweise angegeben.
33333(dez) ist NICHT gleich 33333(hex)!


Grob kann man sich das so vorstellen, mein Wert ist 5, der soll mit XOR10 verschlüsselt werden. Dann kommt dabei 15 heraus.
Kennt man den Schlüssel muss man bloss NOCHEINMAL die "Verschlüsselung" durchführen: 15 XOR 10 = 5
Oder VERMUTET man bei dem Wert 15 das es sich um die verschlüsselte 5 handelt.. kann man 15 XOR 5 machen.. um den Schlüssel zu bekommen: 10!!

Wie man sieht nutzt einem das *normale* Vorgehen mit der Durchsuchung des Speichers.. gar nichts -.-
Normal bedeutet: Man scannt den Speicher auf einen z.B. unbekannten Startwert und lässt einen Wert sich ändern(Gold, Leben, Wasserflaschen, ..)
Beispiel:
Der Spieler hat 0 Goldstücke (bei XOR-Verschlüsselung müsste die Speicherzelle für GOLD dann GENAU dem Schlüssel entsprechen!!)
Ein Goldstück(=1) kommt hinzu.. scannt man auf > und findet erhöhte Werte, was ja passt(siehe Tabelle: XOR10: Schlüssel+1)
Ein weiteres Goldstück(=2) .. scannt man NUN auf > wird man die Speicherzelle hiermit verlieren, denn codiert(XOR10) ist der Wert nun GERINGER!

Einzige Möglichkeit: Statt auf < bzw. > zu scannen muss man auf VERÄNDERTE Werte scannen (!=) was natürlich arg dauert..
Ideal wäre natürlich den gesuchten Wert auf NULL fallen zu lassen, dann hätte man auch den Schlüssel..

Beispiel: Frostgard (./linux/hl sdlboot.dat) -.-
Spiel jeweils pausieren wenn sich die Werte(hier Nahrung) ändern.
Zuerst vermutet man die Zahlen als INT32(ist einfacher) abgelegt.
* Scan auf UNBEKANNTE INT32 Werte(2307537288 Treffer, 14GB Speicher belegt..)
. Nahrung: 85
* Scan auf unveränderte Werte(=) (2000435390 Treffer, 13GB Speicher)dauert EEEWIG -.- vielleicht lieber diesen einen Schritt weglassen?
. Nahrung: 87
* Scan auf VERÄNDERTE Werte(!=) (0065012570 Treffer)
* Scan auf UNveränderte Werte(=)(0064602586 Treffer
. Nahrung: 88
* Scan auf VERÄNDERTE Werte(!=) (0000568948 Treffer)
* Scan auf UNveränderte Werte(=)(0000561063 Treffer
. Nahrung: 90
* Scan auf VERÄNDERTE Werte(!=) (0000186731 Treffer)
. Nahrung: 91
* Scan auf VERÄNDERTE Werte(!=) (0000175200 Treffer)
. Nahrung: 102
* Scan auf VERÄNDERTE Werte(!=) (0000000114 Treffer) (Spezial: Spiel so stoppen, das gerade KEINE Veränderung bei der Nahrung auftritt und auf UNVERÄNDERT Scannen..)
Weniger als 114 Treffer schaffe ich nicht -.-
5 negative?! Zahlen, ca. 80 mal kommt 531 vor..
Tja, hat nicht geklappt.. weil das Programm fieserweise abgeschmiert ist.. als ich einen verdächtigen Wert änderte..

Diese Seite wurde zuletzt am 10.05.2023 um 20:50 geändert.

(c) 2024 DHLF ☮🇺🇦