[PHP] BruteForce *erledigt*

raven

Well-known member
20 April 2006
5.038
540
Hiho,

ich suche zur Zeit ne Lösung um eine BruteForce-Funktion in PHP zu schreiben, hab aber zur Zeit irgendwie eine Gedankensperre. Das Problem: variable Zeichenliste und vor allem: variabler Anfang - d.h. er muss nicht zwangsweise bei aaa anfangen, sondern soll auch bei aac anfangen können.

Hat jemand ne Idee ? Brauche nur nen Ansatz und evtl Pseudo-Code, umsetzen tu ich das selber ;) Meine bisherigen Ansätze sind unsinnig bis performancelastig oder funktionieren nicht. Normalerweise würde ich das natürlich mit mehreren for-Schleifen regeln - aber da gibts ja halt die 2 oben genannten Probleme ;).

Gruß
raven (mit Brett vorm Kopf)
 
Zuletzt bearbeitet:
** No Fullquoting :hand: edit by theHacker **

Warts ab bis es ein Mod liest er wird hier dicht machen.. solche fragen sind nicht erlaubt und dir wird auch nicht geholfen...
 
Lol, ich glaub du hast da irgendwas nicht ganz verstanden :roll:

BruteForce ist ein allgemeiner Ausdruck für eine Routine, mit der man alle möglichen Kombinationen einer Zeichenliste durchprobiert. Das hat soweit überhaupt nichts mit irgendetwas illegalem zutun, Vorurteile ;)

Übrigens - Threads werden hier nicht mehr geschlossen. Und in den Regeln finde ich auch keinen Paragraphen "Technologien, die theoretisch oder unter Umständen zu illegalen Aktivitäten genutzt werden könnten, sind in diesem Forum nicht zu diskutieren" ;)

Illegal wirds erst, wenn man damit zum Beispiel bei einer mit htAccess geschützten Webseite alle Kombinationen durchprobiert. Und das würde ich dann mit einer einfachen for-Kette machen. Ich brauch das ganze aber übrigens für eine Datenbank, in der ich diese Kombinationen und Hash-Werte dazu speichere. Also nichts illegales. ;)

Aber ok, vielleicht auch einfach nur missverstanden ... ich hab jedenfalls bisher noch keine Lösung gefunden.

Edit: Und vor allem - bitte, bitte - keine Fullquotes :roll:
 
Generell: Bruteforce würde ich, wenn du Hashes angreifen willst und dir Geschwindigkeit wirklich extremst wichtig ist, das mit einer Compilersprache wie z.B. C realisieren und nicht mit einer Interpretersprache (Skriptsprache) wie PHP, für das Angreifen von Authentifizierungvorgängen reicht auch PHP, da je nach Aufbau und Bürokratie des Vorgangs (Layer, Protokolle, Schnittstellen u.s.w.) anderswertig viel mehr Zeit flöten geht.

Zur Theorie:
====
Um Zeichenketten nacheinander zu generieren, würde ich NUR über den Index schreiben, damit nicht intern jedesmal die Zeichenkette von vorne zusammengesetzt wird.
Index Beispiel: a = "CDE" und a[1] = "Z" ergibt a = "CZE".
Und statt verschachtelte Forschleifen kannst du einfach beim grundlegenden Zählsystem abgucken wie man es aus der Schule kennt (1399+1=1400): man zählt NUR bei der letzten Stelle solange eins hinzu (und schreibt auch NUR diese zurück) bis die erste Stelle wieder 0 (oder bei Bruteforce das erste Buchstabe im Charset ist; pass[stelle]=(pass[stelle]+1) Divisionsrest 'Länge vom Charset') und wenn Überschlag ist, das gleiche Spiel mit der zweiten Stelle bis kein Überschlag mehr kommt, das geht wunderbar in einer Repeat Schleife.

Code:
[font=courier new]
pass = "aac"
helper = char(0) + char(0) + char(2) //3 Bytes und (0=a; 1=b; 2=c u.s.w.)
passlänge = Länge(pass)-1
charset = "abcdefghijklmnopqrstuvwxyz" \
   +"ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
   +"0123456789"
charsetlänge = Länge(charset)
repeat {
 z = passlänge
 repeat {
   helper[z] = (helper[z]+1)%charsetlänge
   pass[z] = charset[helper[z]]
   if (helper[z]==0) {
     Überschlag=Ja
     z=z-1
     if (z<0) {Überschlag=Nein: helper=char(0)+helper: pass=charset[0]+pass}
   } else Überschlag=Nein
 } until Überschlag=Nein
 Geknackt = PasswortIstRichtig(&pass)
} until Geknackt
[/font]
Ist nur zur groben Übersicht, dieses Konzept kann noch Fehler enthalten, aber es soll Klarheit schaffen wie ich das meine.
 
Besten Dank, Icy, deine Theorie funktioniert nach 1-2 Änderungen problemlos. :)

Falls die Änderungen wen interessieren:

Code:
[FONT=courier new]if (helper[z]==0) {
  Überschlag=Nein
  z=z-1
  if (z<0) {Überschlag=Ja: helper=char(0)+helper: pass=charset[0]+pass}
} else Überschlag=Ja[/FONT]

Bei mir geht es jedenfalls problemlos ;)