Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Bruteforce Dauer verkleinern (https://www.delphipraxis.net/191713-bruteforce-dauer-verkleinern.html)

derseitzer 13. Feb 2017 14:55

Bruteforce Dauer verkleinern
 
Passwordlänge Gross- / Kleinbuchstaben (26)
5 Zeichen 20 Min.
6 Zeichen 9 Std.
7 Zeichen 10 Tage
8 Zeichen 9 Mon.

Hey Leute :wink: ;
Ich habe letztens diese Tabelle hier oben gesehen und mich hat interessiert, ob es wirklich so einfach ist, einen Bruteforce zu schreiben:).
Also habe ich als blutiger Bruteforce-Anfänger einfach ein Memo hingeklatscht und angefangen (alle 26 Buchstaben stehen im array 'AllChars[]':
Code:
var
  starttime: cardinal;
  i: Integer;
  j: Integer;
  k: integer;
begin
starttime:= gettickcount;
  for i := 1 to 26 do
  begin
     for j := 1 to 26 do
     begin
       for k := 1 to 26 do
       begin
       Memo1.Lines.Add(AllChars[i] + AllChars[j]+AllChars[k]);

       end;
      end;
   end;
   showmessage('Zeit: ' + IntToStr(GetTickCount - startTime) + ' ms');
end;
Für 3 Zeichen (bis zzz), habe ich fast 21Sekunden gebraucht. Hochgerechnet auf 5 Zeichen wären das 21*26*26Sekunden also 4 Tage.
Laut der Tabelle braucht ein guter Bruteforce 20min..
Was unterscheidet einen guten Brutefoce von meinem? Wie kann ich das Programm beschleunigen? Das würde mich wirklich interessieren, denn ich habe keine Idee,
außer vielleicht statt nur 'a' ins array zu schreiben dann auch 'aa' 'ab' etc..

Bin gespannt wie man das hinbekommen kann :)

sakura 13. Feb 2017 14:58

AW: Bruteforce Dauer verkleinern
 
Zwei grundsätzliche Fehler
1. Du schreibst in ein Memo - die Darstellung am Bildschirm dauert relativ lange
2. Die Passwörter werden gar nicht irgendwo getestet.

Zum Thema Geschwindigkeit: Parallele Verarbeitung macht Sinn (Threads)

...:cat:...

HolgerX 13. Feb 2017 15:14

AW: Bruteforce Dauer verkleinern
 
Hmm..

Viele Bruteforce-Systeme arbeiten mit Passwort-Listen, in denen gebräuchliche Passwörter aufgelistet werden.

Diese werden meist als erstes abgearbeitet, sogar oft mit erfolg.

Ein Bruteforce mit einzelnen Buchstaben ist da schon langwierig, wenn das Passwort aus mehren 'Z' besteht und somit als letztes drankommt.

Hinzu kommt, dass Systeme mit Passworteingabe die Dauer bis zur nächsten Eingabe 'verlängern' u.A. indem der Hasch mehrfach erzeugt wird.

Somit kann es bei langen Passwörtern mit gutem Hasch-Verfahren schon seehhhrr lange dauern bis BruteForce ans Ziel kommt. ;)

Pixel 13. Feb 2017 15:21

AW: Bruteforce Dauer verkleinern
 
Einfach so einen guten Bruteforce zu schreiben ist nicht.

Ich kenne mich nicht im Detail aus, aber kann dir paar Sachen sagen:

1) Bruteforce dauer kannst du nicht pauschalisieren, denn wie lange es dauert hängt von der Hardware ab.
2) Du kannst mit der CPU bruteforcen (die ja heutzutage oft 8 Kerne hat) oder du kannst mit der Grafikkarte bruteforcen (GTX 1080 hat z.b. 2560 Kerne).

Hier fängt es an: Die Anzahl der Kerne ist natürlich von großer Bedeutung, du kannst pro Kern schließlich 1 Versuch jeweils parallel laufen lassen.

Klar, es gibt auch Multithreading, aber da ist eben zu unterscheiden, dass nur ganz schnell zwischen den Versuchen "hin und her geswitched" wird und nicht wirklich parallel gearbeitet wird (auf 1 Kern).

Ich erkenne an deinem Code dass du noch viel weniger Plan hast als ich, also hier ein paar Tipps:

1) Achte imemr darauf, dass du Variablen per Referenz übergibst und nicht als Kopie.

Wenn du also eine Funktion hast:

Delphi-Quellcode:
function TestPassword(APlain : string) : boolean;
begin
  Result := False;
  if MD5(APlain) = pass then
    Result := True;
