Mein Intelligenter Brute-Forcer

Ich wollte hier mal meine intelligente Brute-Force-Klasse vorstellen(C++).

Jetzt fragt ihr euch natürlich: Was ist ein ?intelligenter? Brute-Forcer.

Nun ja: Normale Brute-Force-Algorithmen probieren ja stur alle Möglichkeiten durch, ohne auf eventuelle Gegebenheiten von Sprachen zu achten. Manche Buchstaben stehen zum Beispiel öfter hinter anderen Buchstaben und manche Buchstabenkombinationen kommen so gut wie nie vor.

In der deutschen Sprache gibt es zum Beispiel keine Wörter mit cz oder xv. Sollten also solche Wörter nicht als letztes getestet werden?

Genau das macht mein Brute-Forcer.

Zunächst durchsucht der Algo ein von euch gewählte Datei. Dann zählt er die entsprechenden Häufigkeiten in der Datei und berücksichtigt sie später beim bruten. Man kann also je nach Bedarf auch englische, französische oder anders-sprachige Texte einlesen.

Ich habe all das in eine Klasse gepackt, in der die Check-Funktion frei definiert werden kann. Sollte also auch gut verwendbar sein.

Warum schreibe ich das hier?

Ich hätte gern ein Feedback von euch. Was findet ihr gut was schlecht. Kann man meine Klasse gebrauchen?

Wäre nett wenn ein paar Leuts die Klasse mal testen.

Der Link (mit weiteren Infos): http://www.bcabrera.de/wordpress/?p=13

MFG
Ace
 
Wow, ich finde die idee genial. Fehlen nur noch benchmarks im vergleich zu dictionaries und durchzählenden attacken.
Interessant wäre noch, ob man die effizienz noch steigern kann indem man 3-gramme oder 4-gramme verwendet. Sollte mit heutigen rechnern ja beides machbar sein. Wär cool, wenn du mal Testergebnisse posten würdest.
 
hi AceKiller73
ich kenn mich da jetz überhaupt nicht aus, bin also 110% laie.
was ist wenn das passwort kein wort aus einer sprache ist? z.b. '12§*_da!"Zys
da versagt das system leider völlig, aber ansonsten find ich den ansatz super.
 
Original von shUnderdog
hi AceKiller73
ich kenn mich da jetz überhaupt nicht aus, bin also 110% laie.
was ist wenn das passwort kein wort aus einer sprache ist? z.b. '12§*_da!"Zys
da versagt das system leider völlig, aber ansonsten find ich den ansatz super.

Das System versagt nicht völlig. Es werden nach wie vor alle möglichkeiten getestet, jedoch in einer anderen reihenfolge. Dadurch dauert das generieren der Teststrings zwar deutlich länger, aber das fällt im Vergleich zum eigentlichen Test vermutlich nicht ins Gewicht (um das zu beweisen sind benchmarks gefragt).

Von der API her hätte ich es vermutlich etwas anders gemacht (die stringmenge als virtuellen Container und daruf dann einen Iterator), aber das ist zweitrangig, die idee bleibt genial.
 
Nun da war ich mir auch nicht so sicher.

Ich meine aber mal hier im Board gelesen zu haben, das John die irgendwie zufällig generiert oder so?
Kann aber auch "gefährliches Halbwissen" sein.

Wie Arno schon gesagt hat ist der Algo nicht unbedingt auf Schnelligkeit optimiert. Sollte mehr ein Beispiel für die Idee sein.

Vielleicht lade ich heute auch mal meine Benchs hoch (den Code). Für lange Tests fehlt mir im moment die Zeit :D

Also wenn ich eine Matrix für eine Wordliste erstelle und dann genau diese Wortliste durchlaufe, ist IBrute ungefähr 60% schneller als ein "AbcBrute". Wenn man das dann auf alle Werte verrechnet wirds natürlich deutlich weniger. Muss aber noch getestet werden.

MFG
Ace

