Hash / checksum knacken?

Hallo,

ich möchte mir für ein Online-Netzwerkspiel einen eigenen Server basteln. Ich bin dabei, die Kommunikation zwischen Server und Spiel zu analysieren, (die Kommunikation ist relativ einfach da sehr sehr viel direkt von Spieler zu Spieler läuft und mir diese Daten ja egal sind), habe aber leider beim Einloggen eine Art Hash oder ähnliches entdeckt, dessen Algorithmus ich bräuchte, um den Server nachzubilden.

Wie kompliziert ist eine solche Analyse? Gibt es da eventuell sogar Computerprogramme für, die versuchen, einen Algorithmus herauszufinden?

Oder können die begabteren "Hacker" hier sowas direkt "aus den Zeilen lesen"?

Ein paar Beispiele für Daten und Hash:

Code:
DATA1: DRKUUPVSYN
DATA2: zvuwQ69NrDkd7EXvhIToOSWLJOpr4Tvh
DATA3: NDSLKUO/V1sfj1Fd3Ui6SfAFnNIDBYTW/LUN6wTLmdbPQTLh9Af9JVAjvA9ceu9MgjWkOYKLLjvSb0JWGT6B3BfWdRK/PfEzkZwsgw83suJ2zaEkkn9o1iPiucJh8EcB1At
DATA4: fba1d07e8d8cebe9796a17dbef6585ed
CHECKSUM: 5edef83b86ed036926b9f5a5118254c7

DATA1: MGGRNSFFSL
DATA2: XEOn7v7WtlkVyA0SyzshPJcXBLCzwVVq
DATA3: NDS6/49VV11KCBTjA3kK5/qXUSbYoJtE8TS4IZIRDKPDsPotXc1uqUBV3m9orCMWb0GaM/Bqhql5XuvEUpQTKfb7imRaGzlSp39gvAB0klXdGFAdnSDuwLitcEGQBdPbgAA
DATA4: f1fc477ac10a93e85e314d7e44e36c05
CHECKSUM: af1d58c5efb62a21bce8743e9924c092

Die Data-Teile 1 bis 4 sind mir bekannt, die Checksum möchte ich selbst berechnen.

Kann damit jemand was anfangen? Hat jemand eine Idee, wie der Hash berechnet werden könnte? Oder braucht man dazu viel mehr Daten? Diese könnte ich liefern, allerdings dauert das "raussuchen" dieser Daten aus dem Dump momentan noch etwas, da ich die Werte von Hand suchen muss.

Vielen Dank,

leseratte10
 
Sieht aus wie ein MD5-Hash. Aber aus was er berechnet wird, musst du wohl selbst herausfinden. ;)
 
Hm. Ist weder irgendein DATA-Paket einzeln noch alle Data-Pakete zusammen.

Wäre zu schön gewesen. Schreib ich mir halt einen kleinen Bruteforcer der die 4 Datenpakete in unterschiedlichen kombinationen mit unterschiedlichen Trennzeichen prüft.
 
OK, ich habe mich leicht geirrt. Die Prüfsumme (MD5) wird nicht nur aus den DATA-Werten berechnet, sondern zusätzlich noch mit einem benutzerabhängigen, mir unbekannten Wert.

Schade. :(
Trotzdem vielen Dank für die Hilfe. Vielleicht finde ich das ja irgendwann doch noch heraus...
 
Im Internet findet man ja haufenweise Berichte mit "MD5 ist geknackt" - bezieht sich das nur darauf dass ich zu einem Hash einen beliebigen Klartext erstellen kann? Und gilt das auch noch für gesalzene Hashs?

Die Prüfsumme wird in meinen Fall (wie schon gesagt) aus einem der Data-Werte, einem Trennsymbol und einer bis zu 32 Zeichen langen Zeichenkette, die Großbuchstaben, Kleinbuchstaben, Zahlen und Bindestrich / Unterstrich enthalten kann.

Heißt das jetzt, ich muss 62^32 Hashes errechnen um an den hinzugefügten Wert zu kommen? Oder geht das auch irgendwie einfacher / schneller?
 
MD5 sollte nicht mehr verwendet werden, da es diverse schwächen hat, und es unter anderem möglich ist 2 eingaben zu forgen, die die gleiche prüfsumme ergeben... man mus an dieser stelle eine starke und eine schwache kollisions-suche unterscheiden:

starke kollisions-suche -> finde eingabe die einen vorgegebenen hash erzeugt
schwache kolllisions-suche -> finde 2 eingaben die den gleichen hash erzeugen

letzteres ist für MD5 bereits gezeigt worden, daher gilt es als "gebrochen"

was du suchst geht sogar noch über die starke kollisons-suche hinaus, da du nicht alle eingaben zulässt, sondern zudem eine spezifische maske über die eingabe legst ...
 
Es gibt mehrere Online Hash Cracker wie z.B. https://crackstation.net/

Einfach alle Prüfsummen testen lassen vielleicht hast du Glück und ein paar sind in der Datenbank gespeichert :wink:

Welche Art von Prüfsumme (SHA1, MD5, ...) ist eigentlich egal, wenns nicht klappt bekommst du sowieso eine Fehlermeldung. Du musst einfach nur ein paar durchprobieren.
 
Wer generiert die Prüfsumme? Der Server oder der Client?

Im ersten Fall musst du im Client nach der Programmlogik (durch reverse engineering) suchen, die die Prüfsumme verifiziert. Das geht ja nur dadurch, dass der Client die Prüfsumme reproduziert und vergleicht. Damit hättest du die benutzte Verkettung der Daten.

Sendet der Client die Prüfsumme an den Server, gehst du im Prinzip genauso vor. Du suchst die Programmlogik im Client, die die Prüfsumme erzeugt.
 
Die Verkettung der Daten (zur Überprüfung im Client, Prüfsumme kommt vom Server) konnte ich nun schon dem SDK entnehmen. Aber wo genau nun der Teil gespeichert ist, der da verkettet wird, weiß ich nicht.

Es handelt sich auch nicht um ein normales PC-Spiel sondern um ein Spiel für eine Konsole; also werden die Standard-Disassembler wohl nicht vernünftig funktionieren, oder?

Gibt es denn eine "gute" Möglichkeit, um im Assemblercode die Stellen zu finden, an denen ein MD5-Hash gebildet wird?

EDIT: Wenn der Client die Prüfsumme generieren würde, hätte ich sie ja schon und müsste sie nicht berechnen.
 
Zurück
Oben