passwort knacken mittels bruteforce in c# zu langsam



  • Rein Interessehalber habe ich eine Anwendung erstellt, die mehr oder weniger sinnfrei ist. es gibt eine textbox wo ein passwort eingegeben wird, von diesem wird dann ein MD5 generiert. danach sucht das Programm alle möglichen Buchstabenkombinationen ab und generiert wieder den md5 aus allen möglichen buchstabenkombinationen, solange bis ich eine übereinstimmung habe. Also im Prinzip nix anderes als ein Brute-Force-Angriff. Nun meine Fragen: Dictionary Angriff wäre deutlich schneller, ja oder nein? Ich schaffe nur ca. 1300 Passwörter/Sekunde, obwohl mein Pc relativ neu ist. Liegt das an meinem Programmierstil, an C# oder sind 1300 PWs pro sekunde eine normale Leistung für einen PC? Wenn ich diese Anwendung in der Console laufen lassen würde, müsste es eigentlich noch deutlich schneller gehen, da ich mir so Sachen wie das Updaten von Textboxen etc. sparen könnte. Richtig oder falsch?? Damit der Titel nicht falsch verstanden wird, ich hab nix illegales vor, ich möchte nur wissen an Hand des selbstversuchs wieviel dass maximal möglich ist für einen normalen PC.



  • 1.) Ja!
    2.) Ja!
    3.) C# auch
    4.) Nein
    5.) Ja



  • Da steht was drüber, wie schnell das gehen könnte:

    http://en.wikipedia.org/wiki/MD5#Security



  • Du kannst dir ja mal BarsWF runterladen, der zeigt dir an wie viele Hashes deine CPU pro Sekunde testen kann. 😉 Ich würde mal schätzen, dass deren Implementierung relativ gut ist. uU musst du natürlich Multithreading raus rechnen, wenn du nur einen Kern nutzt.



  • graphischen Benutzeroberfläche, in diesem Fall Windows Forms. Ich habe alle Updates von Textboxen/Richtextboxen, etc. rausgenommen aus dem Programmcode und habe jetzt knapp 50000 passwörter pro Sekunde, allerdings benutze ich nur einen von vier Kernen. Das kann doch nicht wirklich wahr sein dass eine Gui die Anwendung selber so stark bremst, zum Vergleich zuerst warens 1300 Pws. pro Sekunde???? Gibts irgendeine Optimierungsmöglichkeit so dass ich in C# mehrere kerne verwenden kann???



  • brecher schrieb:

    Das kann doch nicht wirklich wahr sein dass eine Gui die Anwendung selber so stark bremst, zum Vergleich zuerst warens 1300 Pws. pro Sekunde????

    Wenn du nach jedem Versuch die GUI updatest (z.B. mit der Anzahl der gemachten Versuche)...

    Gibts irgendeine Optimierungsmöglichkeit so dass ich in C# mehrere kerne verwenden kann???

    Mehrere Threads?



  • knivil schrieb:

    5.) Ja

    Ja ist keine Antwort auf die Frage richtig oder falsch.



  • brecher schrieb:

    Das kann doch nicht wirklich wahr sein dass eine Gui die Anwendung selber so stark bremst,

    Doch, weil das Updaten der GUI einen Kontextswitch von der Anwendung zum OS bewirkt und der ist teuer.

    Idealerweise trennt man daher die GUI Ausgabe von der Berechnung.
    Wenn dir eine Statusmeldung oder Fortschrittsanzeige der Berechnung wichtig ist, dann lass nur alle 30000 Ergebnisse (oder so) ein Ergebnis ausgeben, das dürfte den Anteil der GUI Ausgabe während der Zeit der Berechnung auf das wesentliche beschränken.

    Gibts irgendeine Optimierungsmöglichkeit so dass ich in C# mehrere kerne verwenden kann???

    Ja, benutze Threads.

    Auch stellt sich die Frage ob du beim suchen der Buchstabenkombinationen schon optimiert hast, hier gäbe es auch Möglichkeiten.
    Müßtest halt mal den Code posten, damit wir dir da näher etwas sagen können.



  • Eumelquadro schrieb:

    knivil schrieb:

    5.) Ja

    Ja ist keine Antwort auf die Frage richtig oder falsch.

    wahr oder falsch gibt für informatiker immer wahr, also ist ja die richtige antwort. http://de.wikipedia.org/wiki/Disjunktion



  • du darfst niemals zeichen auf dem bildschirm ausgeben egal ob konsole oder win32 , das bremst dein Programm gewaltig, weiters würde ich den Prozess welcher die Brutefore attacke ausführt einen extra Thread zuweisen, weiters solltest du versuchen dass dein Programm alle Kerne verwendet, am besten einen Thread pro kern, wenn du ein standard programm programmierst wird nur ein Kern des Prozessors verwendet. du kannst auch zusätzlich die GPU deiner Grafikkarte verwenden , da diese verdammt schnell ist. naja alle kerne deiner CPU und mit der GPU sollte dein Tool sehr sehr viel schneller machen. wenn du eine dictionary attacke machen willst solltest du vorher dein Wörterbuch versuchen in den RAM zu laden was nochmal eine performance steigerung bewirkt, als wenn dein Programm wort für wort von der Platte lesen muss!

    viel gllück!

    solltest du noch mehr hilfe benötigen schau dir den quellcode von John the Ripper an, der war verdammt schnell, für die damalige zeit, davon kannst du bestimmt was lernen.

    cu
    buntehaare


Anmelden zum Antworten