Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <crypt.h>
- #include <time.h>
- int guesses = 0;
- char *
- brute(char *dict, int dictlen, char hash[13], int len) {
- unsigned char indeces[len];
- char guess[len + 1];
- int cur;
- char *res;
- memset(indeces, 0, len);
- cur = 0;
- guess[len] = 0;
- while (cur >= 0) {
- if (cur == len) {
- res = crypt(guess, hash);
- guesses++;
- if (!memcmp(res, hash, 13)) {
- res = malloc(len + 1);
- memcpy(res, guess, len + 1);
- return res;
- }
- cur--;
- } else if (indeces[cur] == dictlen + 1) {
- cur--;
- } else {
- guess[cur] = dict[indeces[cur]];
- indeces[cur]++;
- cur++;
- indeces[cur] = 0;
- }
- }
- return NULL;
- }
- char dict[] = "abcdefghijklmnopqrstuvwxyz";
- int
- main() {
- char *res;
- char *pass;
- char hash[13];
- char *salt;
- struct timespec start, finish;
- float spent;
- float rate;
- printf("Password: ");
- scanf("%ms", &pass);
- printf("Salt: ");
- scanf("%ms", &salt);
- res = crypt(pass, salt);
- memcpy(hash, res, 13);
- printf("Hash is %s\n", res);
- clock_gettime(CLOCK_BOOTTIME, &start);
- res = brute(dict, sizeof(dict) - 1, hash, strlen(pass));
- clock_gettime(CLOCK_BOOTTIME, &finish);
- spent = (finish.tv_sec - start.tv_sec);
- spent += (finish.tv_nsec - start.tv_nsec) / 1000000000.0;
- rate = guesses / spent;
- printf("Spent %f sec, rate %f g/s\n", spent, rate);
- if (res) {
- printf("Found: %s\n", res);
- } else {
- printf("Not found\n");
- }
- free(pass);
- free(salt);
- free(res);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement