• Trainer
  • Forums
  • Suche
  • Members
  • Kalender
  • Hilfe
  • Extras
Forum stats
Show team
Neue Beiträge ansehen
Heutige Beiträge ansehen
Home of Gamehacking - Archiv
Login to account Create an account
Login
Benutzername:
Passwort: Passwort vergessen?
 



  Home of Gamehacking - Archiv Gamehacking Gamehacking
« Zurück 1 2 3 4 5 6 ... 8 Weiter »
Harvest Massive Encounter v1.18 Singleplayer Money cheat

Seiten (2): « Zurück 1 2
Ansichts-Optionen
Harvest Massive Encounter v1.18 Singleplayer Money cheat
Injexdoor Offline
Junior Member
**
Beiträge: 5
Themen: 1
Registriert seit: Feb 2013
Bewertung: 0
#11
01.03.2013, 00:01 (Dieser Beitrag wurde zuletzt bearbeitet: 01.03.2013, 01:07 von Injexdoor.)
Nabend,

vielen Dank an euch alle, ich habe es hinbekommen.

Es ist vielleicht nicht die sauberste Lösung aber diese funktioniert, ich habe einfach in der Subroutine des Call 0046A5D0 nach der Entschlüsselung via ci
und mov edi,ff meinen Geldbetrag auf 255 fixiert.

Ich würde dennoch gerne wissen wie du dieses durch eine eigene Routine gelöst hast.

[Edit] Das War einmal nichts, denn auch das threat Level ist auf 255 obwohl der Wert zu dem Zeitpunkt dem Geldwert entspricht. Runde 2[/Edit]

[Edit 2] Absolut interessant was die ci an der Position für Auswirkung hat selbst die benötigte Energie und Kosten der Gebäude sind auf den Wert fixiert[/Edit 2]

Mit freundlichen Grüßen

Injexdoor
Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#12
01.03.2013, 01:49 (Dieser Beitrag wurde zuletzt bearbeitet: 01.03.2013, 05:16 von iNvIcTUs oRCuS.)
Wie Acubra schon sagte...
Durch diese Subroutine läuft auch die Verschlüsselung verschiedener anderer Werte.
Und da du den Speicher nicht weiter ausgefiltert hast änderst du nicht nur den Geldwert sondern alles andere auch...

Das Spiel selbst hab ich nicht mehr auf der Platte, aber es könnte durchaus sein das du noch nicht mal den Wert richtig geschrieben hast.
Ich meine, es wird zwar angezeigt das dein Geldwert 255 ist es aber durchaus sein könnte das du nur die grafische Anzeige auf 255 gesetzt hast, also der Geldwert reell dennoch abnimmt.
Aber wenn dem so ist das deine Lösung für das Geld erstmal funktioniert dann müsste das vielleicht etwas einfacher gehen...


EDIT//
Das mit der eigenen Routine ist ganz simpel. Du kopierst den Inhalt der Subroutine an eine freie Stelle im Speicher. Dann änderst Du diesen Befehl...
[code=ASM]004101C2 |. E8 09A40500 |call 0046A5D0h[/code] dementsprechend um damit die Subroutine aufgerufen wird die Du grade kopiert hast. Wenn Du also den Inhalt der Routine z.B. an Adresse 0x400400h kopiert hast änderst Du den Befehl von "call 0046A5D0h" zu "call 00400400h". Dann kannst Du innerhalb dieser Routine, die an Adresse 0x400400h beginnt deine CI machen wie Du es beschrieben hast.
Ich hab mich aber jetzt für eine andere Möglichkeit entschieden die meines Erachtens auch eleganter und einfacher ist. Diese erfordert zwar zwei Codecaves, aber dennoch können auch andere Optionen berücksichtigt werden.
Diese Lösung könnte ich hier mal posten und entsprechend dazu erklären. So ist es für dich sicherlich einfacher und verständlicher.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#13
03.03.2013, 19:23
@Injexdoor
Na, hast Du schon weitere Erfolge erziehlt???
Is recht ruhig geworden hier Wink
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Injexdoor Offline
Junior Member
**
Beiträge: 5
Themen: 1
Registriert seit: Feb 2013
Bewertung: 0
#14
04.03.2013, 01:22
Nabed,

derzeit klappt es nur mit dem ersetzen der Routine, für alles andere fehlt mir noch das nötige Know How, ich arbeite aber daran Smiling

Folgendes hat mich beim Verständnis etwas verwundert:

Ich habe einen break vor dem Call 0046A5D0h gesetzt die Routine bearbeitet und einen break nach der Routine gesetzt, aber dennoch wird ebenfalls das Threadlevel geändert. Vielleicht habe ich etwas falsch gemacht aber an sich dürfte sich ja nur der Geldwert ändern den der zweite Call zur gleichen Adresse folgt erst deutlich später und da ist die Routine ja wieder Original.

Wenn man via "Step" den Codeverlauf verfolgt, wieso ändert sich dann hin und wieder mal der Wert von EDI etc. ohne das ein pop oder push Befehl gesetzt wird, der Stack kann sich ja nicht von selbst sortieren.

Mit freundlichen Grüßen

