Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Eve Online
You last visited: Today at 15:11

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Eve Online Memory Reading

Discussion on Eve Online Memory Reading within the Eve Online forum part of the MMORPGs category.

Reply
 
Old   #1
 
elite*gold: 585
Join Date: Jul 2011
Posts: 268
Received Thanks: 104
Post Eve Online Memory Reading

I case you want to build an eve online bot, have a look at the .

For a turnkey solution for eve online memory reading see
----------------
Eine schlüsselfertige Lösung für eve online memory reading ist zu finden unter
----------------
----------------
----------------
----------------
Moin,

habe mal ein paar Dinge die ich bei der Entwicklung meines Bot über Eve Online gelernt habe zusammengefasst:

Eve Online Memory Reading
In diesem Artikel erkläre ich wie man im Speicher des Eve Online Client an Adressen mit interessanten Informationen kommt. Ich beschränke mich dabei auf die im UI Tree enthaltenen Informationen. Was man dort findet reicht aus um einen Bot mit allen benötigten Informationen über den Zustand des Spiels zu versorgen.
Der C# Quelltext im Anhang implementiert die hier vorgestellte Vorgehensweise.

Der UI Tree
Der UI Tree ist ein Baumförmiger Graph dessen Knoten jeweils eine rechteckige Region innerhalb des Elternknotens beschreiben. Die Wurzel (d.h. der Knoten ohne Elternknoten) entspricht dabei der gesamten Bildfläche des Spiels. Abgesehen von der Fläche enthalten die einzelnen Knoten noch zusätzliche Informationen wie z.B. Text oder eine Farbe welche dieser Fläche zugeordnet sind.
Folgende Grafik zeigt einen Ausschnitt einer Visualisation des Baums. Darin sind die Ränder der Knotenflächen sowie in manchen Knoten ein diesen Knoten zugewiesener Text dargestellt.


Der im Beispiel visualisierte UI Tree enthält ein Kontextmenü welches auf dem Info Panel "Route" auf dem nächsten Sonnensystemmarker der Route geöffnet wurde. Aus diesem Beispiel ist bereits ersichtlich das der UI Tree alle Informationen enthält um einen Autopilotenbot zu entwickeln.

Abbildung eines Knotens des UI Tree in Python
Jeder Knoten des UI Tree wird durch mehrere Python Objekte abgebildet. Das Hauptobjekt enthält bei +8 einen Zeiger auf ein Python dict. Die Einträge in diesem dict beschreiben unter anderem die Region welche dieser Knoten auf dem Gesamtbild, bzw innerhalb des Elternknotens einnimmt. Der zunächst wichtigste Eintrag in diesem dict ist dem Schlüssel "children" zugeordnet. Dieser führt über einige Umwege zu den Kindknoten:
Der Eintrag "children" zeigt auf ein Objekt vom Typ "PyChildrenList" welches wiederum bei +8 einen Zeiger auf ein dict enthält. Dieses dict wiederum enthält unter dem Schlüssel "_childrenObjects" einen Eintrag der auf eine Python "list" zeigt.
Diese "list" enthält die Zeiger zu den Kindknoten, d.h. an dieser Stelle wird auf die Hauptobjekte andere Knoten des Baums verwiesen. In den Blättern (d.h. Knoten ohne Kindknoten) ist dann die "list" leer oder es ist im direkt vom Hauptobjekt referenzierten "dict" kein Eintrag "children" enthalten.
Das folgende Bild zeigt die Struktur der Python Objekte in einem einzelnen Knoten welche zum traversieren des Baums verwendet werden:


Anhand dieser Struktur können ausgehend vom Wurzelknoten alle anderen Knoten des Baums gefunden werden.
Im Beispielprogramm wird das traversieren des Baums durch die Funktion "UITreeNode.EnumerateChildrenTransitive" beschrieben.

Abbildung der Python Objekte im Speicher

Ermitteln des Type eines Python Objekt
Aus der geht hervor das jedes Python Objekt bei +4 bytes den Member "ob_type" hat welcher auf ein Objekt zeigt welches den Type des Objekt repräsentiert.
Desweiteren wird in der darauf hingewiesen das dies auch für die Objekte gilt welche einen Python Type repräsentieren. Dort ist auch nachzulesen das jedes Type Object bei +12 den Member "tp_name" hat der auf einen nullterminierten String zeigt welcher dem Namen des Type entspricht.
Auch die Python Implementation im Eve Online Client verwendet diese Struktur.
Damit kann für ein Python Objekt zu welchem nur die Adresse vorliegt der Name des Type dieses Objekt ermittelt werden.
Im Beispielprogramm wird dies durch die Funktion "PyObject.TypeNameForObjectWithAddress" erledigt.

Ermitteln aller Python Objekte eines Type
Durch Rükwärtsverwenden der Zeiger aus dem Member "ob_type" kann für einen Type mit gegebenem Namen eine Teilmenge von Addressen berechnet werden welche alle Addressen von Objekten dieses Type enthält.
Im Beispielprogramm wird dies durch die Funktion "PyTypeObject.EnumeratePossibleAddressesOfInstance sOfPythonTypeFilteredByObType" beschrieben.