Edit:
Q: Are the strings tried with "-i" ("incremental" mode) random? They certainly look like they are almost random.
A: No, they are not. No single candidate password will be tried for a second time and the order in which they are tried is in fact very smart: it is based on frequencies of different trigraphs, stored and processed separately for each character position and for each password length.
Quelle: http://www.openwall.com/john/doc/FAQ.shtml

Also John benutzt auch bestimmte Buchstaben an bestimmten Positionen des Wortes. Aber hängten die Wahrscheinlichkeiten nicht auch von dem voherigen Buchstaben ab? Ich weiß nicht ob John das berücksichtigt.
 
Hallo,
naja relevant wäre primär die Geschwindigkeit. Wieviele Passwörter werden z.B. für md5 im Vergleich zu z.B. md-crack getestet?
Denn solch aufwendigen Analysen zur Erstellung des Passwortes können die Performance schon stark drücken, so dass dann scheinbar zufälliges Testen deutlich schneller geht.
 
Nun ja die Klasse ist ja erstmal ohne irgendeine Implementierung für die CheckFunktion (also die Funktion, die das Passwort testet).

Ich denke nämlich, dass die Geschwindigkeit z.B. für md5 dann von der md5 implementierung abhängt. Denn:

1. Habe ich durchaus darauf geachtet keinerlei unnützen Kram in meiner Brute-Schleife zu haben

und

2. Die Rechenoperationen von MD5 sind weit weit umfangreicher als die meiner Brute-Klasse.

Nichts desto trotz ist meine Klasse nicht wirklich optimiert (Compiler Einstellungen & Co). Davon habe ich leider keine Ahnung. Würde mich deshalb freuen wenn ihr euch die Klasse mal anschaut und Kritik übt.

MFG
Ace
 
Ist es in der Zeit, in der alle (die meisten) Leute informiert sind, dass passwörter wie "h4s3ää!!" einiges sicherer sind als "helena" überhaupt sinnvoll so zu bruten?

Nicht dass ich dir den Spass nehmen möchte, die Idee selber finde ich sehr gut, aber das war mein erster Gedanke...
 
Jap stimme ich dir zum Teil zu.

Allerdings weiß das längst nicht jeder. Außerdem bringt mein Algo ja auch Vorteile bei zusammengesetzten Wörtern.

Ich denke das doch eher wenige wirklich komplett zufällige Passwörter generieren.

Aber du hast schon Recht. Wenn man BruteForce vermeiden kann, sollte man die andere Möglichkeit benutzen. Wenn man aber Brute-Forcen will, warum dann nicht gleich richtig (mein Algo :D).

Ich wollte einfach jedem eine einfache Möglichkeit geben eine guten schnellen und komfortablen Brute-Forcer erstellen zu können (dazu soll meine Klasse beitragen).

MFG
Ace
 
genau das was starfoxx anspricht meinte ich ja, wenn du noch 100x weißt das dein opfer aus z.b. frankreich kommt bringt es nix so zu bruten, "x45234ddda*Ää'3!^"§%" ist keiner sprache zuzuordnen.
da bist du so oder so langsam, mit oder ohne iBrute.
aber fürs knacken eines archives, das man selbst mit einem 5zeichen pwd verschlüsselt hat um den bruder davon fern zu halten, oder das archiv des 7 jährigen bruders der sich einfach nix kompliziertes ausdenkt, reicht es mal.
auserdem ist es gut dokumentiert. das find ich das wichtigste an deinem projekt.
 
Was für dich eventuell noch interessant werden kann, ist der Informationsgehalt der verschiedenen Buschtaben (und/oder die Entropie), um so möglichst optimale Kombinationen für die Sprachen zu erhalten. Jedoch bräuchtest du eine Tabelle mit dem Informationsgehältern.
 
@shUnderdog:
Das ist aber eher ein Problem von Brute-Forcern allgemein.

Aber selbst wenn ich die Sprache Englisch analysiert habe und Frankzösisch nachher wähle kann sind sich die beiden doch ähnlicher als Frankzösisch und ein ABC Brute-Forcer.

@0wnz:
Guck ich mir ma an. Danke für den Tipp.

@All:
Schonmal danke für eure gute Kritik.

MFG
Ace
 
Zurück
Oben