#include #include #include #include #include char password[8]; void handle_sig(int); int main(int argc, char *argv[]) { int match = 0, i, x[8] = {0, 0, 0, 0, 0, 0, 0, 0}; char *result, *seed = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; if (argc < 2) return 1; memset(password, 0, 8); signal(2, handle_sig); printf("brute forcing, this may take some time (and cpu)...\n"); while(!match) { for (i=0; i<8; i++) { if (x[i] >= strlen(seed)) { x[i] = 1; x[i+1]++; } password[i] = (x[i]) ? seed[x[i]] : 0; } result = crypt(password, argv[1]); if (!strcmp(result, argv[1])) match = 1; x[0]++; } printf("password: %s\n", password); return 0; } void handle_sig(int j) { switch(j) { case 2: printf("interrupted on: %s\n", password); exit(0); } }