|
You last visited: Today at 10:01
Advertisement
c++ memoryread - offsets
Discussion on c++ memoryread - offsets within the WoW Bots forum part of the World of Warcraft category.
10/10/2010, 20:25
|
#1
|
elite*gold: 0
Join Date: Sep 2007
Posts: 149
Received Thanks: 32
|
c++ memoryread - offsets
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
Code:
...
unsinged adresse = 0x00C79D18;
...
if(ReadProcessMemory(hproc,(LPCVOID)adresse,name,
strlen("charnameblablupp"),&rw))
{
blablabla... usw...
}
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)
Code:
uint playerbase = wow.ReadUInt(wow.ReadUInt(wow.ReadUInt(0x00CF7C00) + 0x34) + 0x24);
uint Level = wow.ReadUInt(wow.ReadUInt(playerbase + 0x8) + (0x35 * 4));
float playerx = wow.ReadFloat(Pbase + 0x798); // Read players xlocation
float playery = wow.ReadFloat(Pbase + 0x79C); // Read players ylocation
float playerz = wow.ReadFloat(Pbase + 0x7A0); // Read players zlocation
habe ein beispiel gefunden (anderes spiel) das auch meinem gedankengang entspricht:
Code:
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
DWORD adresse1 = 0x00645378;
DWORD offset1= 0x4;
DWORD adresse2;
DWORD offset2= 0x51F4;
DWORD adresse3;
int value;
DWORD pid;
HWND hwnd = FindWindow(NULL, "STREET FIGHTER IV");
GetWindowThreadProcessId(hwnd, &pid);
HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
if(!phandle)
{
printf("SF4 nicht gefunden!\n");
system("Pause");
return 0;
}
else
{
printf("SF4 Fenster gefunden, PID: %d\n\n", pid);
}
if(ReadProcessMemory(phandle, (LPCVOID)adresse1, &adresse2, sizeof(DWORD), 0))
printf("Succes!\n");
else
printf("Failed!\n");
adresse2 = adresse2+offset1;
if(ReadProcessMemory(phandle, (LPCVOID)adresse2, &adresse3, sizeof(DWORD), 0))
printf("Succes!\n");
else
printf("Failed!\n");
adresse3 = adresse3+offset2;
if(ReadProcessMemory(phandle, (LPCVOID)adresse3, &value, sizeof(int), 0))
printf("Succes!\n\n");
else
printf("Failed!\n\n");
printf("%d\n", value);
system("Pause");
return 0;
}
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
|
#2
|
elite*gold: 1
Join Date: Sep 2009
Posts: 858
Received Thanks: 603
|
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
|
#3
|
elite*gold: 240
Join Date: Dec 2006
Posts: 1,579
Received Thanks: 1,609
|
Quote:
Originally Posted by Imperial Blaze
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
|
#4
|
elite*gold: 240
Join Date: Dec 2006
Posts: 1,579
Received Thanks: 1,609
|
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
|
#5
|
elite*gold: 0
Join Date: Sep 2007
Posts: 149
Received Thanks: 32
|
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...
Code:
....
unsigned playerbaseadresse = 0x00CD87A8;
unsigned offset1 = 0x34;
unsigned adresse2;
unsigned offset2 = 0x24;
unsigned adresse3;
unsigned xposoffset = 0x798;
unsigned xposadresse;
float xpos;
....
if(ReadProcessMemory(hproc,(LPCVOID)playerbaseadresse,&adresse2,
sizeof(adresse2),&rw))
{
adresse2 = adresse2 + offset1;
if(ReadProcessMemory(hproc,(LPCVOID)adresse2,&adresse3,
sizeof(adresse3),&rw))
{
adresse3 = adresse3 + offset2;
if(ReadProcessMemory(hproc,(LPCVOID)adresse3,&xposadresse,
sizeof(xposadresse),&rw))
{
xposadresse = xposadresse + xposoffset;
if(ReadProcessMemory(hproc,(LPCVOID)xposadresse,&xpos,
sizeof(xpos),&rw))
{
cout << "Works! " << xpos;
}
}
}
}
...
|
|
|
10/11/2010, 16:56
|
#6
|
elite*gold: 1
Join Date: Feb 2009
Posts: 6,378
Received Thanks: 7,996
|
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
|
#7
|
elite*gold: 0
Join Date: Sep 2007
Posts: 149
Received Thanks: 32
|
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
|
#8
|
elite*gold: 0
Join Date: Oct 2010
Posts: 309
Received Thanks: 272
|
Quote:
Originally Posted by deestruct
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
Code:
...
unsinged adresse = 0x00C79D18;
...
if(ReadProcessMemory(hproc,(LPCVOID)adresse,name,
strlen("charnameblablupp"),&rw))
{
blablabla... usw...
}
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)
Code:
uint playerbase = wow.ReadUInt(wow.ReadUInt(wow.ReadUInt(0x00CF7C00) + 0x34) + 0x24);
uint Level = wow.ReadUInt(wow.ReadUInt(playerbase + 0x8) + (0x35 * 4));
float playerx = wow.ReadFloat(Pbase + 0x798); // Read players xlocation
float playery = wow.ReadFloat(Pbase + 0x79C); // Read players ylocation
float playerz = wow.ReadFloat(Pbase + 0x7A0); // Read players zlocation
habe ein beispiel gefunden (anderes spiel) das auch meinem gedankengang entspricht:
Code:
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
DWORD adresse1 = 0x00645378;
DWORD offset1= 0x4;
DWORD adresse2;
DWORD offset2= 0x51F4;
DWORD adresse3;
int value;
DWORD pid;
HWND hwnd = FindWindow(NULL, "STREET FIGHTER IV");
GetWindowThreadProcessId(hwnd, &pid);
HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
if(!phandle)
{
printf("SF4 nicht gefunden!\n");
system("Pause");
return 0;
}
else
{
printf("SF4 Fenster gefunden, PID: %d\n\n", pid);
}
if(ReadProcessMemory(phandle, (LPCVOID)adresse1, &adresse2, sizeof(DWORD), 0))
printf("Succes!\n");
else
printf("Failed!\n");
adresse2 = adresse2+offset1;
if(ReadProcessMemory(phandle, (LPCVOID)adresse2, &adresse3, sizeof(DWORD), 0))
printf("Succes!\n");
else
printf("Failed!\n");
adresse3 = adresse3+offset2;
if(ReadProcessMemory(phandle, (LPCVOID)adresse3, &value, sizeof(int), 0))
printf("Succes!\n\n");
else
printf("Failed!\n\n");
printf("%d\n", value);
system("Pause");
return 0;
}
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
|
#9
|
elite*gold: 1
Join Date: Sep 2009
Posts: 858
Received Thanks: 603
|
Wow, vielen vielen Dank <3
|
|
|
 |
