Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 22:12

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

Advertisement



Encrypted Packets - Decryption possibilities?

Discussion on Encrypted Packets - Decryption possibilities? within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
C_O_R_E's Avatar
 
elite*gold: 0
Join Date: Jul 2014
Posts: 264
Received Thanks: 54
Encrypted Packets - Decryption possibilities?

Hey there,

Presently, visiting network class in university and in a catch, I was interested in modifying custom/received/sent packets over a socket between server - client.
For some practice, I pulled out the game "PokeMMO" and analyzed received & sent packets.

I typed the letter 'A' in chat to see, if I recognize hex value 0x41 in ip datagramm.
It didn't work out so easily, so I thought, maybe they sending a session key in plaintext (that would be stupid) by logging into the game. So, the session key is used to encrypt ip packets, everytime a new connection established, ranomized a session key for the client connection. Also looked out for packets, which may be interesting. Nevertheless I failed pretty hard with my ideas and went back to sniff packets in chat.
Typed a multiple times letter 'A' in chat, whom leads me to different ip packets with variety payloads/data.
Does the server randomize for every ip packet an unique key? - Yes
Capable to reason the encryption routine? - Nope

What ideas do you come up with?
What kind of encryption algorithm is used nowadays for small, mmo project? or lets say, the common way to encrypt packets?
Its written in Java.
C_O_R_E is offline  
Old 05/18/2016, 01:00   #2
 
NotThatBad's Avatar
 
elite*gold: 0
Join Date: Mar 2013
Posts: 802
Received Thanks: 347
wenn du den ip verkehr mitschneidest wirds vermutlich mit ipsec gesichert sein, dann musst du wiederum unterscheiden mit welchen headern die ip pakete gesichert sind und und und...
vllt hilfts ja wenn du dich in die rfc's 4302 und 4303 einliest, denk du wirst aber eher schlechte karten haben die zu manipulieren.

schreib dir lieber mit c ne einfache socketanwendung die unverschlüsselt sendet und schneide da den verkehr mit

NotThatBad is offline  
Old 05/18/2016, 14:41   #3
 
C_O_R_E's Avatar
 
elite*gold: 0
Join Date: Jul 2014
Posts: 264
Received Thanks: 54
Quote:
Originally Posted by NotThatBad View Post
wenn du den ip verkehr mitschneidest wirds vermutlich mit ipsec gesichert sein, dann musst du wiederum unterscheiden mit welchen headern die ip pakete gesichert sind und und und...
vllt hilfts ja wenn du dich in die rfc's 4302 und 4303 einliest, denk du wirst aber eher schlechte karten haben die zu manipulieren.

schreib dir lieber mit c ne einfache socketanwendung die unverschlüsselt sendet und schneide da den verkehr mit

Der Wiki-Eintrag wurde/wird mir auch als erste Anlaufstelle angezeigt, doch ich dachte, es sei hier nicht zutreffend... Hier mal das Zitat aus dem Eintrag...
Quote:
oder zum Schutz vor Replay-Angriffen eingesetzt werden.

Das erklärt definitiv auch meine obrigen Ergebnisse. Auf meinem Arch Linux habe ich mittels tcpdump und tcpreplay die IP Datagramme .pcap geloopt und versucht an den Server zu schicken...


Ich mag es zwar an Dingen zu verzweifeln, aber wenn man keine Anhaltspunkte hat.... nix gut.






Ich werd mich da mal einlesen, verzweifeln und erneut einlesen, da wird schon Schritt für Schritt Fortschritt gemacht
C_O_R_E is offline  
Old 05/18/2016, 15:20   #4
 
NotThatBad's Avatar
 
elite*gold: 0
Join Date: Mar 2013
Posts: 802
Received Thanks: 347
genau, auf den schutz gegen replay angriffe wollt ich raus.
die payload wird eben mit ner zufälligen nonce gehasht, und du kannst das nur decrypten wenn du die init-nonce + paketnummer rausfindest


