Home of Gamehacking - Archiv
Harvest Massive Encounter v1.18 Singleplayer Money cheat - Druckversion

+- Home of Gamehacking - Archiv (http://archiv-homeofgamehacking.de)
+-- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=3)
+--- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=6)
+--- Thema: Harvest Massive Encounter v1.18 Singleplayer Money cheat (/showthread.php?tid=1366)

Seiten: 1 2


RE: Harvest Massive Encounter v1.18 Singleplayer Money cheat - Injexdoor - 01.03.2013

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


RE: Harvest Massive Encounter v1.18 Singleplayer Money cheat - iNvIcTUs oRCuS - 01.03.2013

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.


RE: Harvest Massive Encounter v1.18 Singleplayer Money cheat - iNvIcTUs oRCuS - 03.03.2013

@Injexdoor
Na, hast Du schon weitere Erfolge erziehlt???
Is recht ruhig geworden hier Wink


RE: Harvest Massive Encounter v1.18 Singleplayer Money cheat - Injexdoor - 04.03.2013

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


RE: Harvest Massive Encounter v1.18 Singleplayer Money cheat - iNvIcTUs oRCuS - 04.03.2013

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...
[attachment=1344]

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.