Problem bei Bot programmierung

06/14/2007 21:24 vampir26#1
Hallo
Ich programmiere zur Zeit ein WoW Bot in C++, basierend auf Memory Reading. Es geht erst einmal darum, alle
wichtigen Variablen aus dem WoW Ram zu filtern. Zurzeit kann ich erfolgreich den Namen, Level, PosX und PosY
des Charakters ausgeben (dauerhaft, auch nach PC restart). Jedoch fehlt mir das Know-how bzw ich bräuchte
kleine Denkanstösse und hilfen, damit ich weiterkomme. Theoretisch wäre es möglich mit den bereits gesammelten
Daten einen Travel Bot zu proggen (es soll aber ein Gainbot sein).
Jetzt das Problem. Die o.g. Variablen sind statisch. Das heisst sie sind immer auf der gleichen Ram adresse
gespeichert. Jetzt ist aber die Healthpoint und MaxHealthpoint var immer auf einer anderen Position und ich
weiss nicht wie die die ausfiltern soll. Evtl zeigt ein Pointer darauf, den ich nicht finde. Aber es muss gehen,
Glider zb macht das ja auch ;)
Thx im voraus.
Leute mit gleichen interessen oder leute die schon einmal ein Bot programmiert haben
möchten sich bitte melden (ICQ/Mail, bitte keine Script Kiddies. Ich werd auch nicht aufdringlich sein)
mfg
Vampir

EDIT: Melden unter=> spam1221[at]pc-tune.ch <=ICQ gibts per E-Mail.
06/15/2007 09:24 Lowfyr#2
wenn du ohnehin schon mit c++ schreibst wird dir folgende source sehr weiterhelfen, auch wenn sie nicht aktuell ist dient sie zum groben verständniss ganz gut

[Only registered and activated users can see links. Click Here To Register...]
06/15/2007 13:56 streppel#3
viel glück bei deinem vorhaben :D
leider kann ich dir zum thema hp auslesen nicht helfen :/
06/15/2007 15:42 vampir26#4
Danke für die Antworten.

@Lowfyr: Das ist c# nicht c++, ist aber sehr ähnlich.
Der hat ja ein richtiger high-end bot geproggt. Sowas habe ich nicht vor, für jede Klasse viele Einstellungen,
mit Erz und Kräuter sammeln.
Ich möchte ein kleiner schneller simpler Bot, welcher aber trotzdem gut ist. Also kein schnick-schnack usw
(auch wegen detected Gefahr).

@streppel: Auch alles andere ist von Interesse, alles was mit Bot/Cheat in WoW zu tun hat. Wenn du zb weisst
wie ich die Pakets entschlüsseln kann usw usw....

mfg
Vampir
06/15/2007 16:27 streppel#5
entschlüsseln naja
kann dir da nur sagen guck mal bei den privaten servern,die haben die packete alle entschlüsselt und benutzen sie ja auch damit das ganze system läuft.

allgemein würd ich dir aber lieber empfehlen auf basis von innerspace zu arbeiten,weil du da schon alle funktionen hast bzw sie erfragen kannst wenn du sie gerne hättest
06/15/2007 16:48 Lowfyr#6
stimmt schon das das ding komplex ist, aber um das memory management von wow zu verstehen ist es dennoch gut.

btw. hast mal bei dem bereich von den coords nach dem health offset gesucht?

bin mir echt nimmer sicher, aber könnte dennoch sein das die hp punkte nach x,y,z,speed,facing,xxxxx kam

andere möglichkeiten wären entweder die hp per farbwertabfrage zu prüfen oder das ganze mit der ISXWoW DLL zu lösen, würde aber eher zum ersteren tendieren
06/15/2007 17:16 Harko#7
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

---

rest solltest du selber rausfinden ;)
06/15/2007 17:44 vampir26#8
@streppel: Ist innerspace so etwas wie AutoIT? Habs schon gedownloadet ^^ Ich teste alles auf meinem
privaten Server, nur kann ich mit meinem jetztigen Paket sniffer nicht local sniffen. Aber dann kann ich dann später
auf blizz Server immer noch nix mit anfanen (verschlüsselung).

@Lowfyr: Also mit ArtMoney kann ich health gut herausfiltern, aber die Adresse ändert sich nach einem WoW
restart wieder. Meinst coords manuell suchen? Per Script hab ichs noch nicht geschafft. Manuell hab ich auf den
ersten Hieb auch nichts gefunden ;_;
Farbwerte sind statisch, einmal Auflösung ändern, Energy Bar Window verschieben und nichts geht mehr.

@Harko: Assembler. Sollte ich das auch lernen bzw anreissen? Weil Assembler kann ich eigentlich gar nicht, die Befehle sagen mir nichts (du wirfst auch nicht grad mit Infos um dich ;))

thx
06/15/2007 18:00 Harko#9
Quote:
Originally posted by vampir26@Jun 15 2007, 17:44
@Harko: Assembler. Sollte ich das auch lernen bzw anreissen? Weil Assembler kann ich eigentlich gar nicht, die Befehle sagen mir nichts (du wirfst auch nicht grad mit Infos um dich ;))
falsche das sind alle Infos die man normal braucht ;)

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.
06/15/2007 19:09 streppel#10
das war nu zu hoch für mich cO

naja jedenfalls sit innerspace eine scriptengine bei der es auch bereits vorhandene bots gibts
kostet 10&#036; für 3 monate wenn ich mich recht erinnere
06/15/2007 19:45 vampir26#11
Mir wars auch etwas zu hoch...
Ich bin kein Profi und ich weiss immer noch nicht, wie ich an die var komme (sry). So halbwegs komm ich mit,
aber ich weiss nicht, was ich jetzt tun muss. Ein Code schreiben, der die var aus dem Offset filtert?
Aber wie? Der Wert ist ja jedesmal anders. Oder muss ich mit hilfe von GetObjectByGUID und anhand der Charakter
ID herausfinden wohin der healthpointer zeigt?

EDIT:
Suche auch infos zu Screen Reading Bots. Nicht über Pixel scanning, sondern wie man die Daten der
Grafikkarte (GraKa) ausliest, um zu bestimmen, wo ein mob gezeichnet wird usw
06/21/2007 12:19 bobbyladdy#12
Hallo vampir26,
Daten der Grafikkarte auslesen ist unsinn.
Du könntest viel einfacher ein paar DirectX Funktionen hooken.
Zu deinen Addressen: Um am besten alle Addressen zu finden, solltest du dich mit Assembler vertraut machen und einen Debugger( vorzugsweise Olly ) benutzen und nachdenken, ob du vielleicht den Bot als Dll injecten solltest.
06/21/2007 12:30 streppel#13
um den bot vorm warden zu verstecken könntest du dann den isxwarden benutzen,davon hat lax ne source veröffentlich die programmierer benutzen können um ihre programme zu schützen
06/21/2007 15:39 vampir26#14
Hab OllyDBG schon eine weile auf dem Rechner.
Wurde isxwarden nicht kürzlich detectet? Weil sonst könnte man ja jedes Tool vor Warden
verstecken.
Wenn ich den Bot nicht public mache, ist der ja eh 100% undetectet.

Das Problem ist, ich weiss immer noch nicht, wie ich den Assembler Code oben,
in C++ realisiere/umschreibe >:o
06/21/2007 18:01 Browny89#15
Viel glück beim Vorhaben :)