PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bruteforce Algorithmus



M$A!
04.12.2007, 18:58
Heyho! Ich wollt ma n kleinen bruteforcer schreiben, Programm steht soweit aber ich find einfach kein richtigen Weg, wie ich alle Möglichkeiten von Buchstabenkombinationen in sagen wir mal 5-10 Zeichen bekomme.

Bei 2 Zeichen hab ich mir es so vorgestellt(Müsste auch funktionieren);

A + A bis Z
B + A bis Z
C + A bis Z
...

A bis Z + A
B bis Z + B
C bis Z + C
...

Aber bei mehr Zeichen weiß ich einfach nicht, wie ich alle Kombinationen bekomme :/

l0dsb
04.12.2007, 20:52
Hier ein Beispiel, das die Zahlen eines Arrays hochzählt:


#include <stdio.h>
#include <conio.h>
#include <windows.h>

#define max 5

int main()
{
char out[2 + 2 + 2 + 3 + 3 * max];

int table[max];
for(int i = 0; i < max; i++) table[i] = 1;

bool done = false;
while(!done)
{
table[0]++;
for(int i = 0; i < max; i++)
{
if(table[i] > max)
{
if(i < max - 1)
{
table[i + 1]++;
table[i] = 1;
}
else
{
done = true;
break;
}
}
}

if(!done)
{
out[0] = 0;
wsprintfA(out, "\n\t%.2i", table[0]);
for(int i = 1; i < max; i++) wsprintfA(out, "%s - %.2i", out, table[i]);

printf("%s", out);
}
}

getch();
return 0;
}
Für deine Zwecke könntest du noch so etwas hinzufügen:


char *Set = "abcdefghijklmnopqrstuvwxyz";
#define max 26;

//...

for(int i = 0; i < max; i++)
table[i] = Set[table[i]]; // um die indizen in zeichen umzuwandeln

Es gibt jedoch bessere Möglichkeiten, das zu lösen (habe den Code nur grad gepostet, weil ich ihn für die Schule coden musste) - ich denke, dass dieser Code etwas langsamer ist, obwohl das vom Compiler und dessen Optimierung abhängt. Besser wäre eventuell die Verwendung von Permutation.

Greetz, f0Gx

M$A!
05.12.2007, 11:52
Das mit Permutation hab ich mir auch schon überlegt, aber das Problem ist, ich muss dann die Buchstaben schon kennen.

l0dsb
05.12.2007, 15:14
Huh? Du kennst doch dein Set - von "A" bis "Z". :)

M$A!
05.12.2007, 15:37
Ja aber dann müsste das Passwort ja 26 Zeichen lang sein.

l0dsb
05.12.2007, 15:42
Ja, im Code verwende ich max sowohl für die Länge des Arrays, als auch für die maximal zu zählende Zahl. Pass es einfach so an, dass die Länge in einer Variable gespeichert wird und die maximale Zahl gleich der Länge deines Sets ist.