Step 8

Multilevel Pointers

 

Willkommen im letzten Step der "Tutorial.exe".
Hier lernen wir, wie wir "Multilevel Pointer" finden können.
Das sind Pointer, die auf mehrere Pointer zeigen.
Ein "Level-4 Pointer" ist also ein "Pointer, der auf einen Pointer zeigt, der wieder auf einen Pointer zeigt,
der auf einen Pointer zeigt, der auf den Pointer zeigt der auf unsere Zieladresse zeigt"
.

Ziel ist es in diesem Step, dass wir den "Level-4 Pointer" finden und unseren Wert auf "5000" setzen und einfrieren.

Step08_01

 

 

Als erstes wie gehabt, ganz normal nach dem aktuellen Wert suchen... in meinem Fall die "1803"

Step08_02

 

 

Mit doppelklick wieder nach unten kopieren.
Rechtsklick und "Find out what writes to this address" wählen.

Step08_03

 

 

Ein leeres Debuggerfenster öffnet sich wieder

Step08_04

 

 

Klicken wir in der "Tutorial.exe" nun auf "Change value" ändert sich unser Wert und im Debuggerfenster erscheint eine Codezeile.
Auf diese machen wir einen Doppelklick.

Step08_05

 

 

In der Rot markierten Zeile finden wir die Instruktion die ausgeführt wird.
Der inhalt von "EAX" wird dementsprechend in das Register "RSI+18" kopiert.
Die "18" ist unser "Offset", welche wir nun merken bzw aufschreiben sollten.
Der inhalt von "RSI" finden wir wie gehabt unten und enthält die Adresse "02CD2BE0",
Diese können wir einfach kopieren indem wir in der Mitte auf der Adresse einen Rechtsklick machen.

Step08_06

 

 

Klicken auf "New Scan" und aktivieren das Kästchen "Hex" und suchen nach der eben gefundenen Adresse.
Wir finden die Adresse "011BBAF0" welche unsere Adresse beinhaltet.
Wir doppelklicken diese, damit sie unten gespeichert wird.

Step08_07

 

 

Nun erfolgt ein wichtiger Schritt. Wir müssen diesen Eintrag in einen Pointer umwandeln.
Dazu einfach einen Doppelklick auf die Adresse "011BBAF0" machen, damit sich dieses Fenster öffnet (STRG+ALT+ENTER).
Wir kopieren gleich die Adresse "011BBAF0" und aktivieren die Checkbox "Pointer"

Step08_08

 

 

Die kopierte Adresse "011BBAF0" fügen wir hier gleich ganz unten wieder ein.
Wir erinnern uns aber, dass wir einen "Offset von 18" hatten... diesen müssen wir hier auch angeben.
Wir bestätigen die Eingaben mit "OK"

Step08_09

 

 

Haben wir alles richtig gemacht, sollte es nun folgendermaßen aussehen.
Bei Adresse sollte nun ein "P->" davorstehen... das bedeutet, dass diese Adresse ein Pointer ist.
Genau wie der Wert, der sollte nun genau der gleiche sein wie oben.
Ist das alles so richtig, ist der erste Schritt erfolgreich abgeschlossen.
Die nächsten Schritte werden nämlich genau so wiederholt, bis wir den Base Pointer gefunden haben.

Step08_10

 

 

Wir machen also wieder einen Rechtsklick auf die Zeile mit unserem Pointer und wählen diesmal
"Find out what accesses this address"

Step08_11

 

 

Da es sich hier jetzt um einen Pointer handelt, müssen wir angeben ob wissen wollen was auf den Pointer zugreift
oder was auf die Adresse auf die der Pointer zeigt zugreift.
Wir wollen natürlich wissen was auf den Pointer zugreift und wählen die erste Option.

Step08_12

 

 

Wie gesagt... nun wiederholen sich im großen und ganzen die Schritte...
In der "Tutorial.exe" klicken wir nun auf "Change value"

Step08_13

 

 

Im Debugger erscheinen 2 Instruktionen... wir doppelklicken den ersten Eintrag

Step08_14

 

 

Hier wird der Inhalt von "RSI nach RAX" kopiert... diesmal "ohne Offset"!
Wir machen wieder einen Rechtsklick auf die Adresse "011BBAF0" in der Mitte um diese zu kopieren

Step08_15_01

 

 

Starten wieder eine neue Suche und achten darauf, dass die Checkbox "HEX" aktiviert ist.
Fügen die eben kopierte Adresse "011BBAF0" ein und klicken auf "First Scan".
Wir finden die Adresse "02CA2E78" die wir gleich wieder nach unten doppelklicken.

