Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 02:58

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

Advertisement



[Tutorial] Packets - Sniffing & Analysis

Discussion on [Tutorial] Packets - Sniffing & Analysis within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old 09/17/2008, 15:02   #31
 
psych0o's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 1,032
Received Thanks: 86
Ich bin schon dabei es auf Deutsch zu übersetzen
psych0o is offline  
Thanks
1 User
Old 09/17/2008, 15:43   #32
 
syntex's Avatar
 
elite*gold: 46
Join Date: Mar 2006
Posts: 2,589
Received Thanks: 1,198
Quote:
Originally Posted by AvengerXXX View Post
irgendjemand hier der evtl zuviel zeit hat und gut eng-ger kann und mir das tutorial übersetzt?
LOL If you cant even speak english, dont try to understand packets.
please!
syntex is offline  
Old 09/17/2008, 16:26   #33
 
elite*gold: 0
Join Date: Oct 2007
Posts: 47
Received Thanks: 1
syntex ich kann english nur eben sind da einige wörter die ich nirgends sinngemäß ubersetzt kriege und auf deutsch ist es einfach leichter btw wie ändere ich bei wpe auf ascii mode
AvengerXXX is offline  
Old 09/17/2008, 16:52   #34
 
psych0o's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 1,032
Received Thanks: 86

Packets - Sniffing & Analysis

Dieses Tutorial wurde von für das Elitepvpers-Board geschrieben.
Dieses Tutorial darf auch in andere Foren kopiert werden, doch bitte erwähnt den Autor und das Elitepvpers-Board als Credits.

Dieses Tutorial wurde von von Englisch nach Deutsch übersetzt. Fehler sind alle MIR!
:: Inhalt ::

1. Was brauche ich ?
^---> Download links

2. Erste Einstellungen
^---> Einstellungen für WPE
^---> Einstellungen für den Windows Rechner

3. Pakte sniffen (abfangen)

4. Pakete analysieren
^---> Die Struktur
^---> Erweiterte Struktur Analyse
^---> Die Verschlüsselung



-----------------------------------------------------



1. Was brauche ich ?

Benötigt werden diese Programme:
  • Windows
  • WPE - (Password : elitepvpers.com)
  • Windows Rechner - ist bei Windows standartmäßíg installiert
  • Einen Hex-Editor, oder Notepad (Ich werde HexWorkshop benutzen)



-----------------------------------------------------



2. Erste Einstellungen

Starte WPE und gehe im Menü auf View -> Options
und ändere die Einstellungen für "Winsock 2.0" in diese:



Warum ? Wenn das Programm, von dem du die Pakete sniffen willst, WINSOCK 2.0 benutzt, wird WPE dadurch in der Lage sein, diese zu sniffen, da die WINSOCK 2.0 Einstellungen standartmäßig DEAKTIVIERT sind.


Nun starte den Windows Taschenrechner. Entweder über die Tastenkürzel [WINDOWS-TASTE]+[R], wo du dann "calc" eingibst, oder über das Startmenü (Start -> Alle Programme -> Zubehör -> Rechner).
Sobald der Taschenrechner geöffnet ist, klicke auf "Ansicht" und wähle dort "Wissenschaftlich", so dass man Hexdezimale Zahlen benutzen kann.



-----------------------------------------------------



3. Pakete sniffen (abfangen)

Lasst uns nun ein paar Pakete sniffen.
Für dieses Beispiel nehmen wir den Internet Explorer. Starte also diesen.
Nun startest du WPE und wählst den Internet Explorer Prozess aus.

Klicke auf den "Target Program" Button.



Und wähle den Internet Explorer (iexplore.exe) aus.

Nun können wir das Sniffen starten, in dem wir diesen Knopf drücken:



Lasst uns nun im Internet Explorer die Seite "www.elitepvpers.com/forum" aufrufen.

Ok nun prüf die Messgrafiken um zu sehen, ob WPE wirklich Pakete aufnimmt.
Nachdem die Seite komplett geladen wurde, sieht die Messgrafik bei mir so aus;

Dieses muss bei euch nicht genauso aussehen, es kann variieren.

Halte nun das Sniffing an, in dem du den roten Stop-Knopf drückst, den wir alle von einem Videorecorder kennen.



Nun sollte WPE in etwa so aussehen:

Natürlich muss es bei euch nicht wieder genau so aussehen.
Ihr seht dort nun die abgefangenen Paketed packets.