jedenfalls viel glück
NotThatBad is offline  
Thanks
1 User
Old 05/20/2016, 00:10   #5
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by NotThatBad View Post
genau, auf den schutz gegen replay angriffe wollt ich raus.
die payload wird eben mit ner zufälligen nonce gehasht, und du kannst das nur decrypten wenn du die init-nonce + paketnummer rausfindest


jedenfalls viel glück
Wait, wait, wait!
Ein Man-In-The-Middle Angriff, der von Anfang an den Packet-Verkehr mitschneidet und auch die Möglichkeit hat einzugreifen, ist immer möglich! Es gibt momentan keinen Algorithmus, der das unterbinden kann.

Dabei ist das Prinzip immer dasselbe:
Der MITM gibt sich als Server aus und gleichzeitig als Client. Damit muss er zwar eventuell ein bisschen was simulieren, aber das hält sich in Grenzen.

Die Verschlüsselung solcher Pakete basiert normalerweise auf simplen symmetrischen Verfahren. Besonders gerne werden XOR-Abkömmlinge ala XXTea-Crypt benutzt, weil schnell und einfach zu implementieren bei durchschnittlicher Sicherheit.

Schau dir am besten einfach mal den Java-Source an, der lässt sich ja schnell dekompilieren.
Shadow992 is offline  
Old 05/20/2016, 01:13   #6
 
C_O_R_E's Avatar
 
elite*gold: 0
Join Date: Jul 2014
Posts: 264
Received Thanks: 54
Das Dekompilieren kam mir auch in den Sinn, aber bisher NULL Erfahrung in dem Bereich. Wenn du aber mit der Idee hochkommst, dann wird es Zeit, sich das durchzulesen und dran zu arbeiten.

Durch das Dekomil. wird es sich zu erkennen geben, was fuer ein Algorithmus es ist. Bei symmentrischen Algorithmus habe ich schon meine Probleme bei der Programmierumsetzung bzw. das Cracken einer solchen Routine - Ein Kommilitone hat nämlich in dieser Woche eine Decryption Challenge gemacht (untersch. Encrypt. Algo.) Ab DES komme ich nicht mehr weiter...

Ich fang mal heute Nachmittag an, muss erstmal Decompiler auf Arch/Linux finden, dann kann die Arbeit mal langsam beginnen.... Danke
C_O_R_E is offline  
Old 05/20/2016, 08:55   #7
 
NotThatBad's Avatar
 
elite*gold: 0
Join Date: Mar 2013
Posts: 802
Received Thanks: 347
Quote:
Originally Posted by Shadow992 View Post
Wait, wait, wait!
Ein Man-In-The-Middle Angriff, der von Anfang an den Packet-Verkehr mitschneidet und auch die Möglichkeit hat einzugreifen, ist immer möglich! Es gibt momentan keinen Algorithmus, der das unterbinden kann.

Dabei ist das Prinzip immer dasselbe:
Der MITM gibt sich als Server aus und gleichzeitig als Client. Damit muss er zwar eventuell ein bisschen was simulieren, aber das hält sich in Grenzen.

Die Verschlüsselung solcher Pakete basiert normalerweise auf simplen symmetrischen Verfahren. Besonders gerne werden XOR-Abkömmlinge ala XXTea-Crypt benutzt, weil schnell und einfach zu implementieren bei durchschnittlicher Sicherheit.

Schau dir am besten einfach mal den Java-Source an, der lässt sich ja schnell dekompilieren.
die möglichkeit einzugreifen bedeutet demnach zu entschlüsseln, daten zu verändern, und neu zu hashen und damit auch die prüfsumme anzupassen
nur wie genau soll das denn gehen?
wenn client und server in ner sicheren PKI per diffie-hellman die schlüssel ausgetauscht haben und dann mit diesem schlüssel per MD5 die HMAC bilden, wie willst du denn da eingreifen? du brauchst 1. die nonce, dann brauchst du den schlüssel und dazu kommt noch, dass MD5 eine einweg-funktion ist, dafür musst du dann pro nonce eine rainbow-table generieren

was ich nicht ganz versteh ist, wieso sich der MITM als client und server gleichzeitig ausgibt beim replay angriff gehts doch genau darum, authorisierte ip pakete abzufangen und und zu einem späteren zeitpunkt wieder zum server zu schicken, bspw. um sich als alice auszugeben
NotThatBad is offline  
Thanks
1 User
Old 05/20/2016, 12:06   #8
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by NotThatBad View Post
die möglichkeit einzugreifen bedeutet demnach zu entschlüsseln, daten zu verändern, und neu zu hashen und damit auch die prüfsumme anzupassen
nur wie genau soll das denn gehen?
wenn client und server in ner sicheren PKI per diffie-hellman die schlüssel ausgetauscht haben und dann mit diesem schlüssel per MD5 die HMAC bilden, wie willst du denn da eingreifen? du brauchst 1. die nonce, dann brauchst du den schlüssel und dazu kommt noch, dass MD5 eine einweg-funktion ist, dafür musst du dann pro nonce eine rainbow-table generieren

was ich nicht ganz versteh ist, wieso sich der MITM als client und server gleichzeitig ausgibt beim replay angriff gehts doch genau darum, authorisierte ip pakete abzufangen und und zu einem späteren zeitpunkt wieder zum server zu schicken, bspw. um sich als alice auszugeben
Fakt ist, dass der Client und der Server irgendwann einmal die Schlüssel für das Public-Key-Verfahren austauschen müssen. Dafür gibt es zwei Möglichkeiten:
1. Beim Einloggen/Starten/whatever
2. Hardcodiert im Source-Code

Wenn man den Fall #1 hat, reicht es vollkommen so zu tun als wäre der MITM der Server und Client gleichzeitig, das heißt ganz konkret sieht das so aus:
Echter Client schickt seinen Teil des Public-Keys bzw. fordert den Server auf einen Key zu berechnen, basierend auf Parameter/etc. --> Packet wird losgeschickt --> MITM empfängt Packet und erzeugt einen Key wie es der Server tun würde --> MITM schickt ein neues, anderes Packet aber mit demselben Befehl an den echten Server (damit der MITM den Key vom Client nicht wissen/erraten muss und man so Sachen wie Zufall o.ä. vom Server nicht kennen muss, sondern nur den Prinzipiellen Algo) --> Server berechnet neuen Key und schickt es an den MITM zurück

Damit hat der MITM die Möglichkeit beliebig Pakete zu verschlüsseln und entschlüsseln, wie er lustig ist.

Bei 2. wird es erstmal ein klein wenig schwieriger, zumindest wenn man aus den Packets alleine wissen möchte was der Client sendet. Da der Client den Key aber fest im Code hat, braucht man das nicht zwingend, mit dem Key kann man ja automatisch alle Antworten vom Server entschlüsseln und so tun als wäre man der Client. Wenn man dann den wirklichen Inhalt der Pakete sehen will, muss man eben ein paar Funktionen hooken. Bzw. Bei Java den source decompilen und an der entsprechenden Stelle mitschneiden.

Viel einfacher wird das aber durch einen riesen Nachteil den Public-Key leider haben. Sie sind vergleichsweise langsam, was eine Kommunikation in Echtzeit fast unmöglichmacht. Daher geht man meistens den Weg, dass man nicht mit Public-Key-Verfahren direktverschlüsselt, sondern einen verschlüsselten Key für ein anderes Verfahren austauscht, welches aber schneller ist, z.b. AES. Das Spiel wird es höchstwahrscheinlich genau so machen. Das heißt:
Häng dich an die Stelle im Java-Source, der den Key sendet, lese ihn aus und dann hast du alles was du brauchst.

Aber viel wahrscheinlicher als die Theorie mit der PKI, ist dass das Spiel einfach eine simple Routine implementiert hat, welche keinen Schlüssel benötigt oder aber den Schlüssel hardcoded im Source enthält bzw. errechnet aus irgendeinem Session-Key.

