Sie sind auf Seite 1von 3

Bot Coding - Series C# 2#

Der Sniffer und die Packets:

Was ist ein Sniffer?


Ein Sniffer "schnffelt" sozusagen den Netzwerk Verkehr und zeigt ihn an. In Silkroad "snifft" er die Packets von dem Joymax Server und des Clientes.

Wozu brauchen wir den Sniffer?


Wir brauchen ihn um eben passende Packete rauszufinden, den unsere Bot muss ja dem Server sagen "Kreife das Monster xy an".

Was den genau ist den ein Packet, was enthlt dieses Packet?
Ein Packet ist eine art Narchicht der Client an den Server sendet oder umgekehrt. Der Bot/Server kann die Packete erkennen in dem es den sogennanten "opcode" ausliest der in C# ein ushort wre (WORD).

Der Code des Sniffers


So fangen wir dann wohl mal an. Den Sniffer zu coden ist nicht schwer denn dank unserer Proxy und den 2 Events ist dies ziemlich Simple. Zu aller erst erstellen wir ein Windows Forms Projekt , und erstellen die Proxy Class aus dem letzten Tutorial. Nun fgen wir ein Button hinzu mit dem Text "Start Sniffing". Nun legen wir uns mal den ProxyServer an. Achtung dieser Code nich in das Click Event.
ProxyServer pr = new ProxyServer();

Nun erstellen wir uns 2 Funktionen:


private void ServerToClient(byte[] packet) (Diese Funktion soll die Proxy ausfhren wenn der

Server dem Client ein Packet sendet.)


private void ClientToServer(byte[] packet) (Diese Funktion soll die Proxy ausfhren wenn der

Client dem Server ein Packet sendet.) Nun knnen wir dem Proxy Server die beiden events zuweisen. (In dem Button Click Event)
pr.OnClientSend += new ProxyServer.ClientSend(ClientToServer); pr.OnServerSend += new ProxyServer.ServerSend(ServerToClient);

Und nun noch die Proxy Starten.


pr.Start(ProxyPort, "Joymax Server IP", Joymax Port);

Proxy Port: Die Port der Proxy zB 15778. Darf nicht der selbe sein wie der von dem echten. Ist auch in der Media.Pk2 zu finden. zB mit dem MediaPatcher. Joymax ServerIP: Muss nicht der von Joymax sein kann auch der von zB MySRO sein. Joymax ServerPort: Standart: 15779

So nun erstellen wir uns einen ListView auf unsere Form und seten wir View auf Details. Und fgen nun 3 Spalten ein. "Type" dort soll stehen ob das PAcket vom Server kam oder vom Client. "OpCode" fr den oben erklrten opcode. "Hex" fr das Packet selbst in Hex. So nun wollen das wen der Server dem Client ein Packet schickt in unsere Liste das Packet erscheint. Also gehen wir in unsere ServerToClient Funktion und erstellen ein ListViewItem: Jedoch zu erst mssen wir ja eine Klasse schreiben die den opcode lesen kann. Wir benutzt einfach die Klasse von einem ServerEmulator von Lyzerks oder so^^ http://paste.cp-g.net//view.php?id=1639 Dort ist die Klasse achtet darauf das ihr diese in euer Projekt einfgt und das Namespace addet. So nun legen wir in die ServerToClient Funktion die ReadPacket an.
ReadPacket sroPacket = new ReadPacket(packet, 0);

Nun noch das ListViewItem und dieses dem ListView hinzufgen. Den Code erklre ich nicht weiter, dazu schaut euch mal Windows Forms Serie von MSDN an. So jedoch bevor ich es vergesse ihr braucht noch die BytesToHex Funktion: http://paste.cp-g.net//view.php?id=1640 So nun der ServerToClient Funktion:
ReadPacket sroPacket = new ReadPacket(packet, 0); ListViewItem item = new ListViewItem("S->C"); item.SubItems.Add(sroPacket.opcode); item.SubItems.Add(BytesToHex(packet));

listView1.Items.Add(item);

So das selbe nun in die ClientToServer Funktion nur statt "S->C" - "C->S". So der C# Code ist fertig nun startet ihr das ganze und drckt euren Button.

Das Sniffen:
So bevor ihr euere SRO Startet msst ihr die SRO Ip zu 127.0.0.1 ndert das geht am einfachsten mit dem MediaPatcher. Und ihr msst mit dem Patcher auch gleich den Port auf euren ProxyServer Port stellen. So startet nun SRO via einem Loader. Und schon zeigt euer Sniffer die Packete an.

Ende
So das wars fr diesen Teil, nchstes mal werden wir dann die bentigten Packete sniffen und rausfinden was in ihnen steht.