Ich vermute, dass wir nun genug über das Sniffing geredet haben und dass du nun in der Lage bist, alle Programme und Spiele zu sniffen.



-----------------------------------------------------



4. Pakete analysieren
Die Struktur

Ich werde hier als Beispiel ein fiktives Spiel benutzen, da das Tutorial auf andere Spiele anwendbar sein soll und nicht nur für eins.
Bitte habt verständnis dafür, dass ich dieses Tutorial nicht für jedes Spiel/Programm schreiben kann und auch nicht für jede Paketstruktur, die es auf der Welt gibt.
Probiert es einfach selber aus.

Nehmen wir nun an, wir haben ein Spiel anmens "JungleBob Online" (Der Name spielt keine Rolle, ich wollte bloß einen Namen benutzen)

Wir starten das Spiel und warten auf den Loginbildschirm. Nun starten wir WPE und wählen "JungleBob.exe" aus und starten das Sniffen.

Last uns versuchen mit dem Benutzernamen "myusername" und dem Passwort "mypassword" einzuloggen.
Ok, dieser Benutzername exestiert nicht in unserem Spiel und er gehört nicht uns. Wir verwenden das nur zum testen der Pakete.

Nun stoppen wir den Sniffing-Vorgang und schauen uns die ersten Pakete an, welche vom Client (also dem Spiel) zu dem Server geschickt wurden.

Unsere Pakete sollten in etwa so aussehen:
(in WPE werden die Pakete links als HEX-Dezimal angezeigt und rechts als ASCII Zeichen)

22 00 11 00 6D 79 75 73 65 72 6E 61 6D 65 00 00 00 00 00 00 6D 79 70 61 73 73 77 6F 72 64 00 00 00 00 00 00

(Ich habe es mit Leerzeichen geschrieben, damit man es besser lesen kann)

Was wissen wir nun? Wir benutzten den Benutzernamen "myusername" und das Passwort "mypassword" und WPE sagt uns, dass die Paketgröße 36 Bytes ist.
Prüfen wir also mal diese Bytes. Wenn wir mit Bytes arbeiten müssen wir wissen,
dass dort eine umgekehrte Byte-Anordnung für die Werte ist.
(Ich hoffe ihr wisst, was Hexdezimal ist. Wenn nicht, lernt erst etwas über das Hexdezimal System)
P.S.: Für alle Experten hier, die mich gleich anflamen... Ich weiß, dass es "Little Endian" und "Big Endian" heisst und es was mit der Bit-Anordnung zu tun hat.
Aber ich möchte das hier nicht weiter erklären, weil dieses Tutorial sich an Anfänger richtet.

Wenn du einen Dezimalwert von 1 hast, ist sein Hexwert 01.
Wenn du einen 2-Byte Delimiter haben (WORD oder 16bit Integer genannt), sieht der Wert so aus: 00 01
Wenn wir einen 4-Byte Delimiter haben (DWORD oder 32bit Integer genannt), sieht der Wert so aus: 00 00 00 01
Also immer 2-Bytes oder 4-Bytes bis zum nächsten Wert.

Das ist die normale Byte-Anordnung.
Bei einer umgekehrten Anordnung sieht alles... umgekehrt aus.. Also sehen unsere Werte so aus:
(Als 2-bytes)
Original: 00 01 Umgekehrt: 01 00

(Als 4-bytes)
Original: 00 00 00 01 Umgekehrt: 01 00 00 00

Lasst uns nun nochmal das Login-Paket anschauen.

22 00 11 00 6D 79 75 73 65 72 6E 61 6D 65 00 00 00 00 00 00 6D 79 70 61 73 73 77 6F 72 64 00 00 00 00 00 00

Wie wir wissen, werden die Werte entweder als 2-Byte oder 4-Byte getrennt angezeigt. Damit können wir nun unsere Loginpaket prüfen.

Die ersten 2 Bytes sehen aus wie ein Wert.

22 00


Umgekehrt : 00 22

