Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 16:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Wireshark Packet Analysis & Usage

Discussion on Wireshark Packet Analysis & Usage within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
D2_sid's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 329
Received Thanks: 91
Wireshark Packet Analysis & Usage

Mein Anliegen ist es den Login Prozess eines MMORPGs mit Wireshark aufzuzeichnen und zu analysieren. Hinterher möchte ich diese Packets ohne einen Client an den Server senden, um mich einzuloggen. Das Spiel (Kal Online) ist schon etwas älter und es Verschlüsselt die Daten nicht, deshalb habe ich es mir zum testen ausgesucht.

Im folgenden zeige ich meine Beobachtungen, die sich bisher auf die ersten drei Login Schritte beziehen. Nachdem der Client gestartet wurde wird mit einem Klick auf "Ok" die Verbindung zum Server hergestellt. Dann folgt ein 3 Way Handshake (zumindest glaube ich das).

Quote:
Die erste Anfrage an den Server:
19:00:ee:88:66:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:0 0:00:01:02

Darauf folgt eine Antwort:
57:00:2a:ed:9a:9b:52:19:d4:4c:7e:44:ea:fd:42:56:61:1e:00:00:36:00:00:00:0 0:00:00:00:01:12:02: [Hier folgen noch weitere Nullen]

Danach schicke ich wieder ein Paket:
08:00:ed:01:ca:28:00:00 [Dieses Paket ist jedesmal gleich]

ROT steht für die Anzahl an Bytes
Grün ist [glaube ich zumindest] der Packet-Header
BLAU sind Variable Daten, welche sich von Versuch zu Versuch unterscheiden.
Ein Blick auf netstat -n zeigt, dass die Verbindung zum Server hergestellt ist. Hier meine erste Frage:
Muss ich diesen Handshake simulieren, wenn ich mit einem Python Script einen Socket erstelle und mich so mit dem Server Verbinde?

Quote:
import socket

GAME_IP = ""
GAME_PORT =
BUFFER_SIZE = 4096

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((GAME_IP, GAME_PORT))
Wenn ich dieses Programm ausführe zeigt mir netstat -n, dass die Verbindung zum Server hergestellt wurde. Wireshark zeigt jedoch, dass kein Handshake stattgefunden hat. Ist das ein Problem?
Und wenn dieser Handshake stattfinden muss, wie könnte ich ihn simulieren? Die Anfrage im ersten Paket, dass gesendet wird, hat immer einen anderen Inhalt.



Nun ist die Verbindung hergestellt und ich stehe vor dem nächsten Problem. Der Server schickt alle 30 Sekunden ein Paket der Form:
Quote:
03:00:1e
Und der Client Antwortet:
Quote:
07:00:05:40:aa:00:00

Diese Antwort ist sehr interessant. Die BLAUEN Bytes sind wieder variabel. Das orangene Byte ist auch variabel. Es hat allerdings eine interessante Eigenschaft. Wenn es mit 00 initialisiert wurde, wird es [nachdem die Login Daten Übertragen wurden] bei jedem zweiten Paket inkrementiert.

Bevor die Login Daten Übertragen wurden sieht die Kommunikation also beispielsweise so aus:


<- 03:00:1e
-> 07:00:05:40:aa:00:00

<- 03:00:1e
-> 07:00:05:20:c1:00:00

<- 03:00:1e
-> 07:00:05:20:c1:00:00

<- 03:00:1e
-> 07:00:05:20:c1:00:00

<- 03:00:1e
-> 07:00:05:20:c1:00:00
Ich kann bisher mit dieser Kommunikation nichts anfangen. Ich stelle mir vor, dass der Server meinen Client alle 30 Sekunden anpingt, um zu testen, ob die Verbindung noch besteht. Sicher bin ich mir allerdings nicht. Auch hier stellt sich mir die Frage, ob ich diese Kommunikation simulieren muss. Und wenn, womit fülle ich die variablen Bytes?



Es geht also weiter und ich übertrage meine Login Daten. Das funktioniert nebenbei bemerkt auch schon mit meinem Python Code. Das habe ich getestet, indem ich die Antwort abgefangen habe. In dieser Antwort wurde der Charaktername übergeben.

Quote:
11:00:f4:XX:XX:XX:XX:XX:XX:XX:00:XX:XX:XX:XX:XX:00

In diesem Login Paket stecken unverschlüsselt der Username und das Passwort. Als Antwort kommen zwei Pakete:

27:00:11:00:00:00:00:00:01:86:a8:00:00:XX:XX:XX:XX:XX:00:00:03:1e:00:00:00:00:12:00:15:00:08:00:08:00:0 a:00:01:01:00 [Das Paket mit dem Charakternamen]

und:

04:00:19:00 [Dieses Paket ist immer gleich. ich habe keine Ahnung, wozu es da ist.]

Quote:
Es folgt wieder im 30 Sekundentakt die Anfrage mit dem Paket:

03:00:1e

Mit der selben Antwort wie vorher, mit dem Unterschied, dass bei jedem zweiten Paket jetzt inkrementiert wird. Im Beispiel von vorhin sehe das nun so aus:

<- 03:00:1e
-> 07:00:05:XX:XX:00:00

<- 03:00:1e
-> 07:00:05:XX:XX:00:00

<- 03:00:1e
-> 07:00:05:XX:XX:01:00

<- 03:00:1e
-> 07:00:05:XX:XX:01:00

<- 03:00:1e
-> 07:00:05:XX:XX:02:00

Ich gehe davon aus, dass die letzten beiden Bytes zur Inkrementation verwendet werden. Was noch interessanter ist, ist dass die BLAUEN variablen Bytes sich jetzt bei jeder gesendeten Antwort verändern. Bevor die Login Daten übertragen wurden waren sie zwar auch beliebig, wurden aber festgesetzt, als die Verbindung hergestellt wurde. Es gilt weiterhin die Frage, ob ich diese Kommunikation manuell handhaben muss.
In meinem Python Script habe ich bisher mit dem Socket die Verbindung hergestellt. Danach habe ich das Login Paket mit Username und Passwort übertragen, worauf ich eine Antwort mit dem Charakternamen erhalten habe. Danach habe ich ein weiteres Paket übertragen, welches den Login bestätigen sollte [im Client habe ich hier einfach 'ENTER' gedrückt]. Daraufhin wird mir der Charakter als online angezeigt und kann auch Nachrichten empfangen. Allerdings ist er in der Welt nicht zu sehen.
D2_sid is offline  
Old 11/10/2015, 11:29   #2


 
Ende!'s Avatar
 
elite*gold: 1
Join Date: Feb 2009
Posts: 6,378
Received Thanks: 7,996
str in Python 2, bytes in Python 3. Aus deiner Error-Message leite ich mal ab, dass du 3 benutzt. Folgende Syntax sollte in beiden Versionen funktionieren (Py2 ignoriert das b-Präfix einfach):

Code:
meow = b'\xAA\xBB\xCC\xDD\x12\x56\x98'
Aber ich schließe mal aus deinem Edit, dass du das bereits rausgefunden hast. Woran es liegt, dass das mit deinem Character da nicht funktioniert, kann dir hier vermutlich ohne weitere Informationen niemand beantworten. Du solltest jetzt erstmal das Protokoll analysieren, beispielsweise Felder für Länge des Packets, Opcode, möglicherweise Magic etc. lokalisieren um das Protokoll näher zu verstehen. Um den Kram dann extrahieren zu können, schau dir mal Python's Modul an.
Ende! is offline  
Thanks
1 User
Old 11/11/2015, 12:37   #3
 
D2_sid's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 329
Received Thanks: 91
Hier ein Update: Ich habe es nun endlich geschafft mich komplett einzuloggen. Der Charakter ist in der Welt auch sichtbar. Ich musste nach dem "Enter" noch ein weiteres Paket senden. Für diejenigen, die es interessiert:

Der 3 Way Handshake muss nicht modelliert werden. Es scheint egal zu sein, wie die Verbindung zustande kommt. Hauptsache sie wird hergestellt.

