linked objectlist für Sammelbot?

04/18/2009 22:03 run32.dll#1
Ich suche einen Weg um in RoM alle Umgebungsobjekte auszulesen. Es müsste doch hier genauso wie in WoW eine Art linked List existieren in der alle Pointer zu den Objekten sind.

(nix verstehen? guckst du hier: Linked list - Wikipedia, the free encyclopedia)

Eventl. gibts auch mehrere Listen, z.B. eine für NPCs, eine für Spieler ... glaube ich aber eher nicht. Problem beim Suchen so einer Liste ist, dass man nie weiß ob sie sich schon wieder verändert hat ... sobald irgendwo ein Spieler in die Nähe kommt oder ein "Holz" spawnt verändert sich die Liste und man muss neu anfangen.

Theoretisch wüsste ich zwar auch wie ich per Codeinjection an die Adressen der Objekte herankomme, aber so eine Codeinjection wäre schwerer zu updaten und auch riskanter.

Irgendwelche Ideen wie man die linked list findet?

edit:
Ich bin kein "Reverser" aber das hier hat defenitiv schonmal was mit den Objekten zu tun...
0063E950 - 8b 44 24 04 - mov eax,[esp+04] // Ptr für akt. Obj. vom Stack holen?
0063E954 - 8b 54 24 08 - mov edx,[esp+08]
0063E958 - 8b 48 04 - mov ecx,[eax+04] // [eax+04] = Ptr to objectbase
0063E95B - 8b 00 - mov eax,[eax]
0063E95D - 52 - push edx
0063E95E - ff d0 - call eax
0063E960 - c3 - ret

Um das aktuelle objekt herauszufinden: objectbase+0x0278 = objectname
04/19/2009 10:44 Top115#2
mit welchem programm wurde das ausgelesen`?
04/19/2009 12:50 run32.dll#3
Auf die Funktion bin ich mit Cheat Engine gestoßen.

Ich versuche mal den Weg bis dahin zu beschreiben:
-in Cheat Engine per Textsuche nach einem möglichst einzigartigen NPC-Namen suchen der in der Nähe herumsteht, ich verwende "Laif Cindai", das ist der erste NPC den man sieht mit einem frischen Level 1 Charakter

-Bei den Sucheergebnissen endet eine Adresse mit xxxxxx78, das ist meist die richtige (weil das Offset für den Objektnamen +0x0278 ist)

-Die gefundene Addresse, bei mir 0x2213AC78, in die Addressliste hinzufügen
(die Addresse ist natürlich bei jedem anders weil -> DMA)

-Um 100% sicher zu sein das es die korrekte Adresse ist, rechtsklick auf die Adresse-> "find out what accesses this address", dann im Spiel mal mit den Mauscursor über den NPC fahren und es sollten einige weitere ASM-Anweisungen aufpopen -> Adresse richtig

-Von der Addresse 0x278 subtrahieren => 2213AA00 und die Adresse der Liste hinzufügen, das ist die Objectbase und der Wert sollte 8099892 betragen

-Wenn man jetzt eine linked List finden will muss man nach Pointern auf diese Objectbase suchen -> New Scan -> Hex Wert, 4Bytes "2213AA00"

Das Ergebnis einer solchen Suche habe ich dann per Screenshot gespeichert und für andere NPCs in der Nähe wiederholt. Dann habe ich die Addressen der Screenshots verglichen. In einer linked List dürften die Adressen nicht sehr weit voneinander entfernt sein (korrekt?). Auf *verdächtige* Adressen kann man einen BP setzen - wenn keine Zugriffe erfolgen ist sie unbrauchbar und gehört dann sicher nicht zur linked List.

Für das obere Beispiel bin ich bei 0x2179ED64 auf einen Pointer zu Objectbase gestoßen. Setzt man dort einen BP erhält man:
0063E958 - 8b 48 04 - mov ecx,[eax+04]

Da komme ich nun nicht weiter mit meinen Kenntnissen... -.-