Startet euren Windows Rechner und ändert die Ansicht von Dez(DEC) (Standart) auf Hex.
Nun gebt als Hex Wert ein: 0022 (natürlich ohne leerzeichen)
Nun ändert die Ansicht erneut auf Dec (Dezimal).
Vergleicht nun mit der Paket-Größe, die uns WPE genannt hat (36 bytes)
Siehst du die Parallele? Unsere Paketgröße minus den 2 Bytes, die wir gerade genommen haben ergibt 34.
Also werden durch die ersten 2 Bytes die restigen Anzahl an Bytes des Pakets angegeben.
(Doch es kann auch an anderen Stellen (z.B. der 4. Stelle) vorkommen)
In meinem Beispiel sind die 2-Bytes, welche die Größe angeben, nicht in die die Paketgröße mit einbezogen, weil viele Spiele verschlüsselungen für die Pakete benutzen, so dass alle Pakete, bis auf die Bytes, die die Größe angeben, verschlüsselt sind.
Die Bytes, die die Größe angeben sind meistens die ersten, zweiten oder vierten Bytes.
Aber du solltest dir jetzt noch nicht soviele Gedanken um die Verschlüsselung machen, da diese Pakete im Beispiel unverschlüsselt als Plain-Text (reiner Text) sind.
Dadurch kann man den Benutzernamen und das Passwort im ASCII-Fenster (rechts) sehen, welche wir vorher festgelegt haben.

Wir wissen nun, dass die ersten 2 Bytes die Paket-Länge angeben.
Aber was ist mit dem Rest? Nun, da ich das schon eine ganze Weile mache, weiß ich, dass die nächsten paar Bytes ein Befehl oder der "Paket-Kopf" (Header) sind.
(Ich weiß, dass es nicht der wirkliche "Paket-Header" ist, aber zur besseren veranschaulichung, definiere ich es hier so)
Wie testen wir das nun?
Sniff nun weitere Login-Pakete, in dem du einen anderen Benutzernamen und ein anderes Passwort angibst (welche ist egal).
Bis auf die Bytes, die den Benutzernamen und das Passwort enthalten, sollten sich die Werte nicht ändern.

Ok wir wissen nun, dass 11 00 unser Befehl (oder Kopf) ist. Du brauchst das nicht in Dezimal umrechnen.
Es ist einfach ein Hexdezimaler Header, den die Spieleprogrammierer als "Paket Protokoll" erstellt haben.
11 00 ist der Login, 12 00 ist das "getserverlist"-Paket (Serverliste holen) und so weiter und so weiter.
Verstanden was ich meine?


Ok wir haben viel rausgefunden. Lasst uns weiter machen.
Wir schauen auf das ASCII-Fenster und es sieht so aus, dass der nächste Wert der Benutzer (myusername) ist.
Aber was haben die ganzen 00en zu bedeuten, die nach dem Benutzernamen folgen?
Ganz einfach: Die meisten Spiele haben ein Limit für die Länge von Benutzername und Passwort.
In den meisten fällen ist es eine Länge von 12, 16, 24, 28 oder 32 Zeichen.
Damit es einfacher ist, haben die Programmierer die Länge für den Benutzernamen und das Passwort festgesetzt (static)
Wenn unser Puffer nun eine Länge von 5 hat und wir "lol" reinschreiben, dann sieht das so aus:

6C 6F 6C 00 00


Wir wissen nun also, dass die Login-Paket Struktur so aussieht:

2B = 2 Bytes
4B = 4 Bytes
XB = X Bytes

22 00 11 00 6D 79 75 73 65 72 6E 61 6D 65 00 00 00 00 00 00 6D 79 70 61 73 73 77 6F 72 64 00 00 00 00 00 00

<LÄNGE>.2B <HEADER>.2B <BENUTZERNAME>.16B <PASSWORT>.16B


Das ist eine Grundanleitung für das Analysieren von Paketen.
Die Sache ist nur, dass du mit vielen Werten rumhantieren musst.
Wie z.B. wenn der Server auf den Login mit einem 4-Byte Wert antwortet.
Einfach auf ein stück Papier schreiben und die nächsten Pakete prüfen, welche gesendet werden.
So kannst du ihre Funktion rausfinden. Z.B. wenn der Server als Antwort eine 4-Byte lange SessionID sendet, welche der Client zum Character-Server schickt, um sich zu authentifizieren.



4. Pakete Analysieren
Erweiterte Struktur Analyse