Auf die Anfrage vom Server mit dem Paket
Quote:
03:00:1e
muss nicht geantwortet werden. Kommt jedoch für eine gewisse Zeit kein Paket beim Server an wird die Verbindung unterbrochen.

Das senden einer Nachricht im Chat hat problemlos funktioniert.
Quote:
s.send(b"\x09\x00\x0eCHATNACHRICHT\x00")
Desweiteren habe ich mich an einem Move Paket versucht.
Quote:
s.send(b"\x06\x00\x11\x01\x01\x00")

Die Richtung wird dabei von \x01\x01 bestimmt. Die entgegengesetzte Richtung wäre \xff\xff. Ich bin mir noch nicht sicher, wie oft dieses Paket gesendet werden muss. Um sich konstant in eine Richtung zu bewegen muss es jedenfalls mehrmals pro Sekunde gesendet werden.
Die nächste Hürde ist es nun die Position eines Objektes im Spiel zu erfassen und sich mit dem Move Paket an diese Stelle zu bewegen. Ich habe bislang noch keine Idee, wie ich das schaffen soll.
D2_sid is offline  
Old 11/11/2015, 14:31   #4



 
IceTrailer's Avatar
 
elite*gold: 150
Join Date: Sep 2010
Posts: 2,070
Received Thanks: 821
Um nochmal schnell zu ergänzen wegen dem Handshake:

Ich denke das hängt ganz davon ab, was der Server erwartet. Bei Minecraft wirst du zum Beispiel rausgeschmissen, wenn kein Handshake kommt.
IceTrailer is offline  
Thanks
1 User
Old 11/11/2015, 16:22   #5
 
D2_sid's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 329
Received Thanks: 91
Ich habe bisher noch immer keine Idee, wie ich die Koordinaten eines Objektes aus diesen Paketen bekommen kann. So sieht der Datenverkehr aus, wenn ich ein Item aufheben möchte, das ein paar Schritte entfernt liegt. Das was ich bisher als Move Paket identifiziert habe ich Blau gekennzeichnet.

Quote:
<- 0a:00:25:95:19:00:00:ee:e6:00

<- 47:00:cd:00:00:00:00:00:00:00:00:00:00:00:00:00:00 :00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:0 0:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 :00:00:00:00

<- 0b:00:cb:6b:a2:00:00:00:00:00:00

-> 06:00:11:ff:0a:0c

-> 06:00:11:ff:0a:0d

-> 06:00:11:ff:0a:0d

-> 06:00:11:ff:0a:0e

-> 06:00:11:ff:0a:0d

-> 06:00:11:ff:0a:0d

-> 06:00:11:ff:0a:0f

<- 07:00:38:e7:19:00:00

-> 06:00:11:ff:0a:0d

-> 06:00:11:ff:0a:0c

-> 06:00:11:ff:0a:0e

<- 07:00:38:e0:19:00:00

<- 43:00:33:62:02:31:5d:00:00:b0:ff:03:00:12:d4:03:00 :e6:ee:8f:03:00:00:8f:03:00:00:00:00:00:00:00:00:0 0:00:00:00:00:00:00:00:00:00:00:01:00:00:00:00:00: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

-> 06:00:11:00:06:62

-> 06:00:11:ff:0a:f4

<- 43:00:33:65:02:92:19:00:00:5a:ff:03:00:f9:d2:03:00 :e2:09:5e:03:00:00:5e:03:00:00:00:00:00:00:00:00:0 0:00:00:00:00:00:00:00:00:00:00:01:00:00:00:00:00: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

-> 06:00:11:ff:08:c3

<- 47:00:cd:00:00:00:00:00:00:00:00:00:00:00:00:00:00 :00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:0 0:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 :00:00:00:00

<- 0b:00:cb:6b:a2:00:00:00:00:00:00

-> 06:00:11:ff:0a:09

-> 06:00:11:ff:0a:0a

-> 06:00:11:ff:0a:0a

-> 0f:00:1d:67:d7:00:00:13:20:00:00:89:1e:00:00:06:00 :12:00:00:00