zum traversieren des Baums verwendete Python Type
Um von einem Knoten zu dessen Kindknoten zu kommen werden folgende Gruppen von Objekttypen verwendet:
  • Hauptobjekt des Knoten. Diese Gruppe umfasst mehrere Type, darunter zum Beispiel "UIRoot".
  • "dict"
  • "PyChildrenList"
  • "list"

Für die Hauptobjekte des Knoten und den Type "PyChildrenList" ist die gesamte Struktur im Speicher bereits bekannt da in diesen nur konstante Offsets verwendet werden.

Python Type "dict"
Hierbei handelt es sich um ein gewöhnliches Python dictionary. Im UITree werden als Schlüssel üblicherweise Objekte vom Typ "str" verwendet.
Die Abbildung auf den Speicher ist im CPython Quelltext in den Dateien und beschrieben.
Im Beispielprogramm werden Objekte dieses Type durch die Klasse "PyDict" gelesen.

Python Type "list"
Die Abbildung auf den Speicher ist im CPython Quelltext in den Dateien und beschrieben.
Im Beispielprogramm werden Objekte dieses Type durch die Klasse "PyList" gelesen.

Ermitteln der Addresse der Wurzel des UITree
Das Hauptobjekt des Wurzelknoten hat den Type "UIRoot". Um die Wurzel zu finden werden zunächst die Addressen (alle im Prozess vorhandenen) mit der Funktion "EnumeratePossibleAddressesOfInstancesOfPythonType FilteredByObType" für den Type "UIRoot" gefiltert. Dabei werden normalerweise noch mehrere Addressen übrig bleiben. Daher wird im nächsten Schritt für jede der übrigen Addressen jeweils durch Nutzung der oben beschriebenen Struktur die Anzahl der Kindknoten berechnet. Die Addresse des Knotens für welchen die meisten Kindknoten gefunden wurden wird als die Wurzel des Baums angenommen.
Im Beispielprogramm wird die Addresse des UIRoot durch die Funktion "EveOnline.UIRoot" berechnet.
Attached Files
File Type: zip Optimat.EveOnline.Tut.Memread.zip (90.6 KB, 85 views)
0ptimist is offline  
Thanks
3 Users
Old 01/29/2015, 20:14   #2
 
elite*gold: 0
Join Date: Sep 2009
Posts: 20
Received Thanks: 8
Hi , i can read how much and what mineral i jetting from ship?
Lukines is offline  
Old 01/30/2015, 15:28   #3
 
elite*gold: 585
Join Date: Jul 2011
Posts: 268
Received Thanks: 104
Post

Quote:
Originally Posted by Lukines View Post
Hi , i can read how much and what mineral i jetting from ship?
Where would you see the "mineral i jetting from ship" in Eve Online? Can you show a screenshot and mark the Portion you want to read?

In case you meant Items in the Inventory:
Those can be read from the UI Tree (with Name, Quantity, etc.) at least as long as they are visible on Screen.
0ptimist is offline  
Old 01/31/2015, 03:13   #4
 
elite*gold: 0
Join Date: Sep 2009
Posts: 20
Received Thanks: 8
My point here is that when the game becomes full magazine for minerals and hede them out feed of the program has checked how much and threw raw material .
Lukines is offline  
Reply

Tags
bot, eve, memory, online, reading


Similar Threads Similar Threads
[Vb.NET] WoW Memory Reading
11/20/2010 - World of Warcraft - 1 Replies
Hallo, Ist es irgendwie möglich mit VB.NET die Memory von WoW auszulesen wie bei C# mit der BlackMagic.dll Danke m vorraus
Help with memory reading. C++.
06/12/2010 - Aion - 0 Replies
Hello people, I'm kinda new to memory reading in c++. Been doing similiar stuff, and done some other stuff like packet hacks etc but anyway, to the issue. I get weird values from AION when reading. And I'm prolly going about this totally wrong so I'll post you the code and hopefully some kind soul out there will point me in the right direction. int address = 0xA82424; int value; DWORD pid; if(!GameWindow) {
Memory reading etc.
06/18/2008 - General Coding - 11 Replies
-
Memory reading help...
02/10/2007 - Conquer Online 2 - 1 Replies
Hi, I need to read the amount of arrows on an archer (0-500). I have the pointer and offset, and i can get the right number in cheat engine, however whenever i try to read it from autohotkey i always get 0. Don't know why. I've always read 4 byte data before so i don't really know if i have the right code for 2 byte data. Here's the autohotkey code ExtInt(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4); From AutoHotKey Help { Loop %pSize% result += *(&pSource +...
VB.Net Memory Reading
11/03/2006 - .NET Languages - 0 Replies
Basically I'm doing a course in VB.Net and I'm wondering if theres anyone here who can teach me or show me how to read memory values in my project. My course does not cover this, so I'm stuck with either self-research or asking questions. If anyone can help then I'd be very grateful. PS: The target game I'll be testing on is Conquer Online 2



All times are GMT +2. The time now is 15:11.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.