AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Bruteforce Dauer verkleinern

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

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

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
Benutzerbild von stahli
stahli

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

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
 
#3

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
 
#4

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 Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Bruteforce Dauer verkleinern

  Alt 14. Feb 2017, 13:16
Kommt auf den Compiler an un da lässt sich nur sagen dass der von Delphi ziemlich optimierten Code generiert
Das soll hoffentlich ein Witz sein Der Delphi-Compiler optimiert so ziemlich gar nichts.

Das Zeitaufwändige ist meist nicht das generieren der Permutationen, sondern die eigentliche Prüfung (im Zusammenhang mit der Anzahl der Prüfungen). Die wird unabhängig deiner verwendeten Sprache den Flaschenhals darstellen.
Die "Performance" der Sprache ist hier nur bedingt relevant.
Heutzutage ist das häufigste Szenario doch eigentlich, dass man einen Password-Hash gegeben hat, den man in Plaintext zurück-"rechnen" will. Hast du einen Hash lokal vorliegen und möchtest Diesen mit generierten Permutationen vergleichen, dann kann dieser Prozess hochgradig parallelisiert und optimiert werden (siehe z.b. das Tool Hashcat, welches - je nach Algorithmus und Hardware - mehrere Millionen Hashes pro Sekunde auf der Grafikkarte berechnen kann). Da kann jedes Quäntchen Performance am Ende einen großen Unterschied machen. Die Prüfung auf Gleichheit ist da denke ich eher zu vernachlässigen (selbiges gillt natürlich auch für einen direkten Vergleich von Plaintext). Du beziehst dich eher auf Situationen, bei denen der Abgleich übers Netzwerk erfolgt, nehme ich an?

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..
Meiner Erfahrung nach sind die C/C++ Compiler tatsächlich sehr überlegen, was Optimierung und Performance angeht, allerdings ist das immer stark Situationsabhängig und grade C++ ist eine schwer zu meisternde Sprache, bei der man als Anfänger unter Garantie erstmal einiges "verschlimmbessern" würde.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz