04.03.2013, 18:32
Ich sage mal so...
Falsch gemacht hast Du in diesem Sinne nichts. Aber Du hast eben eine Sache nicht bedacht.
Die Encryption/Decryption Routine wird mehrfach aufgerufen.
Z.B. wird diese aufgerufen wenn der Geldwert berrechnet wird. Auch wird diese aufgerufen wenn der Threat Level kalkuliert wird. Und ebenfalls wird diese aufgerufen wenn es z.B. um die Baukosten geht.
Um dir das vielleicht mal grafisch zu zeigen hab ich mal ganz schnell ein Schema aufgestellt wie das bei diesem Spiel aussieht...
Wenn das Spiel im Programmcode an diese Adresse kommt:
[code=ASM]004101C2 |. E8 09A40500 |call 0046A5D0h[/code]
Dann werden sämtliche Daten an die Routine übergeben die von Nöten sind. D.h. sämtliche Register haben die benötigten Werte die relevant sind. Die Routine wird durchlaufen und aus der Routine kehrt das Spiel an diese Adresse zurück:
[code=ASM]004101C7 |. 8986 E4010000 |mov dword ptr [esi+000001E4h], eax[/code]
Und der Geldwert der im Register EAX steht wird zurück in den Speicher an Adresse "[esi+000001E4h]" geschrieben.
D.h. wenn Du deinen Money Cheat innerhalb der Encryption Routine einbaust dann musst Du auch sicherstellen das wenn dieser Cheat ausgeführt wird auch momentan nur eine Geldadresse durchlaufen wird.
Und da Du deinen Cheat sicherlich ohne die Adressen zu filtern implementiert hast wird dieser auch ausgeführt wenn z.B. eine Threat Level oder Baukosten Adresse durchlaufen wird.
Und das EDI öfters mal einen anderen Wert bzw. ne andere Adresse hat liegt wohl daran das die Verschlüsselung dynamisch ist. Sieht man auch das der XOR Schlüssel öfters bzw. immer wieder anders ist. Aber das sind eben nur Daten die innerhalb der Routine von Belang sind. Schlussendlich ist am Ende der Funktion der Wert um den es geht immer im EAX Register zu finden.
Wie ich schon weiter oben schrieb hab ich mal ne Lösung gebastelt die allerdings 2 Codecaves erfordert.
Das ist der ganze Zauber.
Nur eins noch... Das ist nur eine, bzw. meine Lösung. Soll heißen, es gibt noch andere Lösungsmöglichkeiten aber diese ist nur eine davon.
Falsch gemacht hast Du in diesem Sinne nichts. Aber Du hast eben eine Sache nicht bedacht.
Die Encryption/Decryption Routine wird mehrfach aufgerufen.
Z.B. wird diese aufgerufen wenn der Geldwert berrechnet wird. Auch wird diese aufgerufen wenn der Threat Level kalkuliert wird. Und ebenfalls wird diese aufgerufen wenn es z.B. um die Baukosten geht.
Um dir das vielleicht mal grafisch zu zeigen hab ich mal ganz schnell ein Schema aufgestellt wie das bei diesem Spiel aussieht...
Wenn das Spiel im Programmcode an diese Adresse kommt:
[code=ASM]004101C2 |. E8 09A40500 |call 0046A5D0h[/code]
Dann werden sämtliche Daten an die Routine übergeben die von Nöten sind. D.h. sämtliche Register haben die benötigten Werte die relevant sind. Die Routine wird durchlaufen und aus der Routine kehrt das Spiel an diese Adresse zurück:
[code=ASM]004101C7 |. 8986 E4010000 |mov dword ptr [esi+000001E4h], eax[/code]
Und der Geldwert der im Register EAX steht wird zurück in den Speicher an Adresse "[esi+000001E4h]" geschrieben.
D.h. wenn Du deinen Money Cheat innerhalb der Encryption Routine einbaust dann musst Du auch sicherstellen das wenn dieser Cheat ausgeführt wird auch momentan nur eine Geldadresse durchlaufen wird.
Und da Du deinen Cheat sicherlich ohne die Adressen zu filtern implementiert hast wird dieser auch ausgeführt wenn z.B. eine Threat Level oder Baukosten Adresse durchlaufen wird.
Und das EDI öfters mal einen anderen Wert bzw. ne andere Adresse hat liegt wohl daran das die Verschlüsselung dynamisch ist. Sieht man auch das der XOR Schlüssel öfters bzw. immer wieder anders ist. Aber das sind eben nur Daten die innerhalb der Routine von Belang sind. Schlussendlich ist am Ende der Funktion der Wert um den es geht immer im EAX Register zu finden.
Wie ich schon weiter oben schrieb hab ich mal ne Lösung gebastelt die allerdings 2 Codecaves erfordert.
Nur eins noch... Das ist nur eine, bzw. meine Lösung. Soll heißen, es gibt noch andere Lösungsmöglichkeiten aber diese ist nur eine davon.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
Traineranfragen per PM werden prinzipiell gelöscht...