C++ Ram auslesen - Variable änderst ständig

Hallo
Ich lerne gerade C++ und ich bin auf ein Problem gestossen.
Ich programmiere zur Zeit ein Info Tool. Das heisst, ich sammle über Ram
informationen über ein Spiel. Ich habe zurzeit folgende Infos die ich ausgeben kann:
Charaktername, Level, PosX und PosY. Jetzt wollte ich die Lebensenergie
(Energie und Max Energie) ausgeben. Ich kann die zwei Variablen auch prima
aus dem Ram filtern, aber beim nächsten neustart des Spiels sind die Adressen wieder
ungültig bzw mit einer anderen Variable besetzt. Wie muss ich jetzt vorgehen,
um auch nach Spiel/PC neustart immernoch über mein Programm die Lebensenergie
aus dem Ram zu lesen? Es muss gehen, denn andere Programme tun dies bereits.

Vielen Dank für Eure Bemühungen.
mfg
Vampir
 
Öhm, schonmal an Pointer gedacht?
Sie werden größtenteils dynamisch während des Spiels angelegt, d.h. es sind immer andere Adressen. Außerdem könnte es helfen, wenn du sagen würdest, um welches Spiel es sich handelt.
Und bitte sag mir nicht "CS 1.6" v "CSS"
 
Ich halte nichts von Cheaten und hab das auch nicht vor (und CS find ich eh müll).
Es handelt sich um World of WarCraft. Der Sinn wäre, ein Gilden Tool zu programmieren,
welches Infos über WoW sammelt und dann in einer MySQL Datenbank (oder TXT)
auf einem Server speichert. Dann wird das ganze mit der Gildenhomepage verknüpft.
Man sieht dann, wer mit welchem Char, wo online ist. Exakte Position, Level, Klasse,
Server, Fraktion, Rasse... So sehe ich zb wo mein Kumpel gerade spielt, auch wenn er
schnell mit einem neuen Char spielt, oder sogar auf einem anderen Server. Aber da bin
ich noch weit entfernt.
Das mit den Pointern klingt eigentlich recht einfach und logisch ;)
Mit ArtMoney kann ich sogar Pointer suchen. Also ich hab die Ram Adresse der
Healthpoints ausgefiltert und dann mit der Adresse den Pointer gesucht. Aber leider
trotz mehrerer Versuche nicht geklappt. ;(
 
[ot] viel lustiger ist ein hack, der sich die tcp-pakete vom spieler-rechner zuschicken lässt (winpcap & programm) und diese dann auswertet :P [/ot]
 
Original von 2Bios
[ot] viel lustiger ist ein hack, der sich die tcp-pakete vom spieler-rechner zuschicken lässt (winpcap & programm) und diese dann auswertet :P [/ot]

Meinst du nicht die TCP-Pakete vom Server zukommen lassen? ;) Ansonsten würde man ja die eigenen Pakete auswerten...
Hast du konkret dazu Infos? Interesse besteht.
 
@Vampir: Kurz ein Paar Definitionen:
- Spieleserver: Server, mit dem alle Spieler verbunden sind (z.b. ein Counter-Strike-Server)
- Spielerechner: Ist, wie viele andere auch, mit dem Spieleserver verbunden. Davor hockt der eigentliche Spieler.
- Zweitrechner: Steht optimalerweise im LAN des Spielerechners und hat seinen Monitor direkt dem Spielerechner

Auf dem Spielerechner läuft ein Sniffer, welcher den Traffic zwischen Spielerechner und Spieleserver snifft und an den Zweitrechner weiterleitet. Dieser Zweitrechner interpretiert diese empfangenen Daten und zeigt diese dann z.b. graphisch an.

Punkbuster, Cheating Death, VAC & Freunde können dann wieder im Dark Room herumgereicht werden... :D

edit: Um auf Nummer sicher zu gehen kann man ja von der Fritz!Box sich den Traffic zukommen lassen (sofern im Internet gespielt wird)... Auf Wunsch sogar verschlüsselt 8)
 
Aber wozu ist der zweiter Rechner?
Um die Daten grafisch darzustellen braucht es doch nicht extra ein separater Rechner.

EDIT:
Aber das ist jetzt nebensächlich. Viel wichtiger ist meine eigentliche Frage!
THX
 
Nein nicht zwingend.
Ich mache meine Auswertungen am besten auf einem zweiten Rechner, sodass mir diese Informationen in Echtzeit angezeigt werden können ohne Einschnitte am Spielerrechner zu haben (zwei Monitore zeigen i.d.R. mehr als einer). Diese Daten könnten z.b. Charaktername, Level, PosX und PosY sein. Zusätzlich könnte man dann noch diese Positionsdaten auf einen Kartengrundriss einzeichnen...

Ein weiterer Grund für den Zweitrechner sind Anti-Cheatprogramme welche diese Veränderungen in der Grafikausgabe des Spielerechners überinterpretieren könnten... :)
 
für die G15 von Logitech gibts ein Applet, welches Daten über WoW ausliest, soweit ich mich erinnern kann war es Open Sourcem hab nur grad den link nicht da.
 
Original von 2Bios
Nein nicht zwingend.
Ich mache meine Auswertungen am besten auf einem zweiten Rechner, sodass mir diese Informationen in Echtzeit angezeigt werden können ohne Einschnitte am Spielerrechner zu haben (zwei Monitore zeigen i.d.R. mehr als einer). Diese Daten könnten z.b. Charaktername, Level, PosX und PosY sein. Zusätzlich könnte man dann noch diese Positionsdaten auf einen Kartengrundriss einzeichnen...

Ein weiterer Grund für den Zweitrechner sind Anti-Cheatprogramme welche diese Veränderungen in der Grafikausgabe des Spielerechners überinterpretieren könnten... :)

Ich dachte immer, dass die Pakets gut verschlüsselt sind....
 
Hab die Infos die ich brauche um an die health und maxhealth var zu kommen.
Nur kann ich damit nichts Anfangen ;(

005181D0 Lua_UnitHealth proc near

0051822A call GetObjectByGUID
0051826F mov edx, [esi+110h]
00518275 mov eax, [edx+40h] ; health

---

005182E0 Lua_UnitHealthMax proc near

00518339 call GetObjectByGUID
00518345 mov eax, [eax+110h]
0051834B mov ecx, [eax+58h] ; health max

jeder NPC/PC wird von der gleichen Basis Struktur abgeleitet, an der Stelle +0x110 befindet sich in dieser ein Zeiger zu einer weiteren Struktur mit den Werten für Health bei 0x40 und HealthMax bei 0x58. Da die Objekte beim einloggen jedes mal neu angelegt werden und somit sich an einer anderen Adressen befinden, speichert WoW einen GUID Wert von z.B. Target/Player/Merchant/Pet usw. an festen Stellen ab und wandelt ihn dann in den Zeiger zu dem Objekt mit der Hilfe von GetObjectByGUID um.

Kann mir jemand helfen? Oder Tip geben? *lieb schaut*
 
Zurück
Oben