c++ memoryread - offsets

10/10/2010 20:25 deestruct#1
Hey all,

ich hab ein problem mit den adressen und offsets...
memory reading ist derbes neuland für mich und ich verstehe manche sachen eben nicht

also zb den characternamen auslesen mache ich so


jetzt zu den offsets..
mein erster gedanke war "adresse+offset = richtigeadresse"
allerdings kann das ja ned hinhaun weil doch immer das selbe ergebnis rauskommt, richtig?

nach etwas gesuche finde ich für zb charlevel oder position das hier
(allerdings c# und, ich glaube, mit einer dll)

habe ein beispiel gefunden (anderes spiel) das auch meinem gedankengang entspricht:

allerdings funktioniert das ganze auf wow übersezt nicht...

als playerbase adresse nehme ich 0x00C79CE0
offset1 = 0x32
offset2 = 0x24

damit müsste ich dann irgendwie die playerbase rausbekommen die ich für vieles weitere ja benütige

allerdings funktioniert alles was ich versucht habe nicht und ich habe nicht viel ahnung von speicheradressen usw


wie muss ich das anstellen das ich die playerbase, und weiter das characterlevel bzw die positionscoordinaten auslesen kann?

bin über jede hilfe dankbar

LG
10/11/2010 15:43 Imperial Blaze#2
Hallo deestruct,
kann dir in deinem Falle auch nicht wirklich helfen, aber mich interessiert zurzeit die selbe Frage.
Wo wir schon bei dem Thema sind. Ich kann mitlerweile Offsets kopieren und sie verändern, aber was da genau zu 100% passiert, weiß ich wiederrum auch nicht.

Kennt jemand ein Buch das genau auf dieses Thema eingeht?
Mich würd mal interessieren was man zum Beispiel verändert, wenn man ein paar Zahlen zu einem offsets schreibt usw.
Oder warum muss man Playerbase und Playername addieren um den Namen auszulesen? Gibt es nicht direkt ein Offset?
10/11/2010 16:14 Bl@ze!#3
Quote:
Originally Posted by Imperial Blaze View Post
Hallo deestruct,
kann dir in deinem Falle auch nicht wirklich helfen, aber mich interessiert zurzeit die selbe Frage.
Wo wir schon bei dem Thema sind. Ich kann mitlerweile Offsets kopieren und sie verändern, aber was da genau zu 100% passiert, weiß ich wiederrum auch nicht.

Kennt jemand ein Buch das genau auf dieses Thema eingeht?
Mich würd mal interessieren was man zum Beispiel verändert, wenn man ein paar Zahlen zu einem offsets schreibt usw.
Oder warum muss man Playerbase und Playername addieren um den Namen auszulesen? Gibt es nicht direkt ein Offset?
Du musst sie addieren, da der Spielername relativ zur Playerbase im Speicher abgelegt wird.
Der Name ist ein Objekt (string) der dem Playercontainer gehört und liegt immer XX bytes nachdem Playercontainer.

Da sich der Playercontainer (Playerbase) immer ändert, und nicht statisch ist, verändert sich das Offset auch.

DESHALB addiert man die Offsets :)
10/11/2010 16:43 Bl@ze!#4
Wieso schreibst du dir nicht ein Programm, legst nen Array an, gibst die Start Addresse von dem Array aus, inner Konsole und liest dann mit nem zweiten Programm, die Adresse + 4 Bytes, + 4 bytes etc. und so weiter aus?

Mach das mal, dann wirst du das ganze auch Ansatzweise verstehen. ;-)
10/11/2010 16:51 deestruct#5
also jezt funktionierte es mit dem auf google gefundem code, der auch meinem denkansatz entspricht!
der offset finder, den ich auf einer anderen seite gefundne habe hat für die playerbase eine falsche adresse ausgespuckt... deswegen funktionierte das ganze nicht!!! und ich brauch 2 tage um das rauszufinden -.-

@imperialblaze und alle dies sonst intressiert: ich editier gleich einen beispielcode hier rein!

so das beispiel...
10/11/2010 16:56 Ende!#6
Ein Beispiel für das Verwenden der Playerbase wäre:
Code:
// Player pointer
#define OFFS_PLAYERBASE_PTR 0x00CD87A8 // 3.3.5a
#define OFFS_PLAYERBASE_OFFSET_LVL1 0x34 // 3.3.5a
#define OFFS_PLAYERBASE_OFFSET_LVL2 0x24 // 3.3.5a

DWORD playerbase ;
ReadProcessMemory(hProc, (void*)OFFS_PLAYERBASE_PTR, &playerbase, 4) ;
ReadProcessMemory(hProc, (void*)(playerbase+OFFS_PLAYERBASE_OFFSET_LVL1), &playerbase, 4) ;
playerbase += OFFS_PLAYERBASE_OFFSET_LVL2 ;
Edit: Ne mom, sehe gerade, dass du garnicht mit Dll Injection arbeitest, ich schreib das mal fix um ;p

Edit2:
So, müsste so passen jetzt, ist allerdings ungestetet.
10/11/2010 17:23 deestruct#7
danke ende, allerdings wie gesagt ging es ja schon... nur hatte ich eben falsche adressen und das ewigkeiten nicht bemerkt... liegt hald dadran das ich das mit dne offsets nicht ganz verstehe -.-

naja dein beispiel ist trotzdem.. nunja... etwas kürzer, werde mir aber eh noch funktionen für das alles selbst schreiben
10/14/2010 11:00 Threk#8
Quote:
Originally Posted by deestruct View Post
Hey all,

ich hab ein problem mit den adressen und offsets...
memory reading ist derbes neuland für mich und ich verstehe manche sachen eben nicht

also zb den characternamen auslesen mache ich so


jetzt zu den offsets..
mein erster gedanke war "adresse+offset = richtigeadresse"
allerdings kann das ja ned hinhaun weil doch immer das selbe ergebnis rauskommt, richtig?

nach etwas gesuche finde ich für zb charlevel oder position das hier
(allerdings c# und, ich glaube, mit einer dll)

habe ein beispiel gefunden (anderes spiel) das auch meinem gedankengang entspricht:

allerdings funktioniert das ganze auf wow übersezt nicht...

als playerbase adresse nehme ich 0x00C79CE0
offset1 = 0x32
offset2 = 0x24

damit müsste ich dann irgendwie die playerbase rausbekommen die ich für vieles weitere ja benütige

allerdings funktioniert alles was ich versucht habe nicht und ich habe nicht viel ahnung von speicheradressen usw


wie muss ich das anstellen das ich die playerbase, und weiter das characterlevel bzw die positionscoordinaten auslesen kann?

bin über jede hilfe dankbar

LG
Dein Beispiel für c# wurde mit BlackMagick gelöst und ist keine Dll.

Eventuell könnten dir diese beiden Tutorials für das Verständnis von Offsets und Playerbase hilfreich seien.
Ist zwar anhand eines anderen Spieles erklärt aber vielleicht hilft es trotzdem.

Tutorial 1:
Tutorial 2( gehört zu dem ersten dazu):
10/14/2010 14:09 Imperial Blaze#9
Wow, vielen vielen Dank <3