Md5 Hash als URL-Parameter - entschlüsseln



  • Hi,

    ich schreibe momentan an einem kleinen RTMP-Clienten für einen Musik-Streaming Dienst. Das klappt soweit auch ganz gut.
    Allerdings verlangt der Server einige Request-Parameter: Timestamp, Path, Hash.

    Auszug von einem Request des originalen Client des Musik-Streaming Anbieter

    mp3:s/0/2/2/5/6/918465220?e=1363864926&h=496e787bd067d510e893ac20a64fedc3
    

    Den Timestamp und den Path (zu der Musik) kann ich erzeugen, jedoch weiß ich nicht wie sich der Hash (das letzte Parameter &h=496e.....) zusammensetzt. Ich bin mir auch bewusst das, dass genau der Sinn von einer Hash-Ein-Weg-Funktion ist.
    Bisher weiß ich, dass
    - es mit ziemlicher Sicherheit ein Md5-Hash ist.
    - er von Timestamp und Path abhängig ist, weil der Server den Request nicht akzeptiert, wenn Zeit oder Path geändert wurden sind.
    - er wird vom originalen Client berechnet und kommt nicht über das Netzwerk rein.

    Brute-Force Attacke halte ich für sinnlos, da schon Path + Timestamp 32 Zeichen haben.
    Die .Exe und die .SWF - das Programm arbeitet mit Adobe Air - des originalen Client habe ich dekompiliert, aber leider nichts brauchbares gefunden. Genauso verhielt es sich mit der Auslesung des RAM´s zur Laufzeit des Programms.

    Hat irgendjemand noch eine Idee, was machen versuchen könnte, um einen Schritt näher an den Ausgangsstring des Md5-Hash zu kommen ?

    Bin für jede noch so verrückte Idee offen 😃

    Danke an alle, die sich die Zeit genommen haben meinen Beitrag zu lesen. 🙂



  • nein, eine art "reverse md5" ist mir nicht bekannt.

    du könntest es ja wie du schon vorgeschlagen hast, mit brute force machen, also den gegebenen md5-hash aus einer liste mit vergleichshashs vergleichen und so (versuchen), den richtigen hash zu finden.

    halte ich aber für unwahrscheinlich, dass man das schafft.



  • Habe vergleichbare Systeme gefunden, die mit so einem Md5-URL Parameter arbeiten.
    Dort wird immer ein "secret key" oder "secret token" benutzt.
    Also zum Beisiel:

    XXXXXXXXXXX/s/0/2/2/5/6/918465220?e=1363872884
    

    Allerdings bei mehr als 8 Stellen wird es meiner Meinung nach praktisch unmöglich, falls es möglich ist würde es Jahre dauern 😉



  • wenn man sich den pseudocode zu md5 im wikipedia-artikel (http://de.wikipedia.org/wiki/Message-Digest_Algorithm_5) durchliest, dann weiß man, dass bei md5 die zu hashenden daten mit null-bits auf 64-byte erweitert werden. anschließend werden häppchenweise teil-hashes generiert, die jeweils zu den letzten generierten teilhashes addiert werden.
    das alles sorgt dafür, dass reverse erschwert, bzw. ganz verhindert wird.
    du kannst zwar den hash in die letzten 4 teilhashes aufsplitten, aber das bringt dir nichts.

    md5 ist nicht reversibel.



  • nachtrag:

    md6 schrieb:

    md5 ist nicht reversibel.

    und das ist auch gut so. denn eine hash- oder verschlüsselungs-funktion, die reversibel ist, ist eine schlechte hash- oder verschlüsselungs-funktion.

    soweit ich weiß, kann es bei md5 kollisionen geben (d.h. das verschiedene daten den gleichen md5-hash bekommen können).

    übrigens ist md5 nicht mehr ganz so sicher... ich empfehle da eher eine hash-funktion aus der sha-familie (sha256 und aufwärts).



  • md6 schrieb:

    wenn man sich den pseudocode zu md5 im wikipedia-artikel (http://de.wikipedia.org/wiki/Message-Digest_Algorithm_5) durchliest, dann weiß man, dass bei md5 die zu hashenden daten mit null-bits auf 64-byte erweitert werden. anschließend werden häppchenweise teil-hashes generiert, die jeweils zu den letzten generierten teilhashes addiert werden.
    das alles sorgt dafür, dass reverse erschwert, bzw. ganz verhindert wird.

    Jo. Aber es macht die Suche im Assemblercode nach der md5-Funktion viel einfacher. Falls sie nicht eh aus einer DLL kommt.
    Es wird darum gehen, den Hallo27s "secret key" mal vor die Augen zu bekommen.



  • [quote="md6 - nachtrag"]nachtrag:

    md6 schrieb:

    ich empfehle da eher eine hash-funktion aus der sha-familie (sha256 und aufwärts).

    😃 Ich will den Hash entschlüsseln, nicht ihn sichere machen 😉



  • volkard schrieb:

    Jo. Aber es macht die Suche im Assemblercode nach der md5-Funktion viel einfacher. Falls sie nicht eh aus einer DLL kommt.
    Es wird darum gehen, den Hallo27s "secret key" mal vor die Augen zu bekommen.

    Die Md5 Funktion kommt aus der SWF Datei, die Actionscript enthält und auf eine DLL von Adobe Air zurückgreift.
    Genau darum geht es, den secret key zu kennen.

    Habe gerade diesen Link gefunden
    http://mediamanager.internetvideoarchive.com/encryption.aspx

    Zitat:
    Important: although Md5 is available in Actionscript 2.0 we recommend not including your secret key inside a swf as swfs can be easily decompiled allowing other sites to utilize your videodetective account.



  • Hallo27 schrieb:

    😃 Ich will den Hash entschlüsseln, nicht ihn sichere machen 😉

    ja, wie gesagt, das wird nicht funktionieren.



  • Ich will nicht unbedingt den Hash zurückführen, dass ist bei einer Ein-Weg-Funktion unmöglich, mal von Brute Force abgesehen.

    Aber der Hashwert muss ja irgendwie berechnet werden, dazu wird der secret key gebraucht, der bekannter Maßen eine Konstante ist.
    Also muss der doch auch irgendwo konstant gespeichert sein, oder gibt es noch andere Möglichkeiten, wenn man das Netzwerk ausschließen kann ?



  • Hallo27 schrieb:

    Ich will nicht unbedingt den Hash zurückführen, dass ist bei einer Ein-Weg-Funktion unmöglich, mal von Brute Force abgesehen.

    Aber der Hashwert muss ja irgendwie berechnet werden, dazu wird der secret key gebraucht, der bekannter Maßen eine Konstante ist.
    Also muss der doch auch irgendwo konstant gespeichert sein, oder gibt es noch andere Möglichkeiten, wenn man das Netzwerk ausschließen kann ?

    ja, er muss, wenn er nicht übers internet kommt, natürlich irgendwo gespeichert werden.

    wahrscheinlich kannst du den key nicht über "einfaches" disassembling finden, weil er über trivial-verschlüsselungen wie xor usw. "verschlüsselt" ist.



  • Hmmm....
    Das wäre auf jedenfall eine Möglichkeit, um eine Schlüssel zu verbergen...



  • Danke für eure Antworten, aber eine Frage habe ich noch.
    Könnte so ein secret Key in einem X509-codierten Zertifikat sein?



  • Hallo27 schrieb:

    Danke für eure Antworten, aber eine Frage habe ich noch.
    Könnte so ein secret Key in einem X509-codierten Zertifikat sein?

    ja. in so einem zertifkat kann ein schlüssel für so ziemlich alles sein. das zertifikat-format ist universell einsetzbar.

    warum ist dieser key eigentlich so wichtig?



  • Weil der Server meine Requests mit einer Error Message beantwortet, wenn ich diesen Hash, der mit dem key errechnet wird, falsch beantworte.

    Und weil ich mit meinem eigenen Client gerne den Streaming Dienst nutzen möchte - für den ich ja auch immerhin bezahle (!) -, brauch ich diesen Key....

    Hab das Zertifikat gerade gelöscht 😉 - Der Cient läuft immer noch, das wird den Key wohl nicht enthalten



  • also ich würde mich ja eher an den support / serverbetreiben wenden, als hier irgendwelche aktionen zu starten.



  • Tut mir Leid, wenn ich hier Leute gegen ihren Willen ihrer Zeit beraubt haben.
    Allerdings glaube ich nicht, dass man mir den Key aushändigen wird 😞

    Aber ein Versuch kostet ja nichts, ich werde mal anfragen. Dankeschön 🙂



  • md6 - nachtrag schrieb:

    soweit ich weiß, kann es bei md5 kollisionen geben (d.h. das verschiedene daten den gleichen md5-hash bekommen können).

    MD5 hat definitiv Kollisionen. Ich kann einen Hash für einen beliebig langen Daten bilder aber der Hash selbst ist nur 16 Bytes lang. Es gibt also nur eine Anzahl von MD5-Hashes, aber unbegrenzt viele Daten, für die ich einen MD5-Hash bilden kann. Schon bei 17 Bytes Daten werde ich mindestens 256 Kollisionen haben.

    Aus dieser Tatsache ergibt sich auch, dass der MD5-hash nicht reversibel sein kann. Für einen Hash Wert gibt es ja schließlich wahrscheinlich mehrere (unbegrenzt viele) Datenströme, die diesen MD5 Hash ergeben.



  • Um das ursprüngliche Problem zu lösen, würde ich versuchen, von verschiedenen Kombinationen der Daten solange Hash-Werte zu bilden, bis der richtige rauskommt.

    Falls du lieber weiter im Speicher des Prozesses rumstochern möchtest, könntest du L. Spiros MHS verwenden (http://memoryhacking.com/) – es unterstützt verschiedene fähigere Suchfunktionen, bis hin zu eigenen Suchskripts. 🙂
    Ob man damit auch in anderen Suchmodi XOR umkehren kann, weiß ich nicht; vielleicht schon
    (mit einem Skript geht es natürlich auf jeden Fall, denke ich, aber man muss ja ned gleich die Nuklearwaffen rausholen, nur weil jemand einen Holzsichtschutz aufgestellt hat 😉 )



  • Sonnenfilter schrieb:

    Um das ursprüngliche Problem zu lösen, würde ich versuchen, von verschiedenen Kombinationen der Daten solange Hash-Werte zu bilden, bis der richtige rauskommt.

    das ist ja eben dieses brute-force prinzip, das vorher schon angesprochen wurde.

    das problem ist, dass es unendlich viele kominationen gibt, man kann also unendlich lange "rumprobieren". die wahrscheinlichkeit, dass man den richtigen key findet, geht gegen 0.


Anmelden zum Antworten