Da viele Leute sagen, dass ein solches Login-Verfahren sehr leicht ist, möchte ich hier nun näher über die Erweiterte Struktur Analyse eingehen.
Ich werde ein Beispiel zeigen/simulieren, wie das ganze mit Server-Antworten und der "(Welten) Serverauflistung" abläuft.
Da die meisten MMORPGs mehr als nur einen Spielserver (oder "Welt) haben, werde ich versuchen hier zu zeigen, wie das ganze Zeug abläuft.

Wir starten erneut bei dem Login-Verfahren, welches wir analysiert haben im vorherigen Kapitel.
Nun lasst uns annehmen, dass wir ein Login-Paket gesendet haben.
Wir warten nun auf die Antwort des Servers. Was wissen wir?
Wenn der Login falsch ist (falsches Passwort z.B.), sagt der Server dem Client das und der Client kann uns eine Fehlermeldung anzeigen.
Andernfalls gibt er uns ein ok und lässt uns rein.

Nehmen wir also an, dass wir unser Login-Paket geschickt haben und ein Paket vom Server empfangen haben.
Was sagt der Client? Er sagt "Falsches Passwort". Haben wir was falsch eingetippt?
Lasst uns das Paket prüfen, welches ungefähr so aussehen könnte:

04 00 12 00 02 00

<LÄNGE>.2B <KOPF>.2B <UNBEKANNT>.2B

Das ist das Paket, was uns der Server geschickt hat, welches dem Client sagt, dass das Passwort falsch ist.
Ich habe die Sachen, die wir bereits gelernt haben, farblich gekennzeichnet.
Aber wofür sind die letzten 2 Bytes? Die sagen dem Client, dass der Login erfolgreich war oder nicht.
Überprüft das einfach und loggt euch mit einem fiktiven Benutzernamen ein, welcher nicht exestiert in dem Spiel.
Dann könnte das Paket so aussehen:

04 00 12 00 01 00

Nun sagt der Client uns "Der Benutzername exestiert nicht, bitte registrier dich erst"

Nun wissen wir definitiv, dass die letzten 2 Bytes das sogenannte "Login-Flag" sind.
Du kannst es natürlich wieder umdrehen und mit dem Taschenrechner in Dezimal umwandeln, doch da du schon siehst, wie die Werte lauten, brauchst du das nicht tun.
Aber wenn du noch nicht so gut im Hexdezimalen System bist, benutz den Taschenrechner.

Das sind nun die "Flags", die wir nun kennen:

Original : 01 00 Umgekehrt : 00 01 Dezimal : 1
Original : 02 00 Umgekehrt : 00 02 Dezimal : 2

Das ist einfach eine Server Variable umgekehrt in ein WORD ( 2 Bytes).
Also könnte das Flag für den erfolgreichen Login zum Beispiel 00 00 sein und würde dem Client sagen "Hey, der Login war erfolgreich, mach weiter".
Aber solange wir nicht wissen, wie das Flag aussieht, wenn der Login erfolgreich war, müssen wir das weiter Testen.

Log dich mit deinem Benutzernamen und deinem Passwort ein.
Der Server wird dann mit etwas antworten, was etwa so aussieht:

08 00 12 00 00 00 C6 6F 5D A1

<LÄNGE>.2B <KOPF>.2B <LOGINFLAG>.2B <UNBEKANNT>.4B

Was wissen wir also?
Die ersten 2 Bytes geben die Länge an.
Die nächsten 2 sind der "Kopf" oder auch der "Befehl".
Als nächstes kommt das Loginflag (welches in Dezimal 0 zu sein scheint).
und ein DWORD (4 Bytes) wert.

Was könnte der neue Wert bedeuten? Wir wissen es noch nicht...
Also kehren wir ihn um und wandeln in in DEZIMAL um mit unserem Rechner.

Original : C6 6F 5D A1 Umgekehrt : A1 5D 6F C6 Dezimal : 2707255238

Was dieser Wert bedeutet, wissen wir jetzt noch nicht. Also analysieren wir unser Paket weiter...
Schreib die 4-Bytes auf und guck, ob sie im nächsten Paket auch vorkommen.
So wären wir in der Lage zu analysieren, was diese 4-Bytes für eine Funktion haben.

Geh ins Spiel rein oder mache es nochmal oder fahre fort mit deinem Sniffing.
Ok, wir haben nun das Auswahlfenster im Bildschirm, wo wir die Spielwelt/den Spielserver auswählen können.
Lasst uns die nächsten Pakete prüfen, die wir gesnifft haben.
Es sieht so aus, dass unser Client etwas an den Server schickt, nachdem Paket von oben (12 00).
Das könnte die Anfrage für die Serverliste sein.

Das Paket schaut so z.B. aus:

02 00 13 00

Nichts besonderes. Nur die Paketlänge und das Flag. Dadurch wird die Serverliste angefragt vom Client.
Wie du nun im Ascii-Fenster sehen kannst, werden die Servernamen als Text angezeigt.
Lasst uns sehen, was wir haben:

39 00 14 00 03 54 68 65 20 4A 75 6E 67 6C 65 00 00 D9 D0 2C 12 D0 07 54 68 65 20 42 65 61 63 68 00 00 00 D9 D0 2C 13 D0 07 54 68 65 20 4C 61 6E 64 00 00 00 00 D9 D0 2C 14 D0 07

Wow, dass ist unser erstes, langes Paket. WPE zeigt eine Größe von 59 Bytes an.
Und die ersten 2 Bytes sagen uns 57.
Wie du dich also erinnerst, ist die Totale Länge - 2 = die länge unserer Daten.

Also nochmal schauen, was wir nun wissen.
Wir sehen die Länge, den Header (Kopf), aber was ist das nächste?
Überprüf nochmal die ASCII-Ansich in WPE. Da sind 3 Namen in Plaintext...
The Jungle, The Beach und The Land (Anmerkung: Ich habe die Namen so gelassen)
Das sind unsere Servernamen.
Also haben wir 3 Server. Nun sieht es also so aus, als ob uns das 5te Byte des Pakets (03) uns die Anzahl der Server nennt.
Nach der Serveranzahl folgt direkt der Servername "The Jungle", aber was ist das? Da sind schon wieder diese vielen 00en.
Das bedeutet aber das selbe, wie beim Loginnamen zuvor.. Nähmlich das die Maximallänge eines Servernames 12 ist (Benutz die ASCII und HEX Ansicht parallel in WPE um es zu zählen)
Deshalb wird der ungenutze Platz mit 00 gefüllt.
Was wissen wir nun? Was für Informationen muss eine solche Serverliste speichern?
Es muss dem Client den Namen des Servers, die IP und den Port, wo der Client sich verbinden kann, nennen.

Die meisten IPs werden als 4 einfache Bytes gesendet. Manche Server senden sie auch als Plaintext.
Lasst uns annehmen, dass der Server es als DWORD (4 Bytes) sendet.
Wie würde das aussehen? Hier ein Beispiel:
Wir haben die IP Adresse 212.178.67.42.
Nun teilen wir sie in 4 unabhängige Werte auf:
212 178 67 52 (entfernt einfach die punkte).
Nun wird jeder einzelne Wert in Hex umgewandelt. Nehmt dafür den Rechner.

212 = D4
178 = B2
67 = 43
42 = 2A

Unser DWORD ist also D4 B2 43 2A.
(Dreht das nicht um, da dies 4 einzelne Werte sind und nicht EIN GROßER Wert ist!)

Was haben wir nun gemacht?

212.178.67.42
^
|-Entferne die Punkte
v
212 178 67 42
^
|-Wandel jeden einzelnen Wert in HEX um.
v
D4 B2 43 2A

Lasst uns nun unser Paket nochmal anschauen, was nach dem Servernamen kommt.
In solchen Fällen musst du einfach mit den Werten rumspielen.
Nimm jedes Byte und wandel es in DEZIMAL um. Entweder Byte für Byte (um zu sehen ob es eine IP Adresse ist) oder 2 Bytes aufeinmal (umgekehrt!) oder 4 Bytes aufeinmal (umgekehrt!)
Nachdem wir also ein wenig rumgespielt haben, haben wir rausgefunden, dass die nächsten 4 Bytes nach dem Servernamen die IP Adresse sind.
Lasst uns das prüfen.

D9 D0 2C 12
^
|-Wandel in Dezimal um
v
217 208 44 18
^
|-Füge die Punkte hinzu
v
217.208.44.18

Das scheint eine IP-Adresse zu sein. Wenn du dir nicht sicher bist, Ping die IP einfach an oder so.
Nun fehlt uns nur noch der Port.
Prüfe die nächsten Bytes unseres Paketes. Da sind immer noch 2 Bytes bis zum nächsten Servernamen.
Ein Port kann maximal die Zahl 65535 haben. Das ist das Maximum eines 16Bit Integers (auch SHORT oder WORD genannt).
Tippe 65535 (Dezimal) in deinen Rechner ein und konvertiere es in HEX.
Was haben wir hier? FF FF - 2 Bytes, oder?
Es sieht so aus, als hätten wir den Port gefunden.
Die 2 Bytes nach der IP Adresse scheinen der Port zu sein.
Lasst uns das umwandeln (Nicht vergessen, dass wir es umdrehen müssen, da es ein normaler WORD Wert ist!)

Original : D0 07 Umgekehrt : 07 D0 Dezimal : 2000

Also der Port des ersten Servers scheint 2000 zu sein.
Ich glaube, du kannst den rest des Pakets selber analysieren.
Nun sammeln wir alle Daten, die wir gefunden haben, und bilden eine Struktur.

39 00 14 00 03 54 68 65 20 4A 75 6E 67 6C 65 00 00 D9 D0 2C 12 D0 07 54 68 65 20 42 65 61 63 68 00 00 00 D9 D0 2C 13 D0 07 54 68 65 20 4C 61 6E 64 00 00 00 00 D9 D0 2C 14 D0 07

<LÄNGE>.2B <HEADER>.2B <SERVERANZAHL>.1B
{ //für jeden Server :
<SERVERNAME>.12B <IP>.4B <PORT>.2B
}


Die gesammelten Serverinformationen aus diesem Paket sind:
(Ich benutze "--" als Trenner. Es hat keine richtige funktion, also nicht wundern)

Servername -- IP -- Port

The Jungle -- 217.208.44.18 -- 2000
The Beach -- 217.208.44.19 -- 2000
The Land -- 217.208.44.20 -- 2000


Nun lasst uns zurück zum Spiel gehen, einen Server auswählen und die Pakete sniffen.
(Das ist das letzte Paket, welches ich hier erkläre)

Nachdem du den Server ausgewählt hast, verbindet sich der Client auf diesen
(siehe IP und Port, welche wir oben gefunden haben) und wir erhalten die Character Liste.
Aber lasst uns sehen, was tatsächlich passiert, nachdem sich der Client erfolgreich auf den Spielserver verbunden hat.

Der Client scheint pakete zu an den Spielserver zu senden.

06 00 15 00 C6 6F 5D A1

Oh was ist das? Das ist unser erster Wert, welchen wir oben vom Server erhalten haben, nachdem wir uns erfolgreich eingeloggt haben. Erinnerst du dich?
Und nun schickt der Server es auch zum Spielserver???
Hm ja, dass das ist eine art Authentifizierungsmethode, welche die meisten MMORPGs benutzen.
Schau... Du loggst dich als "John" mit dem Passowrt "12345" (irrelevant in dem Beispiel) ein.
Nun prüft der Server, ob diese Daten (Username und Passwort) stimmen.
Wenn diese Informationen STIMMEN, generiert der Server ein DWORD (4 Bytes; 32bit Integer) Wert, speichert diesen und schickt ihn zum Client.
Das ist eine sogenannte "SESSIONID"
(Viele Webseiten, die ein Login haben, verwenden ebenfalls diese Art der Authentifizierung, aber das kann auch variieren)
Nachdem der Client einen Spielserver ausgewählt hat, auf den er connected, schickt er ihm diese SESSIONID.
Da der Loginserver und der Spielserver "von einander getrennt" sind (oder einfach 2 verschiedene Programme/Computer),
brauch der Spielserver diesen Wert, um zu prüfen, ob sich schon jemand davor eingeloggt hat und diese SessionID bekam.
Während der Loginserver die SessionIDs speichert (z.B. in einer Datenbank), prüft der Spielserver nur, ob diese SessionID verfügbar ist.
Normalerweise wird die SessionID gelöscht, when der Client sich vom Spiel ausloggt.


4. Pakete analysieren
Die Verschlüsselung


Nun ich werde hier nicht viel schreiben, weil du nicht einfach in die Pakete schauen kannst, um rauszufinden, welche art der Verschlüsselung es ist.
Ok, du kannst schon, aber nicht in jedem Fall.
Ich schreibe einfach ein paar Tipps hier.

Nehmen wir haben, wir haben ein Loginpaket gesnifft, von einem MMORPG.
(Erinner dich an das Login Paket von oben)

Du solltest nicht in der Lage sein, den Benutzernamen und das Passwort in ASCII-Modus zu lesen.

Zu erst führen wir ein paar Tests aus. Solche wie mit den ersten 2 Bytes, welche die Länge anzeigen, und so weiter.
Mache dies nochmal und benutze dabei den selben Benutzernamen und das selbe Passowrt.
Wenn sich die Bytes ändern, weißt du, dass es sich nicht um eine statische Verschlüsselung handelt.
Bleiben die Bytes gleich, ist sie Statisch.
Als nächstes Sniffe Pakete mit anderen Benutzernamen und Passowrt, welche in der Länge sich untershceiden und schau, ob sich Werte ändern.

Du kannst nun ein paar einfache Analysen machen.
Nehmen wir an, wir haben ein solches Paket:
(wir benutzten den Benutzernamen "myusername" und das Passwort "mypassword"):

22 00 66 77 1A 0E 02 04 12 05 19 16 1A 12 77 77 77 77 77 77 1A 0E 07 16 04 04 00 18 05 13 77 77 77 77 77 77

Nun sehen wir die ersten 2 Bytes und prüfen die Länge.
Ok es klappt, es scheint die Paketlänge zu sein.
Nun prüfe das selbe mit einem anderen Benutzernamen und Passord...
Du wirst bemerken, dass die ersten 4 Bytes sich nicht ändern.
Das bedeutet, dass unser Benutzername und unser Passwort am 5. Byte anfängt.

Ich hoffe du weißt, wie man einen HexEditor für die nächsten Schritte benutzt.
(Was ich hier mache, kannst du auch mit Notepad machen).

Lasst uns das Paket vom 5. Byte an aufschreiben.
So sieht es für mich mit HexWorkshop aus:



Wir sehen hier einige Bytes die 77 sind...
Komischer oder?

Schreib deinen Benutzernamen und dein passwort exakt unter die Positionen der beiden Werte.
(die 77 scheinen die Platzhalter zu sein, da sie überall gleich sind, richtig?)
Mein Hex-Editor schaut so aus:


Erstaunlich. Unser Benutzername und Passwort passen exakt unter die Verschlüsselten Bytes.

Das könnte eine XOR-Verschlüsselung sein ( Exclusive or - Wikipedia, the free encyclopedia ).
Wie testen wir das?

Starte den Rechner (den von Windows ;D) und stell auf HEX um.
Nun schreibst du das erste Byte des Wertes, der der Benutzername sein könnte.
In unserem Fall ist es 1A. Also schreiben wir 1A in den Rechner.
Nun schauen wir in die Zeile unter den Verschlüsselten Daten und sehen, dass 6D in HEX für "m" steht in ASCII.
Nachdem du also 1A in den Rechner eingegeben hast, drückst du den XOR-Knopf...

Dann tippe den Hexwert für "m" (6D) ein und drück die Enter Taste.

Unser Ergebnis ist 77. Komisch oder?
Nun lasst uns das Prüfen.
Nimm das nächste Byte von den verschlüsselten Daten. In unserem Fall ist es 0E.
Tippe 0E in den Rechner, drück den XOR-Knopf und tippe 77. Dann drück die Enter taste.
Du solltest 79 erhalten, was der Hexwert für "y" ist.
Es scheint also, dass es eine statische XOR-Verschlüsselung ist, die den Key 77 benutzt.
Damit bist du in der Lage, alle Pakete zu entschlüsseln, die das Game verwendet.
Einfach de XOR-Methode mit dem Wert 77 anwenden.

Eine Einbindung in eine Programmiersprache könnte so aussehen:
Code:
// Wir fangen bei Byte 2 an, da die ersten 2 Bytes unsere
// unverschlüsselte paket-größe sind.
for(int i = 2; i < packetLength; i++)
{
packet[i] = packet[i] ^ 0x77;
}


Das ist das Ende von meinem Tutorial. Und ich hoffe, dass es nicht so kompliziert ist und ich nicht zuviel vermischt habe.
Ich hoffe, es hat dir gefallen.

PS: Bitte frag mich nicht, ob ich dir beim Knacken einer Verschlüsselung vom Spiel XY helfen kann.. Probier es einfach selbst.

Danke an x]vIrus[x für sein großartiges wScreenshot Programm, welches ich dafür benutzte, um die Screenshots zu machen.


Bitte entschuldigt meine Fehler in Grammatik oder dem Tutorial selbst.
psych0o is offline  
Thanks
11 Users
Old 09/17/2008, 16:52   #35
 
psych0o's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 1,032
Received Thanks: 86
//Edit:

wtf.. es wurde ausversehen 2 mal von mir gepostet.. @Mod: bitte diesen editierten beitrag löschen. Es tut mir leid, war keine Absicht.
psych0o is offline  
Old 09/17/2008, 17:24   #36
 
elite*gold: 0
Join Date: Oct 2007
Posts: 47
Received Thanks: 1
danke^^
AvengerXXX is offline  
Old 09/17/2008, 22:08   #37
 
12354's Avatar
 
elite*gold: 0
Join Date: Apr 2007
Posts: 943
Received Thanks: 132
wow!

Allein schon wegen der Übersetzungsarbeit bekommste n +thx
12354 is offline  
Old 09/18/2008, 17:04   #38
 
elite*gold: 0
Join Date: Oct 2007
Posts: 47
Received Thanks: 1
ja ist echt der hammer
AvengerXXX is offline  
Old 09/18/2008, 17:26   #39


 
Cholik's Avatar
 
elite*gold: 4
Join Date: Aug 2008
Posts: 6,783
Received Thanks: 4,992
Quote:
Originally Posted by psych0o View Post
//Edit:

wtf.. es wurde ausversehen 2 mal von mir gepostet.. @Mod: bitte diesen editierten beitrag löschen. Es tut mir leid, war keine Absicht.
Quite funny that you declare this tutorial as your work in your own signature.
Cholik is offline  
Old 09/18/2008, 19:38   #40
 
psych0o's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 1,032
Received Thanks: 86
only the translation is my work, your name standing there as creator with a link to your profile In my signature i have (Deutsch) behind, which means "german"
psych0o is offline  
Old 09/18/2008, 20:01   #41


 
Cholik's Avatar
 
elite*gold: 4
Join Date: Aug 2008
Posts: 6,783
Received Thanks: 4,992
I do understand some german words or better ... my translation tool does, so I do know whats standing there. Fact is : An idiot wouldn't get it.
But, who cares....
Cholik is offline  
Old 09/18/2008, 20:34   #42
 
psych0o's Avatar
 
elite*gold: 0
Join Date: Mar 2007
Posts: 1,032
Received Thanks: 86
but even an idiot would see, that this translation is inside of a thread and not the thread itself, so the idiot would take a look onto first page and see your original tutorial but i will change a bit the signature for you :-*

btw: 99% of the translation is the same as you wrote on english
I even included your credits to vIrus for wScreenshot
psych0o is offline  
Old 09/21/2008, 09:12   #43


 
Cholik's Avatar
 
elite*gold: 4
Join Date: Aug 2008
Posts: 6,783
Received Thanks: 4,992
added your translation to the first post
Cholik is offline  
Old 09/23/2008, 15:50   #44
 
elite*gold: 0
Join Date: May 2008
Posts: 143
Received Thanks: 73
At first, nice tutorial for the basics.
al_j do you have some links for more detailed tutorials? especially the decryption part and so on are very important nowadays.
greetz infy
infY2k7 is offline  
Old 09/23/2008, 18:36   #45


 
Cholik's Avatar
 
elite*gold: 4
Join Date: Aug 2008
Posts: 6,783
Received Thanks: 4,992
Mh i don't have that much stuff regarding decryption / encryption, but I'll try to search for something later.
The only thing i can tell you is... you should become familiar with the encryptions... like take a look how blowfish, aes ..... (and all the other stuff you're interested in) works and how the encrypted stuff looks like. Is a static or a variable key used ? how does the keylength vary, is there a key ?... such things
Cholik is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
Packets sniffing help
06/09/2010 - SRO Private Server - 0 Replies
Hey all =) hope u're ok i've been trying to sniff swsro packets, but i cant find the right program to do it, in ecsro, i used to use projecthax analyzer, but in swsro, everytime i try to inject a packet using it, the client crashes, i tried to use edx33 also, but i couldn't make it work also any idea ?
[Request]Tutorial On Packets
06/08/2009 - CO2 Private Server - 17 Replies
If anyone could give me a link could make ANY kind of tutorial on WTF packets even are i would be highly appreciative Thanks in advance
[ENG]Sniffing packets, how to learn
09/07/2008 - Kal Online - 24 Replies
Ok i am interested in learning how to sniff packets, what program do i need to use and how to start doing it, obviously it is hard to start with kal since it is cripted data, bla bla... Since i am dumb and don't know much about it is there a site or is there a tutorial here on epvp that i can use? From what i understand packet sniffing is easy if the packets are not cripted and if there is no or low security on the game you are trying to sniff. Since i don't even know what to ask could...



All times are GMT +1. The time now is 02:58.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.