Pakete verschicken

08/13/2010 18:55 Zulman#1
Hallo,
ich habe mir hier schon einige/ziemlich viele^^ Tutorials zu Gamehacking, sprich Cheat Engine, Paket Sniffing, usw durchgelesen. Was ich mich jetzt nur frage ist, könnte ich in einem MMORPG zB einen Gegenstand verkaufen, das Paket, das dafür verschickt wird mitsniffen und dann das Paket immer wieder abschicken, damit der Server denkt, ich verkaufe das Item ganz oft -> ich bekomme viel Kohle ;D (Würde natürlich nur funktionieren, wenn die Items die man mit herumträgt nur clientseitig gespeichert werden, da er sonst vermutlich merkt, dass man das Item gar nicht mehr hat) Und die zweite Frage dazu ist, wie lässt sich so etwas (oder etwas ähnliches, was funktionieren würde) mit einem Programm realisieren. Damit der Server auch denkt, das Paket kommt vom richtigen Spiel. Kann man auf die Socketverbindung zwischen Spiel und Server zugreifen und das darüber laufen lassen? Wenn es Codebeispiele gibt, wäre ich dankbar wenn diese entweder in C# (auf diese Sprache will ich mich konzentrieren) oder AutoIT (Vom Verständnis her vermutlich einfacher, da ich noch ziemlich geringe Kenntnisse was Programmieren angeht habe) geschrieben wären. Generell bin ich aber für jede Hilfe dankbar, sogar wenn sie in Suaheli verfasst ist :D

