std::string search_key_in_series(uint32_t seed, TypeValidator *validator, unsigned char *enc_buf) { if (validator == NULL) { printf("Validator not found!\n"); return ""; } //single series without incrementing seed char key[0x100]; printf("Searching key started...\n"); #ifdef DEBUG printf("Start seed: %d = %#x\n----------\n", seed, seed); print_time_str(seed); #endif srand (seed); for (size_t key_num = 0; key_num < 10000000; key_num++) { make_random_key(key, sizeof(key)); if (validator->testKey(key)) { printf("> KEY FOUND: %s\n", key); printf("[SUCCESS]\n"); #ifdef DEBUG printf ("KEY: %s\nSEED %x = %d\nkey number in series: %d\n", key, seed, seed, key_num); #endif //log_key(seed, key, key_num, params.filename); return key; } } return ""; }
void trace (const char *format, ...) { va_list argptr; /* Argument list pointer */ FILE *out = stdout; /* Output by default to stdout */ if (trace_state) { va_start (argptr, format); /* Start variable args processing */ if (trace_file) out = trace_file; /* Output message: date: message text\n */ print_time_str (out); fputs (": ", out); vfprintf (out, format, argptr); fputs ("\n", out); fflush (out); va_end (argptr); /* End variable args processing */ } }
std::string search_key(Params ¶ms, TypeValidator *validator, size_t series_min, size_t series_max ) { if (validator == NULL) { printf("Validator not found!\n"); return ""; } size_t days = 0; int day_start = params.seed; int deadline = 2; //2 days max //--- int seed = params.seed; char key[0x100]; printf("Searching key started...\n"); #ifdef DEBUG printf("Start seed: %d = %#x\n----------\n", seed, seed); print_time_str(seed); #endif if (series_min != series_max) { #ifdef DEBUG printf("Smart search mode: ON!\nWarning: it works only if the file have a valid modification timestamp!\n"); printf("Series min = %d , max = %d\n----------\n", series_min, series_max); #endif } else { #ifdef DEBUG printf("Smart search mode: OFF!\n"); printf("Series min = %d , max = %d\n----------\n", series_min, series_max); #endif } size_t series = series_min; while (deadline > 0) { srand (seed); for (size_t key_num = 0; key_num < series; key_num++) { make_random_key(key, sizeof(key)); if (validator->testKey(key)) { if (validator->getAccuracy() >= PIVOT_MIN) { #ifdef DEBUG printf("Adjusting seed to to found one!\n"); #endif params.seed = seed; params.key_num = key_num; } printf(">> KEY FOUND: %s\n", key); printf("[SUCCESS]\n"); #ifdef DEBUG printf ("KEY: %s\nSEED %x = %d\nkey number in series: %d\n", key, seed, seed, key_num); #endif log_key(seed, key, key_num, params.filename); return key; } } if (params.incrementalMode) { seed++; } else { seed--; if (series < series_max) { //max number of encrypted files per milisecons series += series_min; } } if (abs(day_start - seed) > DAY_LEN) { day_start = seed; days++; deadline--; printf("%d day passed!\n", days); } } return ""; }