Quote:
Originally Posted by BladeTiger12
Aber NosTale nutzt TCP.
Es sind auch schon viele Snippets für C++ Online, wie man Packete sendet & Empfängt.
Auch die Hooks in denen alle Send/Recv Packete geloggt werden können.
|
Naja wenn es sich um TCP handelt ist es etwas komplizierter, aber nicht unmöglich.
Bei TCP werden Verbindungen an Sockets gebunden, wenn du nun also Pakete in der selben Verbindung wie ein Spiel senden willst, benötigst du eine Kopie des Socket Deskriptors. Das benötigt etwas arbeit mit der Windows API, und ist außerdem nicht vollständig in AutoIt möglich.
Das Problem ist, unter Windows sind Sockets Prozessgebunden, und um ein Socket zu kopieren, muss die WinAPI funktion DuplicateSocket aus dem Ursprungsprozess aufgerufen werden. Das könntest du darüber realisieren, dass du in einer nicht interpretierten Sprache (z.B. C) eine DLL schreibst, welche du in den Prozess lädst, und die dann DuplicateSocket ausführt, und den neuen Deskriptor dann in eine Datei schreibst. Den kannst du dann mit Autoit auslesen, und dann mittels

die Pakete senden.
Das Hauptproblem wird aber sein das TCP gesichert ist, und daher Protokolle die auf TCP aufbauen meist so designet werden, dass sie mit unerwarteten Paketen nicht zurecht kommen. Außerdem beim lesen hast du dann das Problem der Gleichzeitigkeit der Prozesse. Es ist mehr oder weniger Glückssache ob dein Prozess vor dem Spiel die Daten abruft (da diese aus dem Netzwerkpuffer entfernt werden sobald sie gelesen wurden)
Deutlich einfacher statt also blind Pakete drauf los zu senden wäre es den Informationsfluss zu alternieren. Das wäre u.a. möglich durch das überschreiben der Senderoutine im Hostprozess durch eine eigene Funktion. Allgemein auch als Hooking bezeichnet (auch wenn ich diesen Ausdruck nicht mag). Das hat den Vorteil das dein Programmcode im Prozesskontext des Hostprozesses läuft, du also Vollzugriff auf den Virtuellen Speicher des Prozesses hast. Der Nachteil ist allerdings, dass ein entsprechender Anticheat das recht leicht erkennen kann. Außerdem ist das in AutoIt nicht direkt möglich, sondern benötigt auch wieder eine nicht Interpretierte Sprache.
Eine weitere Möglichkeit wäre es die Daten durch einen Proxy zu senden, welcher die Daten vom Spiel empfängt, analysiert, möglicherweise moduliert, und dann zum eigentlichen Server sendet. Das wäre zwar grundsätzlich in AutoIt möglich, und eigentlich recht leicht, allerdings hat auch diese Methode ein Problem. Wenn die Verbindung verschlüsselt ist, kann das ganze relativ schnell sehr schwer werden. Angenommen die Schlüssel werden über einen Typischen RSA zertifizierten Schlüsseltausch ausgetauscht. Dieser ist grundsätzlich zwar für einen man-in-the-middle Angriff angreifbar, indem du selbst einen Schlüsseltausch mit dem Server (mit dem eigenen RSA Zertifikat) durchführst, und dann einen Separaten mit dem Klienten (mit deinem eigenen RSA Zertifikat), und holst dir dann für jede Verbindung ein eigenes Passwort.
Wenn jetzt das ganze noch durch eine Trustet Authority zertifiziert wird, hast du erst mal damit keine Chance. Dann müsst du die TA überprüfung im Hostprozess umgehen, und dann ist die vorhin benannte Methode des Hookings widerum schon wieder einfacher (da du auch dann mit AutoIt nicht weit kommst)