end;

und du diese Funktion so aufrufen würdest:

for i := 0 to 100000000 do
begin
  if TestPassword(arr[i]) then
  begin
    showmessage('found');
  end;
end;
dann würde hier jedes Element aus arr bei der Übergabe an TestPassword kopiert werden, was auch ziemlich ineffizient ist. Also Call-by-Reference angucken.


2) Auf keinen Fall sowas machen wie jedes Passwort in ein Memo schreiben, das dauert ewig.

3) Multithreading, dazu kann man die Klasse TThread verwenden.


Abschließend lässt sich nur sagen dass es zwar schön zu sehen ist dass du dich für was interessiert und es auch versucht hast, aber dir mangelt es sehr wahrscheinlich an Wissen um sowas wirklich gut umsetzen zu können.

Edit:// Und wie schon gesagt wurde, bruteforced dein Code gar nichts, sondern gibt nur strings auf einem Memo aus.

Um das zu beschleunigen gibts übrigens Memo1.Beginupdate und Memo1.Endupdate.

derseitzer 13. Feb 2017 15:27

AW: Bruteforce Dauer verkleinern
 
Sehr interessant, danke!:)

stahli 13. Feb 2017 15:29

AW: Bruteforce Dauer verkleinern
 
Ich verstehe Deine Zielstellung nicht.

Willst Du ein Programm mit Passwortzugang schützen oder willst Du ein Programm/Website knacken?

Für letzteres wirst Du hier keine Unterstützung finden.

Um die Dauer abzuschätzen müsste man wissen, wie der jeweilige Passwortschutz aufgebaut ist. Wenn z.B. nur die Zahlen 1 bis 9 als Passwort möglich wären kannst Du 9 Versuche realisieren.
Bei Passwörtern als Text mit einer Mindestlänge von 5 Zeichen hast Du m.E. gar nicht die Möglichkeit alle Varianten durchzutesten.

Außerdem wird der Schutz versuchen, solche Massentests zu erkennen und diese abzubrechen.

X Varianten in ein Memo zu schreiben sagt erst mal noch gar nichts aus.

bra 13. Feb 2017 15:56

AW: Bruteforce Dauer verkleinern
 
Und dann ist auch noch die Frage ob ein Delphi-Programm von der Performance her mit einem hochoptimiertem C- oder sogar Assemblerprogramm mithalten kann, das speziell für diese Aufgabe geschrieben wurde. (Das soll jetzt keine Kritik an Delphi sein!)

Pixel 13. Feb 2017 16:38

AW: Bruteforce Dauer verkleinern
 
Zitat:

Zitat von bra (Beitrag 1361447)
Und dann ist auch noch die Frage ob ein Delphi-Programm von der Performance her mit einem hochoptimiertem C- oder sogar Assemblerprogramm mithalten kann, das speziell für diese Aufgabe geschrieben wurde. (Das soll jetzt keine Kritik an Delphi sein!)

Der Vergleich ist komisch.

Kommt auf den Compiler an un da lässt sich nur sagen dass der von Delphi ziemlich optimierten Code generiert

himitsu 13. Feb 2017 17:41

AW: Bruteforce Dauer verkleinern
 
Zitat:

Zitat von HolgerX (Beitrag 1361440)
Viele Bruteforce-Systeme arbeiten mit Passwort-Listen, in denen gebräuchliche Passwörter aufgelistet werden.

Das wäre dann aber ein Wörterbuchangriff und nachfolgend vielleicht noch Brute-Force.

Brute-Force (rohe Gewalt) bassiert grundsätzlich ja auf dem Ausprobieren aller möglichen Variationen.



Grundsätzlich kann man Brute-Force und auch die anderen Methoden ala Wörterbuchsuchen, durch paar Maßnahmen beschleunigen:
* die "Rechendauer" pro Passwort verkleinern (meißt durch besseren/passenderen Code, bzw. andere Rechenmethoden und optimalere Speicherzugriffe)
** hier vorallem StringListen statt Memos oder garnicht erst zwischenspeichern, sondern direkt ausprobieren
* mehrere Versuche gleichzeitig (Multi-Threading oder gar Parallel-Computing)
* und natürlich Vorberechnungen (z.B. die Rainbowtables bei MD5-Hash-Passwortsuchen)

derseitzer 14. Feb 2017 08:50

AW: Bruteforce Dauer verkleinern
 
Wäre C-Code dann schon von Anfang an besser, weil man mir auch immer gesagt hat, dass die Sprache C (C++..) darauf beruht, viel Rechenleistung und mehr Performance zu haben..


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz