AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bruteforce Dauer verkleinern

Ein Thema von derseitzer · begonnen am 13. Feb 2017 · letzter Beitrag vom 14. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2      
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 14:55
Passwordlänge Gross- / Kleinbuchstaben (26)
5 Zeichen 20 Min.
6 Zeichen 9 Std.
7 Zeichen 10 Tage
8 Zeichen 9 Mon.

Hey Leute ;
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 14:58
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)

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#3

AW: Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 15:14
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.
  Mit Zitat antworten Zitat
Pixel

Registriert seit: 23. Aug 2016
26 Beiträge
 
#4

AW: Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 15:21
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.

Geändert von mkinzler (13. Feb 2017 um 17:54 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 15:27
Sehr interessant, danke!

Geändert von derseitzer (13. Feb 2017 um 15:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 15:29
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 15:56
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!)
  Mit Zitat antworten Zitat
Pixel

Registriert seit: 23. Aug 2016
26 Beiträge
 
#8

AW: Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 16:38
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#9

AW: Bruteforce Dauer verkleinern

  Alt 13. Feb 2017, 17:41
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Feb 2017 um 17:44 Uhr)
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#10

AW: Bruteforce Dauer verkleinern

  Alt 14. Feb 2017, 08:50
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..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr.
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