P.S.: Ich erwarte natürlich nicht, dass sich jemand die Mühe macht und mir einen fertigen Code den ich nur copy und pasten muss postet und ich ihn trotzdem nicht verstehe. Da hab ich ja nix davon ;)
08/13/2010 19:02 Jeoni#2
Für das Versenden von Packets per AutoIt kann ich dir [Only registered and activated users can see links. Click Here To Register...] empfehlen. Musst eben nur Port ändern (für weitere Fragen: PN me).
Mit vb.net (vll. auch C#?) solltest du dir mal die Class TCPClient und TCPListener ansehen. (Für Fragen/Code: PN me).
08/13/2010 21:54 Zulman#3
Ok, dankeschön. Bin gerade dabei mir das zu AutoIT durchzulesen. Bedeutet das, dass man immer eine neue Verbindung aufbauen muss? Sprich ich könnte in diesem MMO nicht sagen ich logge mich normal ein und sende dann das Paket das den Verkauf eines Items vortäuscht sondern ich muss die gesammte Prozedur mit Einloggen, etc. mit meinem Program durchführen?
08/13/2010 22:04 ms​#4
Du könntest auch eine Art Proxy schreiben, zu dem sich der Client verbindet und dein Programm dann wiederrum eine Verbindung zum Server herstellt.
08/13/2010 22:26 Zulman#5
Quote:
Originally Posted by Disconnect View Post
Du könntest auch eine Art Proxy schreiben, zu dem sich der Client verbindet und dein Programm dann wiederrum eine Verbindung zum Server herstellt.
Das klingt sehr interessant und ich könnte mir auch vorstellen, dass es funktioniert, da ja dann sowieso alle pakete von diesem Proxy kommen und man nicht unterschieden kann ob das Paket das Spiel oder der Proxy erzeugt hat. Da gibt es nur ein Problem. Ich hab keine Ahnung wie ich das anfangen soll. Ich müsste ja irgendwie dem Spiel sagen, dass es sich mit meinem Proxy verbindet. Und wie man den Proxy an sich schreibt, weiß ich leider auch nicht. Ich werd mal versuchen mir ein bisschen was im Internet zusammen zu suchen, wie man das machen könnte.

€dit: Habe ein Tutorial zu einem Socks5 Proxy in C# gefunden, kann ich mit so einem Proxy etwas anfangen?
08/14/2010 15:38 SmackJew#6
Quote:
Originally Posted by Zulman View Post
Das klingt sehr interessant und ich könnte mir auch vorstellen, dass es funktioniert, da ja dann sowieso alle pakete von diesem Proxy kommen und man nicht unterschieden kann ob das Paket das Spiel oder der Proxy erzeugt hat. Da gibt es nur ein Problem. Ich hab keine Ahnung wie ich das anfangen soll. Ich müsste ja irgendwie dem Spiel sagen, dass es sich mit meinem Proxy verbindet. Und wie man den Proxy an sich schreibt, weiß ich leider auch nicht. Ich werd mal versuchen mir ein bisschen was im Internet zusammen zu suchen, wie man das machen könnte.

€dit: Habe ein Tutorial zu einem Socks5 Proxy in C# gefunden, kann ich mit so einem Proxy etwas anfangen?
Wenn du keine Ahnung von Socketprogrammierung hast, wird das schonmal nichts. Da hilft nur nachlesen.

Wie du bereits angedeutet hast, durch einen kleinen Hook könntest du bequem die vom Spiel bereits hergestellte Verbindung nutzen und deine eigenen Pakete versenden. In purem C# wird das allerdings meines Wissens nach nichts. Für AutoIT gilt das ebenfalls.

Die Proxy Methode setzt natürlich das Umleiten der Verbindung im eigentlichen Client voraus, wenn deine Reversing Fähigkeiten das erlauben, warum nicht? Die Proxy Applikation fungiert dann wie ein Server, empfängt Pakete und leitet sie (ob nun verändert oder nicht) an den Gameserver weiter. Einfacher als Methode 1? Definitiv nicht, vor allem wenn du wenig Reversing -und Programmier - Erfahrung hast.

Je nach Spiel wirst du dich ebenfalls mit Verschlüsselung herumschlagen müssen. Wenige MMOs sind heutzutage ohne Verschlüsselung. Diese musst du lokalisieren und zumindest so viel ASM Verständnis haben, sie entweder nachzubauen oder so zu kopieren, dass sie in deinem Code funktioniert (da wären wir wieder bei "C#/AutoIT? Nein, danke"). Alles in Allem für einen Anfänger sicherlich keine triviale Aufgabe.
08/14/2010 17:46 Zulman#7
Hm... eine Antwort in der Richtung habe ich schon fast erwartet. Also vllt doch erst mal etwas einfacheres ;) Dann werd ich mich jetzt wohl erst mal ein bisschen mit Netzwerkprogrammierung beschäftigen. Vielleicht krieg ich ja erst mal einen kleinen Browsergame bot in C# hin oder etwas in der Art. Für den Anfang sind wohl richtige MMOs doch etwas zu schwierig. Aber vielen dank für die Infos, hat mir auf jeden Fall weitergeholfen.
08/14/2010 23:34 bassbanane#8
Befass dich lieber erstmal ein wenig mit debugging, hooking und detouren.
Denn falls du eine "proxy dll" coden willst, die du später in den prozess injectest und damit dann die packets auslesen willst, musst zuerst die Funktion zum senden und vllt. auch crypten der packete hooken, sodass du sie dir bevor das spiel sie verschickt ausgeben lassen kannst.
Klingt etwas kompliziert aber in den meisten Fällen wird es in etwa so gemacht. Natürlich kann das von Spiel zu Spiel variieren aber das Grundprinzip bleibt das selbe. Und dafür brauchste auf jeden fall debugging erfahrungen heißt OllyDBG rausholen und etwas rumgucken ;)
08/15/2010 03:31 MrSm!th#9
Quote:
Originally Posted by Zulman View Post
Hallo,
ich habe mir hier schon einige/ziemlich viele^^ Tutorials zu Gamehacking, sprich Cheat Engine, Paket Sniffing, usw durchgelesen. Was ich mich jetzt nur frage ist, könnte ich in einem MMORPG zB einen Gegenstand verkaufen, das Paket, das dafür verschickt wird mitsniffen und dann das Paket immer wieder abschicken, damit der Server denkt, ich verkaufe das Item ganz oft -> ich bekomme viel Kohle ;D (Würde natürlich nur funktionieren, wenn die Items die man mit herumträgt nur clientseitig gespeichert werden, da er sonst vermutlich merkt, dass man das Item gar nicht mehr hat) Und die zweite Frage dazu ist, wie lässt sich so etwas (oder etwas ähnliches, was funktionieren würde) mit einem Programm realisieren. Damit der Server auch denkt, das Paket kommt vom richtigen Spiel. Kann man auf die Socketverbindung zwischen Spiel und Server zugreifen und das darüber laufen lassen? Wenn es Codebeispiele gibt, wäre ich dankbar wenn diese entweder in C# (auf diese Sprache will ich mich konzentrieren) oder AutoIT (Vom Verständnis her vermutlich einfacher, da ich noch ziemlich geringe Kenntnisse was Programmieren angeht habe) geschrieben wären. Generell bin ich aber für jede Hilfe dankbar, sogar wenn sie in Suaheli verfasst ist :D