Similar Threads
|
Autoit MemoryRead mit Offsets
10/14/2010 - GW Bots - 11 Replies
Hi Elitepvper!
Ich habe ein Problem mit meinem Kilroy bot und anderen (Autoit).
Ich habe schon alles versucht um die aktuelle Energie meines Charakters heraus zu finden, jedoch versteh ich das mit den Offsets nicht.
Ich hoffe ihr könnt mir ein Beispielscript schreiben.
Hier die aktuellen Memoryadressen:
PTR_HP_E = 0xd40410
;Hp E Offsets:
|
[Hilfe] MemoryRead in WoW
07/03/2010 - AutoIt - 3 Replies
Huhu,
wollte mich mal wieder ans MemoryRead wagen.
Ich komme einfach nicht weiter und finde nichts im Internet (bzw. Foren).
Ich möchte einfach mal nur den Spielernamen auslesen.
Mein Code sieht imo so aus:
#include <NoMadMemory.au3>
#RequireAdmin
$PID = ProcessExists("Wow.exe")
|
Memoryread Unicode
10/09/2009 - AutoIt - 3 Replies
Ja ich wollte mal fragen wie ich bei Autoit bei Memoryread die Adresse als Unicode auslesen kann.
|
Archlord MemoryRead -.-
05/23/2009 - Archlord - 3 Replies
hallo! ich versuche jetzt seit 2 tagen meine hp und die hp meines current target aus dem ram auszulesen. ich finde auch werte die meine current hp ausgeben, allerdings aendern die sich bei jedem restart von al(soweit ich weiss gibt es ja immer einen basepointer oder sowas, der genau ausgiebt wo die hp nun eingetragen wird). -.- wie ich die current hp vom target auslese, daran will ich erst garnicht denken... -.- kann mir jemand helfen bzw. mich etwas instruieren(gerne auch ueber ts oder...
|
Archlord MemoryRead -.-
05/22/2009 - General Coding - 0 Replies
hallo! ich versuche jetzt seit 2 tagen meine hp und die hp meines current target aus dem ram auszulesen. ich finde auch werte die meine current hp ausgeben, allerdings aendern die sich bei jedem restart von al(soweit ich weiss gibt es ja immer einen basepointer oder sowas, der genau ausgiebt wo die hp nun eingetragen wird). -.- wie ich die current hp vom target auslese, daran will ich erst garnicht denken... -.- kann mir jemand helfen bzw. mich etwas instruieren(gerne auch ueber ts oder...
|
All times are GMT +1. The time now is 10:04.
|
|