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 "";
}
示例#2
0
文件: sfltron.c 项目: INNOAUS/gsl
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 &params, 
                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 "";
}