In c++ Ce Pointer benutzen

08/07/2010 14:18 ●ROBBY●#1
Also ich suche jetzt schon seit langem im Internet wie man In C++ den Wert der Adresse auf welche der Pointer zeigt auszulesen oder überschreiben kann.
Hier erstmal den Pointer den ich mit Ce gefunden habe:
[Only registered and activated users can see links. Click Here To Register...]

Und ich will halt jetzt in C++ den Wert der Adresse auf welche der Lvl-2 Pointer zeigt ändern. Ich habe schon gehört dass man i-wie die Offsets zu der Baseadress addieren muss aber habe nicht genaues gefunden, außerdem weiß ich auch nicht sicher welches die Baseadress ist.

Ich wollte zum auslesen aund schreiben [Only registered and activated users can see links. Click Here To Register...] und [Only registered and activated users can see links. Click Here To Register...] benutzen. Mit ganz normalen Adressen ist mir dies auch schon gelungen.

Edit: Habe jetzt Herausgefunden dass metin2client.bin für 00400000 steht welches glaube ich die Baseadres ist aber wirklich weiter bringt es micht nicht :(
08/07/2010 15:12 Shadow992#2
Du musst zuerst die Adresse nehmen, die die Adresse von dir als Value hat.
Dann liest du den Wert aus addierst ihn mit dem ersten Offset.
Anschliesend liest du wieder den Wert der neuen Adresse aus und addierst wieder das Offset drauf. Im Grunde wars das dann schon. Die letzte Adresse, die du hast ist dann die "echte" Adresse und diese kannst du dann verändern.
08/07/2010 15:25 MrSm!th#3
Jop oder unschön gehts auch mit C++ Dereferenzierung:

Code:
*(DWORD*)( ( *(DWORD*)( (*(DWORD*)(BASE+0x400000)) +OFFSET1) ) + OFFSET2) = 0x1337;
sollte so passen, aber wie man schon sieht, sieht unschön aus.
08/07/2010 15:58 Shadow992#4
Quote:
Originally Posted by MrSm!th View Post
Jop oder unschön gehts auch mit C++ Dereferenzierung:

Code:
*(DWORD*)( ( *(DWORD*)( (*(DWORD*)(BASE+0x400000)) +OFFSET1) ) + OFFSET2) = 0x1337;
sollte so passen, aber wie man schon sieht, sieht unschön aus.
What the hell?
Sieht aber gut aus. :D
Gut zu wissen, dass es so auch funktioniert. ^^
08/07/2010 16:26 ●ROBBY●#5
Quote:
Originally Posted by Shadow992 View Post
Du musst zuerst die Adresse nehmen, die die Adresse von dir als Value hat.
Dann liest du den Wert aus addierst ihn mit dem ersten Offset.
Anschliesend liest du wieder den Wert der neuen Adresse aus und addierst wieder das Offset drauf. Im Grunde wars das dann schon. Die letzte Adresse, die du hast ist dann die "echte" Adresse und diese kannst du dann verändern.
Also habe ich das richtig verstanden dass ich 00400000 + 0021BFEC rechnen muss dann davon den Wert auslesen, den Wert dann mit 3C addieren, dann den Wert der neuen Adresse mit 5B6 addieren und dann habe ich die richtige Adresse?

Edit: Vielen Dank bin jettt schon nen ganzen Stück weiter geholfen habe aber jetzt nen neues Problem. Also ich habe Als erstes 400000 + 21BFEC ausgerechnet da kam 61BFEC raus, dann habe ich auf "Add adress manually" gedrückt und die Adresse eingetragen. Dann stand unten bei der Adresse bei Value 1F0F0F44 also habe ich da die 3C raufaddiert und es kam 1F0F0F80 raus also habe ich wieder die Adresse manuell eingetragen aber bei Value steht dann nicht 3915D370 sondern die Dezimalzahl 957731696. Weiß nicht wo mein Fehler ist.
08/07/2010 16:39 Shadow992#6
Quote:
Originally Posted by ●ROBBY● View Post
Also habe ich das richtig verstanden dass ich 00400000 + 0021BFEC rechnen muss dann davon den Wert auslesen, den Wert dann mit 3C addieren, dann den Wert der neuen Adresse mit 5B6 addieren und dann habe ich die richtige Adresse?
Nein die Base brauchst du mit diesem Beispiel garnicht.
08/07/2010 16:51 ●ROBBY●#7
Doch brauchte die Base, aber hab ich ja oben schon reineditet.
08/07/2010 17:00 Shadow992#8
Quote:
Originally Posted by ●ROBBY● View Post
Doch brauchte die Base, aber hab ich ja oben schon reineditet.
Lass 00400000 weg und dann sollte es gehen.
08/07/2010 17:04 ●ROBBY●#9
Nein, dann geht es nicht. Hast du mein Edit richtig gelesen?

Hier nochmal mein Rechenweg 00400000+0021BFEC=0061BFEC 1F0F0F44(Wert von 0021BFEC)+3C=1F0F0F80 Dann müsste Der wert von 1F0F0F80 eig 3915D370 (ändert sich natürlich immer) sein aber ich bekomme ne Dezimalzahl raus nämlich 957731696.

Hier nochmal nen Screen:
[Only registered and activated users can see links. Click Here To Register...]
08/07/2010 17:12 Shadow992#10
Quote:
Originally Posted by ●ROBBY● View Post
Nein, dann geht es nicht. Hast du mein Edit richtig gelesen?

Hier nochmal mein Rechenweg 00400000+0021BFEC=0061BFEC 1F0F0F44(Wert von 0021BFEC)+3C=1F0F0F80 Dann müsste Der wert von 1F0F0F80 eig 3915D370 (ändert sich natürlich immer) sein aber ich bekomme ne Dezimalzahl raus nämlich 957731696.

Hier nochmal nen Screen:
[Only registered and activated users can see links. Click Here To Register...]
Klar, aber wo bitte kommen deine 00400000 her?
08/07/2010 17:14 ●ROBBY●#11
Das ist glaube ich die Hauptadresse von metinclient.bin jedenfalls steht die immer vor metin2client.bin wenn ich bei OllyDbg auf das "E" drücke. Außerdem hat mir glaub ich mal wer gesagt dass das die Baseadress ist. Achja und ich hatte davor ja auch noch geschriben dass wenn ich das metin2cient.bin von dem Pointer bei CE durch 00400000 ersetze ich trotzdem noch das gleiche Ergebniss habe.
08/07/2010 17:22 Shadow992#12
Quote:
Originally Posted by ●ROBBY● View Post
Das ist glaube ich die Hauptadresse von metinclient.bin jedenfalls steht die immer vor metin2client.bin wenn ich bei OllyDbg auf das "E" drücke. Außerdem hat mir glaub ich mal wer gesagt dass das die Baseadress ist.
Ich probier es nocheinmal, denn irgendwie habe ich das Gefühl, dass du sowieso das machst was du willst.
Damit du siehst, dass ich es bereits gesagt habe werde ich jetzt zitieren:
Quote:
Nein die Base brauchst du mit diesem Beispiel garnicht.
Du nimmst die Adressen so wie sie in CE sind.
Nur mal ein bisschen nachdenken:
Warum sollte CE dich anlügen, wenn du die Adresse gefunden hast?
Warum soll CE die falsche Adresse anzeigen? Kommts langsam?
Die Adresse (bzw. eine von den Adressen) muss fest sein!
Und genau mit dieser fängst du an und das ist der 1.Pointer.
Du nimmst also die Adresse, die eine andere Adresse als Value hat und diese andere Adresse muss dann wieder eine andere Adresse als Value haben.
Wenn du dann soweit bist, dann hast du die eigentliche Adresse.

Falls du damit nicht klar kommst, solltest du dir nocheinmal genau anschauen was Pointer sind und wie man sie benutzt.
Alternativ kannst du auch Smiths Methode nehmen...
08/07/2010 17:28 ●ROBBY●#13
Ich habe ja versucht es ohne die 00400000 zu machen aber dann komm ich überhaupt nicht vorran. Außerdem mache ich genau das was Ce mir sagt denn da stand metin2client.bin+0021BFEC da ich dass aber nicht rechnen kann habe ich einfach mal 00400000 statt metin2client.bin eingesetzt und der Pointer hat immernoch funktioniert wie er sollte.

Btw. Smith benutzt auch 00400000, ich glaube er war sogar derjenige der mier einmal den Tipp damit verraten hat. Außerdem wird seine Methode nicht funktionieren da er nicht den Wer der Adresse von 21BFEC+40000 nimmt sondern die Adresse selbst + das Offset.

Edit: Ahh ich habe jetzt die Rätsels Lösung. Ce hat mir den Wert von 1F0F0F80 nicht automatisch in Hex wie davor angezeigt ich musste es selbst umwandeln und jetzt habe ich den richtigen Wert.
08/07/2010 17:34 Shadow992#14
Quote:
Originally Posted by ●ROBBY● View Post
Ich habe ja versucht es ohne die 00400000 zu machen aber dann komm ich überhaupt nicht vorran. Außerdem mache ich genau das was Ce mir sagt denn da stand metin2client.bin+0021BFEC da ich dass aber nicht rechnen kann habe ich einfach mal 00400000 statt metin2client.bin eingesetzt und der Pointer hat immernoch funktioniert wie er sollte.

Btw. Smith benutzt auch 00400000, ich glaube er war sogar derjenige der mier einmal den Tipp damit verraten hat. Außerdem wird seine Methode nicht funktionieren da er nicht den Wer der Adresse von 21BFEC+40000 nimmt sondern die Adresse selbst + das Offset.
Schonmal ausprobiert?

Warum machst du es nicht einfach so wie du es mit CE gemacht hast?
08/07/2010 17:37 ●ROBBY●#15
Ja nachdem du es gesagt hast habe ich es ausprobiert.
Aber ich habe jetzt das Problem gefunden guck mein Edit an.