Code:
void btf(int size, int pos, char curr[]) { // size = Aktuelle Länge; pos = Aktuelle Position; curr = Das aktuelle Passwort
char* charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"; // Das Charset halt :D
int i;
if(pos < size){ // Wenn wir noch nicht beim letzen Buchstaben sind...
for(i=0; i<strlen(charset);i++){ // Gehe das ganze Charset durch...
        char test[strlen(curr) + 2]; //Hänge die Buchstaben hinten an...
        strcpy(test, curr);
        int len = strlen(test);
        test[len] = charset[i];
        test[len+1] = '\0';
        btf(size, pos+1, test); // Wir sind ja nicht beim letzten Buchstaben, also rufen wir uns selbst auf. Wenn der letzte Buchstabe erreicht ist, dann gehen wir wegen der For oben im Charset eins weiter. Das macht natürliche jede Instanz von BTF, und somit kommst du auf alle Möglichkeiten.
}} else { // wir haben ein Passwort generiert!
	if(match(crackme, curr) == 1) { // Passt der Hash?
	printf("Your Hash has been Cracked. md5( %s ) == %s\n", curr, crackme); // Ausgabe, wir haben was gecracked!
	exit(0);
	}
	}
}


In der Hinsicht hin ist sein Source Code wesentlich perdormanter als deiner.
Mir geht es auch absolut nicht um Geschwindigkeit, sondern eher um die Rekursiven Funktionen. Wenn ich was cracken will dann löse ich das über einen GPU-Cracker...