Da ich schon oft bei Crackmes und Ähnlichem auf Algos gestoßen bin, die sich nicht ohne weiteres umkehren ließen und ich keine Lust mehr hatte, bei einem Bruteforcer, das ganze Drumherum wie das Erzeugen der Permutationen, Status-Anzeige, Speicherfunktion usw., ständig per Copy&Paste einfügen zu müssen, habe ich mir eine flexiblere Lösung überlegt.
Der ganze Code zum Bruteforcer abgesehen vom Algo ist in einer exe, und man muss nur noch den Algorithmus in eine Dll packen und hat Zeit gespart.
Das hat nun den z.B. den Vorteil, dass man den Algo in jeder Sprache schreiben kann, solange man damit Dlls erstellen kann.
Hier ist nun das fertige Ergebnis. Gecodet ist das ganze in masm32(ein Assembly-Dialekt mit Elementen aus Hochsprachen, wie if/while/for/struct, IDE:RadAsm). Ich habe mich aus 2 Gründen für diese Sprache entschieden:
-Performance(ich weiß, ich hätte auch bei den entsprechenden Abschnitten inline-Asm verwenden, und den Rest in einer Hochsprache schreiben können)
-um meine Assembly-Kenntnisse ein wenig aufzubessern
Ich veröffentliche das Projekt unter der GPL.
Nun zur eigentlichen Benutzung:
Man erstellt ein Dll, die 2 Funktionen mit dem Prototyp
exportiert. Die eine von beiden wird 1 mal mit einem, vom Benutzer eingegebenen Wert aufgerufen, dies könnte z.B. ein Hashwert sein, den man bruteforcen will.
Wenn der Parameter ungültig ist, sollte die Funktion false(=0) zurückgeben, ansonsten true.
Die andere Funktion wird mit jeder Permutation des gewählten charsets aufgerufen. Diese Funktion könnte z.B. so aussehen, dass der Hashwert aus dem Parameter errechnet und mit einem gespeicherten Hashwert verglichen wird(z.B der in der ersten Funktion eingelesene). Wenn der Parameter gültig ist, sollte die Funktion true, ansonsten false zurückgeben.
Dann muss man nur noch bei dem Programm Charset+minimum und maximum Länge angeben, seine Dll auswählen, den Namen der Funktionen+Argument angeben und auf Start drücken.
Ich habe eine Beispiel-Md5-Dll in C/C++ in das Archiv gepackt. Den Algorithmus habe ich aus dem rfc1321 übernommen, und er ist daher nicht für diesen Zweck optimiert, erwartet also keine gute Geschwindigkeit, das ist nur eine Demonstration wie so eine Dll aussehen könnte.
Die restlichen Optionen dürften selbsterklärend sein.
Ich weiß, dass Programm ist nun nicht etwas, was jeder braucht, also wenn ihr es unnütz findet, braucht ihr das hier nicht zu posten.
Die kompilierte Beispiel Dll hänge ich separat an, da das Archiv sonst zu groß wäre.
Wenn ihr Kritik/Verbesserungsvorschläge habt oder einen Bug gefunden habt, postet es hier.
Der ganze Code zum Bruteforcer abgesehen vom Algo ist in einer exe, und man muss nur noch den Algorithmus in eine Dll packen und hat Zeit gespart.
Das hat nun den z.B. den Vorteil, dass man den Algo in jeder Sprache schreiben kann, solange man damit Dlls erstellen kann.
Hier ist nun das fertige Ergebnis. Gecodet ist das ganze in masm32(ein Assembly-Dialekt mit Elementen aus Hochsprachen, wie if/while/for/struct, IDE:RadAsm). Ich habe mich aus 2 Gründen für diese Sprache entschieden:
-Performance(ich weiß, ich hätte auch bei den entsprechenden Abschnitten inline-Asm verwenden, und den Rest in einer Hochsprache schreiben können)
-um meine Assembly-Kenntnisse ein wenig aufzubessern
Ich veröffentliche das Projekt unter der GPL.
Nun zur eigentlichen Benutzung:
Man erstellt ein Dll, die 2 Funktionen mit dem Prototyp
Code:
bool __stdcall funktionsName(char*)
Wenn der Parameter ungültig ist, sollte die Funktion false(=0) zurückgeben, ansonsten true.
Die andere Funktion wird mit jeder Permutation des gewählten charsets aufgerufen. Diese Funktion könnte z.B. so aussehen, dass der Hashwert aus dem Parameter errechnet und mit einem gespeicherten Hashwert verglichen wird(z.B der in der ersten Funktion eingelesene). Wenn der Parameter gültig ist, sollte die Funktion true, ansonsten false zurückgeben.
Dann muss man nur noch bei dem Programm Charset+minimum und maximum Länge angeben, seine Dll auswählen, den Namen der Funktionen+Argument angeben und auf Start drücken.
Ich habe eine Beispiel-Md5-Dll in C/C++ in das Archiv gepackt. Den Algorithmus habe ich aus dem rfc1321 übernommen, und er ist daher nicht für diesen Zweck optimiert, erwartet also keine gute Geschwindigkeit, das ist nur eine Demonstration wie so eine Dll aussehen könnte.
Die restlichen Optionen dürften selbsterklärend sein.
Ich weiß, dass Programm ist nun nicht etwas, was jeder braucht, also wenn ihr es unnütz findet, braucht ihr das hier nicht zu posten.
Die kompilierte Beispiel Dll hänge ich separat an, da das Archiv sonst zu groß wäre.
Wenn ihr Kritik/Verbesserungsvorschläge habt oder einen Bug gefunden habt, postet es hier.