Also vielleicht ich stehe gerade massiv auf dem Schlauch, aber warum zum Teufel löst du das mit den ganzen For-Schleifen? Warum nicht einfach rekursiv?

Code:
void btf(int size, int pos, char curr[]) {
char* charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
int i;
if(pos < size){
for(i=0; i<strlen(charset);i++){
        char test[strlen(curr) + 2];
        strcpy(test, curr);
        int len = strlen(test);
        test[len] = charset[i];
        test[len+1] = '\0';
        btf(size, pos+1, test);
}} else {
	if(match(crackme, curr) == 1) {
	printf("Your Hash has been Cracked. md5( %s ) == %s\n", curr, crackme);
	exit(0);
	}
	}
}
Ist vielleicht auch nicht perfekt, aber berechnet auch alle Kombinationen aus dem gegebenen Charset.
(Siehe http://free-hack.com/ansi-c-c-c/5623...5-cracker.html )

Ich hoffe mal ich hab auch alles richtig verstanden, und hab jetzt nicht aus versehen Mist gepostet