Startseite Angewandte Informatik Allgemein Tutorials Impressum Sitemap
27
Oct

MD5 entschlüsseln mittels c0llision-API

Der Message-Digest-Algorithm 5, oder kurz MD5 ist ein verbreitetes Verfahren, um einen String zu verschlüsseln. Dabei wird mit Hilfe einer bestimmten Funktion – der Hashfunktion – die eingegebene Zeichenkette mittels eines Algorithmus in einen 128-Bit-Hashwert überführt. Dieser Wert wird üblicherweise durch einen 32-stelligen, hexadezimalen String dargestellt.

In vielen Unix-Systemen sind die MD5-Bibliotheken bereits integriert und können über die Konsole genutzt werden.
Auf einem Mac sieht der Aufruf beispielsweise so aus:

md5 -s "ein string, den ich verschlüsseln will"

Mit dem Ergebnis:

MD5 ("ein string, den ich verschlüsseln will") = fbf50beb87218a44ed02a7cf4dca9868


Wie man erkennt entspricht der String “ein string, den ich verschlüsseln will” dem MD5-Hash fbf50beb87218a44ed02a7cf4dca9868.

Ein Merkmal der MD5-Funktion besteht darin, dass ein Hash-Wert nicht ohne Weiteres wieder entschlüsselt werden kann.
Deswegen wird MD5 oft genutzt um Passwörter verschlüsselt in Datenbanken zu speichern.

Was macht man nun, wenn man aber mal doch diesen Hash entschlüsselt haben möchte? Da das zurückrechnen nicht möglich ist, verwendet man eine besondere Datenstruktur, die sogenannten Rainbow Tables. Im Internet finden sich zahlreiche Seiten, die eine Entschlüsselung von Hashes mittels Rainbow Tables anbieten. Darunter findet man auch die Seite c0llision.net, die u.a mittels einer API ermöglicht auf ihre Dienste zuzugreifen. Wie man diese nutzt, will ich in den folgenden Textabschnitten erklären. Dabei stütze ich mich auf diese Dokumentation: http://www.c0llision.net/rest_api_documentation.

Der Zugriff auf die API erfolgt über die URL http://api.dev.c0llision.net/. Die API unterstützt drei verschiedene Formate, die einem als Ergebnis einer Anfrage geliefert werden. Zur Auswahl stehen dabei JSON, XML und YAML. Ich habe mich hier für JSON entschieden, da später der Zugriff über PHP bequemer ist. Als Algorithmen werden LM, NTLM und wie eingangs erwähnt MD5 unterstützt. Diese Angaben müssen der URL angehängt werden. Dabei erhält man folgendes Muster, um eine Anfrage an die c0llision API absetzen zu können:

http://api.dev.c0llision.net//crack//

Wollen wir nun den MD5-Hash fbf50beb87218a44ed02a7cf4dca9868 entschlüsselt haben und das Ergebnis als JSON zurückgeliefert bekommen, würden wir folgende Anfrage abschicken:

http://api.dev.c0llision.net/json/crack/md5/fbf50beb87218a44ed02a7cf4dca9868

Um diese Anfrage bequem per Skript verarbeiten zu können, habe ich folgendes kleines PHP-Programm geschrieben:

<!--?php
  function crack($algorithm, $hash){
    //Convert algorithm to lowercase
    $algorithm = strtolower($algorithm);
    $pattern = '';
    $url = 'http://api.dev.c0llision.net/json/crack/';
 
    //Check algorithm
    switch($algorithm){
      case 'md5':
        $pattern = '/^([0-9a-f]{32})$/';
        $url .= 'md5/';
      break;
 
      case 'lm':
        $pattern = '/^([0-9a-f]{32}:[0-9a-f]{32})$/';
        $url .= 'lm/';
      break;
 
      case 'ntlm':
        $pattern = '/^([0-9a-f]{32})$/';
        $url .= 'ntlm/';
      break;
 
      default:
        return FALSE;
      break;
    }
 
    //Check hash
    $check = preg_match($pattern, $hash);
    if(0 === $check || FALSE === $check){
      return FALSE;
    }
 
    //Build final URL
    $url .= $hash;
 
    //Initialize CURL and set options
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_HEADER, 0);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl_handle, CURLOPT_TIMEOUT, 4);
 
    //Execute CURL request
    $result = curl_exec($curl_handle);
    curl_close($curl_handle);
 
    return $result;
  }
 
  function crackMD5($hash){
    return crack('md5', $hash);
  }
 
  function crackLM($hash){
    return crack('lm', $hash);
  }
 
  function crackNTLM($hash){
    return crack('ntlm', $hash);
  }
