Mein eigenes Bruteforce-Tool

Hallo,
je hardwäre-näher, umso schneller. Das beste wäre also Microship für die Aufgabe ;)

Aber was du sonst machen kannst:
Das Interface, auslesen, präsentieren etc. per Java, da braucht man ja nicht die bestmögliche Perfomance.
Dann erstellst du den BruteForce Algorithmus in C/C++, diesen kannst du ja z.B. als C-DLL in deinem Java-Programm einbinden.

Somit ist der BruteForce Algorithmus sehr schnell, und das Interface etc. hast du in Java
 
@Elderan:
Das Interface, auslesen, präsentieren etc. per Java, da braucht man ja nicht die bestmögliche Perfomance. Dann erstellst du den BruteForce Algorithmus in C/C++, diesen kannst du ja z.B. als C-DLL in deinem Java-Programm einbinden.

Das ist ein guter Vorschlag, den ich auch umsetzen werde. Den BruteForce Algorithmus werde ich in C schreiben - da ich mich eigentlich schon lange intensiver mit C befassen wollte, ist das eine gute Gelegenheit.
 
@Tarantoga:
Wäre schön, wenn du dann evtl. ein paar Teile des Quelltextes veröffentlichen könntest.

@all:
Ich bin mittlerweile zu dem Schluss gekommen, dass es besser ist, für jede mögliche Passwortlänge zwischen 1 und 50 (und aufwärts) jeweils eine Funktion mit X geschachtelten for-Schleifen zu schreiben. X ist dabei die Länge des Passwortes, welches die Funktion generieren soll. Damit die Zählervariablen nach jedem Aufruf der Funktion erhalten bleiben, sollte man halt statische Variablen verwenden.


Was haltet ihr davon? Ist das wirklich die schnellste Methode? (Ich meine der "Algorithmus" hätte auf diese Weise eine Ordnung von n^X, schneller geht's eigentlich nicht.)


MfG, BattleMaker
 
Klingt interessant aber wie setzt du die For-Schleifen um, ihre Zahl ist ja variabel? Ich kenn mich damit (noch) nicht wirklich aus, ich habe erst ein paar Monate Erfahrng mit VB (6)

mfg
 
ich glaube BM meint damit das so:

Passwort von 1länge
len = Charset.Lenght()
for(int b1 = 0; b1< len; ++b1)
{
string pw = b1
if(pwtest(pw))
{
Console.WriteLine("Gefunden: " + b1);

}
}

Passwort von 2länge
len = Charset.Lenght()
for(int b1 = 0; b1< len; ++b1)
{
for(int b2 = 0; b2 <len; ++b2)
{
string pw = b2+b1;
if(pwtest(pw))
{
Console.WriteLine("Gefunden: " + b2 + b1);
}
}
}

usw.

nathrülich ist das (halb)pesudo code und dient nur zur darstellung (mir ist klar das string pw... man nicht in der for schleife immer neu deklarieren sollte sondern scho vor ab usw. usw.)

*edit*
pwtest() ist eine methode die true oder false zurück gibt und das passwort überprüft
 
Also ich folgender Code generiert Permutationen mit einstellbare Länge und einstellbarem Charset, also ohne ganz viele geschachtelte for-Schleifen, ist aber C++, also müsstest du das ganze erst portieren.
Code:
#include <iostream>

using std::cout;
using std::cin;
using std::endl;
#define BUFLEN 100 //ließe sich auch noch dynamisch lösen, jedoch i.d.R. nicht nötig
namespace
{
	char charset[BUFLEN]; 
	int end_len,start_len;
	int c_len;
	int act_len=start_len;
	char *tst,*indexes;
	bool next()
	{
		int d=act_len-1;
		while(d>=0)
		{
			++indexes[d];
			if(indexes[d]>(c_len-1))
			{
				indexes[d]=0;
				tst[d]=charset[0];
				--d;
			}
			else
			{
				tst[d]=charset[indexes[d]];
				return true;
			}
		}
		return false;
	}
}
int main(int argc, char* argv[])
{
	memset(charset,0,BUFLEN);
	cout << "Charset eingeben:" << endl;
	cin.get(charset,BUFLEN);
	cout << "Startlänge eingeben:" << endl;
	cin >> start_len;
	cout << "Endlänge eingeben:" << endl;
	cin >> end_len;
	c_len=strlen(charset);
	tst=new char[end_len+1];
	indexes=new char[end_len+1];
	bool valid=false;
	for(;act_len<=end_len && !valid;++act_len)
	{
		for(int i=0;i<act_len;++i)
		{
			tst[i]=charset[0];
			indexes[i]=0;
		}
		tst[act_len]='\0';
		do
		{
			//hier algo einfügen und ggf. valid auf true setzen
		}
		while(next() && !valid);
	}
	return 0;
}

Anm.: Eingaben werden nicht geprüft, also nicht so in eine Anwendung übernehmen, der Code ist nur als Demonstration gedacht und der Code ist stellenweise zu Gunsten der Einfachheit/Geschwindigkeit nicht sehr elegant.
 
@Lesco:
Danke für den Tipp, aber ich glaube eine Permutationsfunktion gibt es auch in der Standardbibliothek 'algorithm'. Und ich habe mir gerade erst vor einer Woche ein C++-Buch gekauft :).
Mal sehen ob sich eine MD5-Funktion für C++ finden lässt... *g*



MfG, BattleMaker
 
Ich habe da zufällig mal Md5 implementiert, aber es ist noch nicht optimiert, alternativ kannst du auch die aus dem rfc in C nehmen. Aber bei einer 1Gig-Datei ist meine Version sogar ~2 sec schneller als openssl auf meinem System.(mit -O3)
 
Zurück
Oben