P.S.: Ich erwarte natürlich nicht, dass sich jemand die Mühe macht und mir einen fertigen Code den ich nur copy und pasten muss postet und ich ihn trotzdem nicht verstehe. Da hab ich ja nix davon ;)
Wenn ich dich richtig verstehe, fragst du unter anderem, wie du ein eigenes Programm so schreiben kannst, dass der Server denkt, es ist der Client, sodass du es nicht per WPE o.Ä. machen musst (und wahrscheinlich ohne das Spiel laufen zu haben botten kannst).

Dafür müsstest du die Ver- und Entschlüsselung finden und nachbauen, die Packetstruktur analysieren und nachbauen und dann eben noch das Verhalten, wie Server auf Client und umgekehrt reagieren, analysieren.
Dann musst du dich per Sockets mit dem Server über den richtigen Port verbinden und die Packets senden, allerdings wird es wohl, wenn du ein komplett externes Programm und nicht den Client nutzt, auch nötig sein, das Login zu emulieren, damit du überhaupt Zugriff bekommst.
08/15/2010 15:30 nkkk#10
hmm ich denke es ist einfacher erstmal zu gucken ob man vieleicht gleich die Dlls b.z.w. funktionen aus dem, spiel übernehmen kann da spart man sich ne menge arbeit. Oft gibt es funktionen wie "SendBuyItemToServer" die man dann einfach nehmen kann. im zweifel kann man diese auch mit einer injeceten Dll aufrufen. Oder man schreibt eben sein eigenes prog.
08/15/2010 15:54 Zulman#11
Ok, danke für die ganzen Tipps, aber ich hab leider keine Ahnung von Dlls oder irgendwas hooken, etc. Wie fang ich denn mit sowas am besten an und ist sowas mit C# überhaupt möglich?
08/15/2010 20:27 MrSm!th#12
Naja, hooken halte ich nicht zwingend für nötig, das wäre es nur, wenn du dir nen eigenen Packetsniffer baust, der die Packets auch entschlüsselt, damit du sie besser analysieren kannst.

C# wäre nicht von Vorteil, C/C++ wäre am besten, es geht aber auch mit Delphi o.Ä.
08/15/2010 23:10 Zulman#13
Hm... macht mir so den Anschein als obs vllt doch am besten wäre, C++ zu lernen, damit kann man halt trotzdem am meisten machen, nicht nur was jetzt dieses Thema angeht. Obwohl mir C# eig ganz gut gefällt, und C++ ist so schwer hab ich den Eindruck, hab vor einiger Zeit, als ich angefangen hab mich mit Programmieren zu beschäftigen schon mal versucht C zu lernen, aber fiel mir nicht gerade einfach. Auch wenn ich sagen muss da hatte ich noch weniger Basics drauf als heute, und wenn ich mich hier so in dem Forum umsehe hab ich immernoch das Gefühl, dass ich nicht im entferntesten was könnte ;D Sollte ichs vllt trotzdem versuchen auf C++ umzusteigen?
08/15/2010 23:45 MrSm!th#14
Du musst nicht umsteigen, es ist immer gut, viele Sprachen zu können.
Außerdem habe ich vor kurzem erfahren, dass es möglich ist, in C++ einen .NET Host zu erstellen, sodass man die wichtigen Dinge mit C++ machen kann und den Rest in C#, ohne die Dll oder den Prozess gleich zu nem .NET File zu machen.
08/16/2010 00:11 Zulman#15
Ok, dann bleib ich jetzt erst mal bei C#. Wird ne ganze Menge zu lernen, aber solangs Spaß macht, gehts ja immer noch ;) Ist wohl das beste, wenn ich mir einfach irgend ein Programm ausdenke und das dann versuche mit Hilfe von vielen Googlesuchen umzusetzen, oder?