Mir persönlich ist kein Free-To-Play game bekannt, welches den umständlichen Weg über PKI geht, denn eins muss einem klar sein: Das Hooken der entsprechenden Routine für Verschlüsseln im Binary ist immer möglich, genau so wie das Hooken der Entschlüsselungsroutine. Da das sowieso 90% der Programmierer machen und sich nur sehr wenige mit einem MITM-Angriff beschäftigen, lohnt es sich nicht da Ressource reinzu investieren.

Vorallem weil dieses Szenario auch seine Schwächen hat (siehe oben).

Edit:
Nur um noch einmal das Prinzip klar zu machen:
Solange man die Algorithmen herausfindet, die der Client benutzt (was immer möglich ist), kann man den Gegenpart dazu implementieren und selbst wenn Details falsch implementiert hat, solange man den MITM als Server und Client gleichzeitig betreibt ist es scheiß egal wie falsch die Parts sind. Da jeder Part ansich die "Fehler" des einen Parts nicht an den nächsten Part weitergibt, sondern so tut als wär alles richtig.

Das heißt solange man beide Seiten simuliert, kann man den kompletten Paket-Verkehr mitschneiden und verändern, ganz unabhängig von irgendwelchen Checks o.ä. die der Server zusätzlich macht. Zum allergrößten Notfall schneidet man einmalig den "Initialisierungs"-Packet Verkehr vom Clienten mit und benutzt in dem MITM-Client immer genau diese Initialisierungs-Packets.
Shadow992 is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
pack dateien im client encrypted/encrypted head
10/21/2012 - Metin2 Private Server - 2 Replies
hi, ich hab ein problem, seit 2 wochen sind meine pc.eix und epk dateien in dem format encrypted und encrypted head die heißen nichtmehr .epk, .eix. diese kann ich nicht entpacken.. ich hab mir gestern modified client 4.5 von neonblue gezogen und da sind die dinger auch encrypted, encrypted head... das kann nicht, ich hab das früher immer mit epk und eix gemacht hab ich da irgendwas bei meinem computer umgestellt, oder was is anders? kann jemand helfen? danke sehr <3
[Release] +5500 Packets structure , client/packets constants
10/07/2012 - CO2 PServer Guides & Releases - 10 Replies
edit : if u know nothing about packets go to this post first explaining what is packets , and explaining a packet with details and everything http://www.elitepvpers.com/forum/co2-pserver-disc ussions-questions/2162344-packets-packets-packets. html#post19074533 i start making my very own packet structure to use them on my new proxy but i thought of ripping them from the source so yeah the following packets is ripped of trinity base source right now im just providing the packets structure...
(Help) Packets Encrypted
08/28/2009 - Cabal Online - 5 Replies
Hi anyone know how to decrypt the packets of cabal (packets obtained for sniff, example Ehetereal, WPE) I tried with XOR crypt but doing a same action in the game the packet change I think that its a diferent XOR code per packet but I can find it For example in the chat game I said "hello" 5 times and I got 5 diferent but with the same size Those are the packets: http://img7.imageshack.us/img7/5198/dibujolsk.jpg
all game net Packets are encrypted
06/27/2008 - Perfect World - 3 Replies
do you know how? or mb how to debug and turn encryption off?
Need help for encrypted packets ! PLSE
09/30/2005 - General Coding - 3 Replies
Hi alle! Ich versuch die encryption fuer m@trix online zu cracken! Es geht um die encryptions der pakete zum einloggen im server(password und login)(fuer einen MXOsimulator) Mit dem KANAL plugin von PEiD fand ich eine ganze Liste von crypts : CRC32_-_CryptGenRandom_-_DES_-_List of primes_-_MD5 _SHA1_-_SHA-512/384_-_TWOFISH. Ich hab schon Loginpakete eingefangen und brauch jetzt nur noch wissen wie ich sie decryptiere! Ich danke fuer jede Hilfe :cool:



All times are GMT +1. The time now is 22:13.


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.