Bot Programmierung mit c++

04/21/2013 22:19 xX.Slayer.Xx#1
Hi Leute,

ich programmiere nun seit rund 2 Jahren C++. Seit etwa 7Monaten sehr intensiv.

Nun nachdem ich mich der DirectX Programmierung zugewandt habe und damit kleine Spiele programmiert habe, wollte ich mal den einen oder andern Bot schreiben.

Ich dachte da so an Metin2.

Ich wollte euch mal fragen, wie ich das am besten erlernen kann.
Ich muss ja irgendwie in das Spielgeschehen eingreifen können.

Noch weiß ich überhaubt nicht, wie soetwas geht.

Gibt es dafür gute Tutorials oder Artikel zu lesen?
Wäre super wenn ihr mir ein paar ansätze nennen könnt.

Mit freundlichem Gruß
xX.Slayer.Xx
04/21/2013 23:04 qkuh#2
Erstmal musst du dich entscheiden, was für einen Typ von Bot du machen möchtest.
Grundsätzlich gibt es 3 Arten, wobei nicht immer alle sofort umsetzbar sind.

1. Pixel-based
2. Memory-based
3. Packet-based

Ich empfehle immer die dritte Variante, da sie einfach am komfortabelsten ist, sofern einmal ein Grundgerüst steht.
04/21/2013 23:20 Delinquenz#3
Quote:
Ich empfehle immer die dritte Variante, da sie einfach am komfortabelsten ist, sofern einmal ein Grundgerüst steht.
Willst du den ganzen Metin2 Client nachbauen oder wie hast du dir das vorgestellt?
04/22/2013 06:54 xX.Slayer.Xx#4
Quote:
Originally Posted by Delinquenz View Post
Willst du den ganzen Metin2 Client nachbauen oder wie hast du dir das vorgestellt?
genau deswegen frage ich, da ich nicht weiß wie und was man da macht^^
Ich hatte zuerst mal vor soetwas wie nen Angelbot zu Programmieren.
Villeicht grenzt das die möglichkeiten ein wenig ein.
04/22/2013 08:17 Delinquenz#5
Quote:
genau deswegen frage ich, da ich nicht weiß wie und was man da macht^^
Die Frage war an meinen Vorposter und nicht an dich gerichtet.

Entscheide dich erst einmal für eine der drei Varianten und schau eben, dass du klein anfängst. Sofern du einen auf Inject-Basis coden willst, schau dir an, wie man in Solitär Variablen verändert (z.B. die Score) und dann schau wie du Funktionen hookst usw.

Gab hier recht schöne Tutorials zu im PDF-Format, habe aber grade keinen Link.
04/22/2013 09:28 dready#6
Grundsätzlich ist das A und O den Client des Spiel zu verstehen, umso besser du das kannst desto leichter fällt es dir.

qkuh hat nicht unrecht wenn er sagt das seine 3. Variante meistens am angenehmsten ist.

Umsetzung ist "einfach" aber Zeitaufwendig.

Du musst 2 wichtige Punkte im Client hooken, die Sende Funktion für die Packets und die Recv Funktion.
Zuerst musst du entscheiden, willst du die Packete direkt abfangen und die Verschlüsselung/Entschlüsselung selbst übernehmen oder suchst du die Funktion die das macht und hängst dich dort ein.

Mit dem Reversen fängst du bei beiden Variant an wo die Packete ankommen, zu 99% sind das wsock32 recv und send Funktionen.

Beim Recv breakpointest du die Recv funktion und verfolgst den Programmfluss, siehst dir dabei an wie es Entschlüsselt wird, danach baust du entweder die Verschlüsselung nach oder hookst an der Stelle an der alles Entschlüsselt vorliegt.

Das selbe kann man für Send machen, jedoch hier den code zurückverfolgen von dem Punkt an dem es abgesendet wurde.

Hast du diese beiden Funktionen kanns losgehen, meistens benutzen die Leute eine Mischung aus Reversen des Packet Parsers und gutem Alten raten ;)
Der Parser kommt nachdem die Packete empfangen und entschlüsselt wurden.

Sobald du die für dich intressanten Packete Identifiziert hast steht dir eigentlich alles offen und du kannst dich an die eigentliche Botlogic machen.

Solltest du bisher wenig Reverset haben würde ich persönlich damit anfangen erstmal ein paar 0815 Programmierübungen zu machen wie du sie in jedem Programmierkurs machst, das ganze Compilen und dann in dem Debugger deiner Wahl anzusehn um ein Gefühl dafür zu bekommen wie die VC compiler die zu 90% benutzt werden den Code optimieren.

Beispiele fallen mir aus dem Kopf gerade wenig ein.

Für die Variante die das ganze inklusive Verschlüsselung macht fällt mir gerade eigentlich nur Injection für Ultima Online ein

[Only registered and activated users can see links. Click Here To Register...]

Wenn jemand ne Aktuelleres Beispiel hat wäre das recht günstig ;)
04/22/2013 13:09 xX.Slayer.Xx#7
Uff das hört sich ja sehr kompliziert an.
Ich denke ich werde heute Abend nach der Arbeit mal ein wenig googlen nach Schlagworten in deiner Antwort.