Injexdoor
Suchen
Antworten
iNvIcTUs oRCuS Offline
Super Moderator
****
Beiträge: 2.688
Themen: 529
Registriert seit: Aug 2010
Bewertung: 19
#15
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.



Codecave 1 / Codeinjection 1 hab ich hier gemacht:
Der Originalcode "004101C2 |. E8 09A40500 |call 0046A5D0h" wird mit dem Sprung zur Codecave "004101C2 - E9 4902FFFF - jmp 00400410" überschrieben. Folglich befindet sich die Codecave 1 an Adresse 00400410h. Die Codecave 1 sind dann folgendermaßen aus:
[code=ASM]00400410 - C7 05 00044000 78563412 - mov [00400400],12345678
0040041A - E8 B1A10600 - call 0046A5D0
0040041F - E9 A3FD0000 - jmp 004101C7[/code]Und was passiert da? Das ist schnell erklärt. Innerhalb der Codecave wird der HEX-Wert 12345678 an Adresse 00400400h in den Speicher geschrieben. Das ist einfach ein fiktiver Wert den ich selbst festgelegt hab um sicherzustellen das wenn die Routine aufgerufen wird die Berrechnung des Geldwertes stattfindet. Dazu später noch mehr.
Danach wird der Originalcode geschrieben bzw. ausgeführt der ja durch den Sprung zu Codecave überschrieben wurde. Zuguterletzt wird aus der Codecave zurück in den normalen Programmablauf gesprungen. Deswegen der Befehl "0040041F - E9 A3FD0000 - jmp 004101C7".


Die zweite Codeinjection hab ich dann innerhalb der Encryption-Routine gemacht. Diese sieht dann folgendermaßen aus...
Der Originalcode: [code=ASM]0046A5D9 - 57 - push edi
0046A5DA - 8B 38 - mov edi,[eax]
0046A5DC - 33 39 - xor edi,[ecx][/code]wird hier mit dem Jump zur Codecave 2, nämlich "0046A5D9 - E9 525EF9FF - jmp 00400430" überschrieben. Folglich befindet sich die Codecave 2 an Adresse 00400430h. Die Codecave 2 sieht dann folgendermaßen aus:
[code=ASM]00400430 - 57 - push edi
00400431 - 81 3D 00044000 78563412 - cmp [00400400],12345678
0040043B - 74 09 - je 00400446
0040043D - 8B 38 - mov edi,[eax]
0040043F - 33 39 - xor edi,[ecx]
00400441 - E9 98A10600 - jmp 0046A5DE
00400446 - C7 05 00044000 00000000 - mov [00400400],00000000
00400450 - BF E7030000 - mov edi,000003E7
00400455 - 33 39 - xor edi,[ecx]
00400457 - 89 38 - mov [eax],edi
00400459 - EB E4 - jmp 0040043F
0040045B - 90 - nop [/code]So und was passiert nun hier? Ich denke das dürfte dir schon fast klar sein. In erster Linie wird der Originalcode "push edi" ausgeführt. Der nächste Befehl "cmp [00400400],12345678" prüft nun die Adresse [00400400] ob diese den Wert 12345678h hat. Wenn der Wert ungleich des erwarteten ist dann wird der weitere Originalcode ausgeführt und aus der Codecave zurück in den normalen Programmablauf gesprungen. Für das Spiel, bzw. unseren Cheat, würde das dann bedeuten das die Routine zwar aufgerufen wurde, aber nicht um den Geldwert zu berrechnen. Wenn der Wert allerdings gleich ist dann wird zu Adresse 00400446h gesprungen und der eigentliche Cheat beginnt. Zuerst wird der Wert der Adresse 00400400h wieder auf 0 gesetzt, das ist ganz wichtig. Sonst wäre wieder der Fall gegeben wie bei dir. Der Cheat würde immer durchlaufen und sämtliche Werte würden auf ein und denselben gesetzt. Mit dem Befehl "mov edi,000003E7" geb ich praktisch den Geldwert vor den ich später im Spiel immer haben möchte (3E7hex = 999dez). Dieser Wert wird mit dem aktuellen XOR Schlüssel, welcher sich in [ECX] befindet, verschlüsselt. Das Register EDI enthält nun den verschlüsselten Geldwert. Dieser verschlüsselte Wert wird mit dem Befehl "mov [eax],edi" in die Geldadresse zurückgeschrieben die zu diesem Zeitpunkt noch den ursprünglichen Geldwert enthält. Zuguterletzt wird mit dem Befehl "jmp 0040043F" zurück zu Adresse 0040043Fh gesprungen um den restlichen Originalcode auszuführen und um schließlich wieder raus aus der Codecave zu springen und den weiteren Programmablauf zu folgen...
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.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!

Traineranfragen per PM werden prinzipiell gelöscht...

[Bild: signatur6akm7.gif]
Suchen
Antworten
Share Thread:            
Seiten (2): « Zurück 1 2


  • Druckversion anzeigen
  • Thema abonnieren


Benutzer, die gerade dieses Thema anschauen:

  • Kontakt
  • Forum team
  • Forum stats
  • Nach oben
 
  • RSS-Synchronisation
  • Lite mode
  • Home of Gamehacking - Archiv
  • Help
 
Forum software by © MyBB - Theme © iAndrew 2014



Linearer Modus
Baumstrukturmodus