#define GOOD_BYTES_REQUIRED 13 // default 28, could be smaller == faster
#define MIN_NONCES_REQUIRED 4000 // 4000-5000 could be good
#define NONCES_TRIGGER 2500 // every 2500 nonces check if we can crack the key
+#define CRACKING_THRESHOLD 39.00f // as 2^39
#define END_OF_LIST_MARKER 0xFFFFFFFF
bool thread_check_started = false;
bool thread_check_done = false;
-bool cracking = false;
bool field_off = false;
pthread_t thread_check;
UsbCommand resp;
field_off = false;
- cracking = false;
thread_check_started = false;
thread_check_done = false;
clearCommandBuffer();
do {
- if (cracking) {
+ if (thread_check_started && !thread_check_done) {
sleep(3);
continue;
}
}
count += (p_odd - p->states[ODD_STATE]) * (p_even - p->states[EVEN_STATE]);
if (found_odd && found_even) {
- PrintAndLog("Key Found after testing %lld (2^%1.1f) out of %lld (2^%1.1f) keys. ",
+ PrintAndLog("\nKey Found after testing %lld (2^%1.1f) out of %lld (2^%1.1f) keys. ",
count,
log(count)/log(2),
maximum_states,
fprintf(fstats, "%1.1f;", 0.0);
}
}
- if (kcalc < 39.00f) return true;
+ if (kcalc < CRACKING_THRESHOLD) return true;
return false;
}
num_good_first_bytes = estimate_second_byte_sum();
clock_t time1 = clock();
- cracking = generate_candidates(first_byte_Sum, nonces[best_first_bytes[0]].Sum8_guess);
+ bool cracking = generate_candidates(first_byte_Sum, nonces[best_first_bytes[0]].Sum8_guess);
time1 = clock() - time1;
- if ( time1 > 0 ) PrintAndLog("Time for generating key candidates list: %1.0f seconds", ((float)time1)/CLOCKS_PER_SEC);
- if (known_target_key != -1) brute_force();
+ if (time1 > 0) PrintAndLog("Time for generating key candidates list: %1.0f seconds", ((float)time1)/CLOCKS_PER_SEC);
- if (cracking) {
+ if (cracking || known_target_key != -1) {
field_off = brute_force(); // switch off field with next SendCommand and then finish
- cracking = false;
}
thread_check_done = true;
if (maximum_states == 0) return false; // prevent keyspace reduction error (2^-inf)
PrintAndLog("Brute force phase starting.");
- time_t start, end;
- time(&start);
+
+// clock_t time1 = clock();
+ time_t start1, end1;
+ time(&start1);
keys_found = 0;
foundkey = 0;
pthread_join(threads[i], 0);
}
- time(&end);
- unsigned long elapsed_time = difftime(end, start);
+ time(&end1);
+ unsigned long elapsed_time = difftime(end1, start1);
+ // time1 = clock() - time1;
+ // if ( time1 > 0 ) {
+ // ((float)time1)/CLOCKS_PER_SEC
+ // }
if (keys_found && TestIfKeyExists(foundkey)) {
- PrintAndLog("Success! Tested %"PRIu32" states, found %u keys after %u seconds", total_states_tested, keys_found, elapsed_time);
+ printf("ICE: %u | %u | %u \n", start1, end1, elapsed_time);
+ PrintAndLog("Success! Found %u keys after %u seconds", keys_found, elapsed_time);
PrintAndLog("\nFound key: %012"PRIx64"\n", foundkey);
ret = true;
} else {
fstats = NULL;
} else {
init_nonce_memory();
- if (nonce_file_read) { // use pre-acquired data from file nonces.bin
+ if (nonce_file_read) { // use pre-acquired data from file nonces.bin
if (read_nonce_file() != 0) {
return 3;
}
Check_for_FilterFlipProperties();
num_good_first_bytes = MIN(estimate_second_byte_sum(), GOOD_BYTES_REQUIRED);
- } else { // acquire nonces.
+ PrintAndLog("Number of first bytes with confidence > %2.1f%%: %d", CONFIDENCE_THRESHOLD*100.0, num_good_first_bytes);
+
+ clock_t time1 = clock();
+ bool cracking = generate_candidates(first_byte_Sum, nonces[best_first_bytes[0]].Sum8_guess);
+ time1 = clock() - time1;
+ if (time1 > 0)
+ PrintAndLog("Time for generating key candidates list: %1.0f seconds", ((float)time1)/CLOCKS_PER_SEC);
+
+ if (cracking)
+ brute_force();
+ } else { // acquire nonces.
uint16_t is_OK = acquire_nonces(blockNo, keyType, key, trgBlockNo, trgKeyType, nonce_file_write, slow);
if (is_OK != 0) {
return is_OK;
// best_first_bytes[8],
// best_first_bytes[9] );
- //PrintAndLog("Number of first bytes with confidence > %2.1f%%: %d", CONFIDENCE_THRESHOLD*100.0, num_good_first_bytes);
-
- //clock_t time1 = clock();
- //generate_candidates(first_byte_Sum, nonces[best_first_bytes[0]].Sum8_guess);
- //time1 = clock() - time1;
- //if ( time1 > 0 )
- //PrintAndLog("Time for generating key candidates list: %1.0f seconds", ((float)time1)/CLOCKS_PER_SEC);
-
- //brute_force();
-
free_nonces_memory();
free_statelist_cache();
free_candidates_memory(candidates);
candidates = NULL;
}
return 0;
-}
-
-
+}
\ No newline at end of file