hacktricks/reversing/reversing-tools-basic-methods/cheat-engine.md

11 KiB

Cheat Engine

{% hint style="success" %} Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Cheat Engine ist ein nützliches Programm, um herauszufinden, wo wichtige Werte im Speicher eines laufenden Spiels gespeichert sind und sie zu ändern.
Wenn du es herunterlädst und ausführst, wirst du mit einem Tutorial konfrontiert, wie man das Tool benutzt. Wenn du lernen möchtest, wie man das Tool verwendet, wird dringend empfohlen, es abzuschließen.

Was suchst du?

Dieses Tool ist sehr nützlich, um herauszufinden, wo ein Wert (normalerweise eine Zahl) im Speicher eines Programms gespeichert ist.
Normalerweise werden Zahlen in 4 Bytes gespeichert, aber du könntest sie auch in double oder float Formaten finden, oder du möchtest nach etwas anderem als einer Zahl suchen. Aus diesem Grund musst du sicherstellen, dass du auswählst, wonach du suchen möchtest:

Außerdem kannst du verschiedene Arten von Suchen angeben:

Du kannst auch das Kästchen ankreuzen, um das Spiel während des Scannens des Speichers zu stoppen:

Hotkeys

In Bearbeiten --> Einstellungen --> Hotkeys kannst du verschiedene Hotkeys für verschiedene Zwecke festlegen, wie z.B. das Spiel zu stoppen (was sehr nützlich ist, wenn du zu einem bestimmten Zeitpunkt den Speicher scannen möchtest). Weitere Optionen sind verfügbar:

Wert ändern

Sobald du gefunden hast, wo der Wert ist, den du suchst (mehr dazu in den folgenden Schritten), kannst du ihn ändern, indem du doppelt darauf klickst und dann erneut auf seinen Wert doppelt klickst:

Und schließlich das Kästchen ankreuzen, um die Änderung im Speicher vorzunehmen:

Die Änderung im Speicher wird sofort angewendet (beachte, dass der Wert nicht im Spiel aktualisiert wird, bis das Spiel diesen Wert nicht erneut verwendet).

Wert suchen

Angenommen, es gibt einen wichtigen Wert (wie das Leben deines Benutzers), den du verbessern möchtest, und du suchst nach diesem Wert im Speicher.

Durch eine bekannte Änderung

Angenommen, du suchst nach dem Wert 100, du führst einen Scan durch, um nach diesem Wert zu suchen, und du findest viele Übereinstimmungen:

Dann machst du etwas, damit sich der Wert ändert, und du stopst das Spiel und führst einen nächsten Scan durch:

Cheat Engine wird nach den Werten suchen, die von 100 auf den neuen Wert gewechselt sind. Glückwunsch, du hast die Adresse des Wertes gefunden, den du gesucht hast, und kannst ihn jetzt ändern.
Wenn du immer noch mehrere Werte hast, mache etwas, um diesen Wert erneut zu ändern, und führe einen weiteren "nächsten Scan" durch, um die Adressen zu filtern.

Unbekannter Wert, bekannte Änderung

In dem Szenario, dass du den Wert nicht kennst, aber weißt, wie du ihn ändern kannst (und sogar den Wert der Änderung), kannst du nach deiner Zahl suchen.

Beginne also mit einem Scan vom Typ "Unbekannter Anfangswert":

Dann ändere den Wert, gib an, wie sich der Wert geändert hat (in meinem Fall wurde er um 1 verringert) und führe einen nächsten Scan durch:

Dir werden alle Werte angezeigt, die auf die ausgewählte Weise geändert wurden:

Sobald du deinen Wert gefunden hast, kannst du ihn ändern.

Beachte, dass es eine Menge möglicher Änderungen gibt und du diese Schritte so oft du willst wiederholen kannst, um die Ergebnisse zu filtern:

Zufällige Speicheradresse - Den Code finden

Bis jetzt haben wir gelernt, wie man eine Adresse findet, die einen Wert speichert, aber es ist sehr wahrscheinlich, dass in verschiedenen Ausführungen des Spiels diese Adresse an verschiedenen Stellen im Speicher ist. Lass uns also herausfinden, wie man diese Adresse immer findet.