Step08_16

 

 

Ganz schlaue kopieren nun die Adresse "02CA2E78" und erweitern den vorhandenen Pointer in der Mitte.
Ich werde hier aber zu übungszwecken den Pointer neu erstellen :-)

Wir machen also wieder einen Doppelklick auf die Adresse "02CA2E78" oder drücken "STRG+ALT+ENTER"
Kopieren gleich die Adresse "02CA2E78" und aktivieren die Checkbox "Pointer"

Step08_17

 

 

Fügen ganz unten gleich wieder die kopierte Adresse ein.
Einen Offset hatten wir diesmal nicht, daher bleibt dieser hier auf 0 stehen.
Nun müssen wir den Pointer von der ersten Suche noch angeben.
Also auf "Add pointer" klicken.
Der Offset der ersten Suche war wie wir uns erinnern 18... daher schreiben wir 18 in das Feld

Step08_18

 

 

Nun sollte es folgendermaßen aussehen.
Auch in der dritten Zeile sollte nun bei der Adresse ein "P->" erschienen sein und der Wert sollte genau der selbe sein wie die anderen.

Wir wiederholen das Spiel ein weiteres mal. Machen einen Rechtsklick auf die dritte Zeile und wählen wieder
"Find out what accesses this address"

Step08_19

 

 

Bestätigen wieder, dass wir wissen wollen was auf den Pointer zugreift.
(Erste Option)

Step08_12

 

 

Klicken dann in der "Tutorial.exe" wieder auf "Change value"

Step08_20

 

 

Nun erscheinen wieder zwei Instruktionen.
Wir doppelklicken die erste

Step08_21

 

 

Hier wird der Inhalt von "RSI+18" nach "RAX" kopiert.
Hier gibt es wieder einen Offset von 18... gleich aufschreiben.
Die Adresse "02CA2E60" die in der Mitte steht kopieren wir mit einem Rechtsklick.

Step08_21_01

 

 

Starten eine neue Suche nach der eben kopierten Adresse und achten wieder darauf, dass "HEX" aktiviert ist.
Die gefundene Adresse wird wieder mit einem Doppelklick nach unten kopiert und wir ändern wieder die Adresse.

Step08_22

 

 

Die Adresse gleich wieder kopieren und den haken bei Pointer setzen

Step08_23

 

 

Ganz unten wieder einfügen und an den "Offset von 18" denken.
Zweimal "Add pointer" anklicken, da dies ja unser dritter Pointer ist.
Die Offsets eintragen und mit "OK" bestätigen.

Step08_24

 

 

Auch hier sollte nun das "P->" angezeigt werden und alle Werte gleich sein!
Wir wiederholen das Spiel nun noch einmal :-)

Wieder Rechtsklick auf den Pointer und "Find out what accesses this pointer" wählen.

Step08_25

 

 

Wir wählen wieder die erste Option...

Step08_12

 

 

...und klicken ein weiteres Mal auf "Change value" in der "Tutorial.exe"

Step08_26

 

 

Doppelklicken den ersten Eintrag... merken uns den "Offset von 10"
und kopieren wieder die Adresse "0115C990" mit einem Rechtsklick.

Step08_27

 

 

Nach dieser suchen wir wieder wie gehabt und finden diesmal eine "Grüne Adresse".
Diese Adresse ist unser "Base Pointer".
Doppelklicken sie wieder nach unten und ändern die Adresse

Step08_28

 

 

Kopieren die Adresse und aktivieren die Checkbox "Pointer"...

Step08_29

 

 

...und fügen sie gleich wieder ganz unten ein.
Klicken 3x auf "Add pointer" und fügen unsere Offsets ein.

Step08_30

 

 

Wieder sollte alles den selben Wert haben.
Da wir nun den "Base Pointer" gefunden haben sollte die letzten Adresse immer auf die richtige Adresse mit unserem Wert zeigen.

Step08_31

 

 

Um das zu testen, klicken wir in der "Tutorial.exe" auf den Button "Change pointer"

Step08_32

 

 

Haben wir keine Fehler gemacht, sollte der "Level-4 Pointer" immer noch auf die richtige Adresse zeigen.
Ist das so... dann haben wir es geschafft :-)

Step08_33

 

 

Das Ziel ist es nun, den Wert auf "5000" zu setzen und einzufrieren.
Wir ändern also dementsprechend unseren Wert auf "5000" und frieren ihn mit der Checkbox ein

Step08_34

 

 

Der "Next" Button wird aktiviert und Step 8 wurde erfolgreich absolviert.

Step08_35

 

 

Zurück zur Übersicht