<- 0c:00:09:db:fe:6b:59:3c:0c:00:00:0c

<- 07:00:3b:67:d7:00:00
D2_sid is offline  
Old 11/11/2015, 18:52   #6
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
07:00:05:40:aa:00:00

40:aa:00 könnten die letzten 6 Zeichen eines UNIX Timestamps sein.
Prüf das mal.

5640AA00 = 1447078400 in Base 10 = 09.11.2015 - 15:13:20

07:00:05:40:aa:00:00

40:aa:00 könnten die letzten 6 Zeichen eines UNIX Timestamps sein.
Prüf das mal.

5640AA00 = 1447078400 in Base 10 = 09.11.2015 - 15:13:20
Daifoku is offline  
Thanks
1 User
Old 11/12/2015, 20:55   #7
 
D2_sid's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 329
Received Thanks: 91
Code:
->06:00:11:fa:f8:e6
Code:
<-43:00:33:65:02:5b:1a:00:00:46:ff:03:00:c4:d0:03:00:02:e1:5e:03:00:00:5e:03:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
Code:
<-0a:00:24:5f:1a:00:00:e2:f7:00
Code:
<-0a:00:24:b1:1a:00:00:14:18:01
Code:
->06:00:11:f9:f9:e6
Code:
->06:00:11:fa:f8:e8
Code:
<-0a:00:24:ad:1a:00:00:19:ed:00
Code:
->06:00:11:fa:f8:e5
Code:
->06:00:11:ff:00:ff
Code:
<-0c:00:0c:01:b1:1a:00:00:3f:44:00:00:06:00:12:00:00:00
Was hier zu sehen ist ist folgendes:
Der Charakter ist eingeloggt. Ich Klicke mit der linken Maustaste einen Gegner an. Der Charakter bewegt sich zum Gegner. Dabei passt er automatisch die Richtung an, wenn sich der Gegner bewegt. Ist der Charakter in Reichweite greift er den Gegner an.

Die ausgehenden Packets ("->") sind Move Pakete, das letzte ist das Paket, dass den Angriff sendet. Aus dem Vorgehen kann man ableiten, dass die Position des Gegners in den ankommenden ("<-") Paketen stecken muss.
D2_sid is offline  
Reply


Similar Threads Similar Threads
NetPro: Packet Analysis and Visualization tool
01/27/2015 - Lin2 Exploits, Hacks, Bots, Tools & Macros - 3 Replies
There is no content in this thread.
item usage packet
04/12/2014 - CO2 Private Server - 17 Replies
hey guys i have a problem to find the item usage packet item uid i log this packet whis i use the SerenityPill which have the uid 725066 but when i log the packet 5C 00 F1 03 EA ED A3 06 7F 9A D9 05 00 00 00 00 ;\ ñêí£šÙ 04 00 00 00 F1 20 B3 06 00 00 00 00 00 00 00 00 ; ñ ³ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00...
Inventory Packet , type , usage id ??
05/24/2012 - CO2 Private Server - 12 Replies
Hello guys , dose there any packet or usage type or ID for Inventories source 5017 ? i searched all sources but found nothing , most using Dictionary for and 40 solts . Lol i would like to know if there a packet or anything else for the Inventory , i also checked ConquerWiki , but nothing was helpfully there with what i am looking for.
CoPacketSniffer 8:@ , packet learning / discovery tool does wireshark like filtering
10/15/2010 - CO2 Exploits, Hacks & Tools - 11 Replies
CoPacketSniffer 8:@110110110110... REQUIRES WinPcap:WinPcap, The Packet Capture and Network Monitoring Library for Windows Run As ADMIN: Required for using conquer memory for trial & error when solving for the key after DH key exchange. THIS IS NOT A BOT, ITS A EDUCATIONAL TOOL, PLEASE DON'T ASK ME HOW TO MAKE IT HUNT!!! Hello Guys and Girls, made a nice little tool for assisting developers out there in finding packets and learning how they work.



All times are GMT +1. The time now is 16:44.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.