?-->

Das Programm definiert eine Prozedur “crack”, welche die ganze Funktionalität liefert. In ihr wird zunächst ein Teil der URL gespeichert, auf die im weiteren Programmablauf mittels cURL zugegriffen wird. Nachdem die Variable “url” gesetzt wurde, wird überprüft ob ein korrekter Algorithmus gewählt wurde und das Muster des Hashs zum Algorithmus passt. Beispielsweise darf ein MD5-Hash lediglich aus 32 hexadezimalen Zahlen bestehen. Ist ein gültiger Hash übergeben, wird er an die URL gehängt. Diese ist nun vollständig zusammengebaut. Mittels cURL wird nun eine GET-Anfrage abgesetzt, die Antwort in die result-Variable gespeichert und zurückgegeben. Die weiteren Funktionen “crackMD5″, “crackLM” und “crackNTLM” nutzen lediglich “crack”, indem sie ihr die entsprechenden Parameter übergeben.
Die crackMD5-Funktion wollen wir nun nutzen, um den Hash 098f6bcd4621d373cade4e832627b4f6 zu entschlüsseln.
Ein PHP-Skript könnte zum Beispiel so aussehen:

<!--?php
  $hash = '098f6bcd4621d373cade4e832627b4f6';
  $result = crackMD5($hash);
  $json;
  if(FALSE !== $result){
    $json = json_decode($result, true);
 
    // HTTP 200 received
    if(200 !== $json['response']['status']['code']){
        echo 'Server response: ' . $json['response']['status']['code'];
    }
    // Hash already cracked
    elseif(TRUE !== $json['response']['result']['cracked']){
        echo 'Sorry, your hash has not been cracked yet';
    }
    else {
        echo $json['response']['result']['plaintext']['raw'];
    }
}
?-->

Es setzt eine Anfrage durch die Funktion “crackMD5″ an die c0llision API ab und speichert die Antwort in die Variable “result”. Hat “crackMD5″ eine gültige Antwort zurückgegeben, so dekodieren wir den JSON-String mittels der PHP-Funktion “json_decode“. Dann wird geprüft, ob der Server mit einem HTTP-200-Status geantwortet hat und der zu entschlüsselnde Hash bereits gecrackt wurde. Ist dies der Fall, wird der entsprechende Klartext des Hashs ausgegeben.

This entry was posted in Angewandte Informatik, Programmiersprachen and tagged , , , , . Bookmark the permalink.

Kommentare

7 Kommentare auf "MD5 entschlüsseln mittels c0llision-API"
Chanell Braswell@Mikrowelle schreib am 15. January 2011 um 23:22

Super Beitrag, fehlen lediglich Fotos! ;-)

Daine Strickling@fernseher test schreib am 29. January 2011 um 01:41

Ich glaube, wir haben uns schon einmalvor etlichen Monaten im richtigen Leben ausgetauscht. Du kommst aus Köln richtig?

кран балка schreib am 29. January 2011 um 03:31

I agree, this is a best article.A successful blog needs unique, useful content that interests the readers

Natural Weight Loss schreib am 9. February 2011 um 00:43

Thank you very much for that superb article

anna205@hotmail.com schreib am 10. March 2011 um 16:32

Wirklich ein guter Beitrag. Ich muss echt coder-blog.de haufiger besuchen

Apple iPad 2 schreib am 28. March 2011 um 00:09

Hi, i must say fantastic blog you have, i stumbled across it in Bing. Does you get much traffic?

Leland Maille schreib am 30. March 2011 um 20:17

Great article. Waiting for more.

© Coder-Blog 2014, Background Image by Beatrice Böhm