Bis dahin
04/22/2013 18:46 Master674b#8
Brauchst du alles nicht. Pakete senden musst du mit nem Bot nicht.

Einfach die Adressen von den Funktionen im Spiel raussuchen und diese mit den richtigen Parametern von deinem injecteten Modul aufrufen (meistens musst dich da in den main-game loop hängen damit das geht, das machst du über "Detours").
04/22/2013 21:55 xX.Slayer.Xx#9
Ich habe mir jetzt erst einmal angeschaut, wie ich in Solitär die Variable ändern kann, in dem ich die Zeiger herraus gesucht habe.

Ich denke da werde ich ersteinmal anknüpfen und ein wenig herrum experimentieren.
Danke für eure Antworten.
Werde (wenn es Erfolge gibt) meine Erfolge hier posten ;)
04/25/2013 13:26 MoepMeep#10
Quote:
Originally Posted by Delinquenz View Post
Willst du den ganzen Metin2 Client nachbauen oder wie hast du dir das vorgestellt?
Muss doch nur das packethandling nachgebaut werden ;o
04/27/2013 02:34 Lazeboy#11
Quote:
Originally Posted by MoepMeep View Post
Muss doch nur das packethandling nachgebaut werden ;o
@MoepMeep du hasst die neuste genereation von bots vergessen die privat_client bots -> analyse, hooking/proxy und ver/entschlüsseln war gestern. Sie sind neu im Trend jedoch glänzen nicht mit ihrer Nachfrage. Die große Frage ist: Wird sich die neue Generation durchsetzen? Man weiß es nicht, aber es munkel! Das wars mit der heutigen Episode bot news 2013 the new generation! adieu.

bt2:
Die Wörter im " " solltest du unbedingt nachschlagen und falls möglich Tutorials darüber lesen. Ich gehe mal davon aus das du in dem Bereich "ins spielgeschehen eingreifen" nur sehr wenig Vorwissen hast.
Ich würde dir memorie Bots empfehlen. Einfaches "reversen" von Funktionen ermöglicht dir Funktionen im Spiel aufzurufen die den größten Teil der Arbeit machen. Wichtig dabei ist noch sich in den Bereich "code cave" "detouring" und das programmieren von "dll" einzulesen. Arbeiten mit dem "memory scaner z.B Cheat Engine" und alles was mit dem Bereich memory zusammenhängt: Pointer, Patternscans etc. ist auch in muss. Bevor du jedoch an sowas denkst solltest du klein anfangen wie hacks in offline games(hab damals mit age of empire angefangen). Es gibt ohne Ende Tutorials für Cheat Engine und Trainer programmierung + Dll hacks etc. -> [Only registered and activated users can see links. Click Here To Register...]
mfg Lazeboy
04/29/2013 02:55 dready#12
Was meinste mit Private Client Bots ?
Client nachbauten ?
Falls ja gabs dir prinzipiel schon immer, werden sich aber nie ernsthaft "durchsetzen" der Aufwand nutzen steht nur bei wirklich großen Farmen in irgendeiner Relation, für Tante Käthe die nur ihren drölfzigsten Irokensen Krieger hochspielen will einfach unsinning :)
04/30/2013 01:12 Lazeboy#13
Quote:
Originally Posted by dready View Post
Was meinste mit Private Client Bots ?
Client nachbauten ?
Falls ja gabs dir prinzipiel schon immer, werden sich aber nie ernsthaft "durchsetzen" der Aufwand nutzen steht nur bei wirklich großen Farmen in irgendeiner Relation, für Tante Käthe die nur ihren drölfzigsten Irokensen Krieger hochspielen will einfach unsinning :)
das war nicht ernstgemeint, fand den post einfach nur zu genial ;)
Quote:
Willst du den ganzen Metin2 Client nachbauen oder wie hast du dir das vorgestellt?
04/30/2013 10:56 dready#14
Und deshalb meine Damen und Herren sollte man wenn man mit mir redet nach 0 Uhr immer Ironietags benutzen :P
05/16/2013 17:41 Padmak#15
Ich weiß nicht, ob der ganze Spaß hier noch aktuell ist, ist schließlich schon fast einen Monat alt. Als "alter Hase" im Metin2-Bot-Geschäft kann' ich dir raten: lass die Finger von Packets, das macht absolut keinen Spaß.
Versuch einfach, die Funktionen im Client zu finden, die das tun was du gerne hättest. Da der Client auf Python-C-Gedönse basiert, sollte es kein Problem sein, die Funktionen zu Strings wie "SendItemUsePacket" oder "SendItemMovePacket" zu finden.
Ich kann dir dazu ein super Videotutorial (meins :D) empfehlen:

Schau's dir einfach mal an, wenn du noch weitere Fragen hast, kannst' mir ja einfach 'ne PN schreiben

€: Ja, die Links in der Videobeschreibung sind tot.. Ich hab die Dateien nichtmehr, bringt also nix danach zu fragen^^

Padmak