Verwende einige der erwähnten Tricks, um die Adresse zu finden, an der dein aktuelles Spiel den wichtigen Wert speichert. Dann (stoppe das Spiel, wenn du möchtest) mache einen Rechtsklick auf die gefundene Adresse und wähle "Herausfinden, was auf diese Adresse zugreift" oder "Herausfinden, was in diese Adresse schreibt":

Die erste Option ist nützlich, um zu wissen, welche Teile des Codes diese Adresse verwenden (was für mehr Dinge nützlich ist, wie z.B. zu wissen, wo du den Code des Spiels ändern kannst).
Die zweite Option ist spezifischer und wird in diesem Fall hilfreicher sein, da wir daran interessiert sind zu wissen, von wo dieser Wert geschrieben wird.

Sobald du eine dieser Optionen ausgewählt hast, wird der Debugger an das Programm angehängt und ein neues leeres Fenster erscheint. Jetzt spiele das Spiel und ändere diesen Wert (ohne das Spiel neu zu starten). Das Fenster sollte mit den Adressen gefüllt sein, die den Wert ändern:

Jetzt, da du die Adresse gefunden hast, die den Wert ändert, kannst du den Code nach Belieben ändern (Cheat Engine ermöglicht es dir, ihn schnell in NOPs zu ändern):

So kannst du ihn jetzt so ändern, dass der Code deine Zahl nicht beeinflusst oder immer positiv beeinflusst.

Zufällige Speicheradresse - Den Zeiger finden

Folge den vorherigen Schritten, um herauszufinden, wo sich der Wert befindet, der dich interessiert. Verwende dann "Herausfinden, was in diese Adresse schreibt", um herauszufinden, welche Adresse diesen Wert schreibt, und doppelklicke darauf, um die Disassemblierungsansicht zu erhalten:

Führe dann einen neuen Scan durch, indem du nach dem hexadezimalen Wert zwischen "[]" suchst (der Wert von $edx in diesem Fall):

(Wenn mehrere erscheinen, benötigst du normalerweise die kleinste Adresse)
Jetzt haben wir den Zeiger gefunden, der den Wert ändert, an dem wir interessiert sind.

Klicke auf "Adresse manuell hinzufügen":

Klicke jetzt auf das Kontrollkästchen "Zeiger" und füge die gefundene Adresse in das Textfeld ein (in diesem Szenario war die gefundene Adresse im vorherigen Bild "Tutorial-i386.exe"+2426B0):

(Beachte, dass die erste "Adresse" automatisch mit der Zeigeradresse ausgefüllt wird, die du eingibst)

Klicke auf OK und ein neuer Zeiger wird erstellt:

Jetzt, jedes Mal, wenn du diesen Wert änderst, änderst du den wichtigen Wert, auch wenn die Speicheradresse, an der der Wert ist, unterschiedlich ist.

Code-Injektion

Code-Injektion ist eine Technik, bei der du ein Stück Code in den Zielprozess injizierst und dann die Ausführung des Codes so umleitest, dass sie durch deinen eigenen geschriebenen Code geht (zum Beispiel, um dir Punkte zu geben, anstatt sie abzuziehen).

Stell dir vor, du hast die Adresse gefunden, die 1 vom Leben deines Spielers abzieht:

Klicke auf "Disassembler anzeigen", um den disassemblierten Code zu erhalten.
Dann klicke CTRL+a, um das Auto-Assembly-Fenster aufzurufen, und wähle Vorlage --> Code-Injektion

Fülle die Adresse der Anweisung, die du ändern möchtest (dies wird normalerweise automatisch ausgefüllt):

Eine Vorlage wird generiert:

Füge deinen neuen Assembly-Code in den Abschnitt "newmem" ein und entferne den ursprünglichen Code aus dem Abschnitt "originalcode", wenn du nicht möchtest, dass er ausgeführt wird. In diesem Beispiel wird der injizierte Code 2 Punkte hinzufügen, anstatt 1 abzuziehen:

Klicke auf Ausführen und so weiter, und dein Code sollte in das Programm injiziert werden, wodurch das Verhalten der Funktionalität geändert wird!

Referenzen

  • Cheat Engine Tutorial, schließe es ab, um zu lernen, wie man mit Cheat Engine anfängt

{% hint style="success" %} Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}