]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhfmfhard.c
Merge branch 'master' of https://github.com/iceman1001/proxmark3
[proxmark3-svn] / client / cmdhfmfhard.c
index 169b40cf74a556ec09b87444ed62d01c6f095ce2..2c1ed7c429498634e5ed7c0e5b4d4f607d699930 100644 (file)
@@ -626,7 +626,8 @@ static int read_nonce_file(void)
        }
 
        PrintAndLog("Reading nonces from file nonces.bin...");
        }
 
        PrintAndLog("Reading nonces from file nonces.bin...");
-       if (fread(read_buf, 1, 6, fnonces) == 0) {
+       size_t bytes_read = fread(read_buf, 1, 6, fnonces);
+       if ( bytes_read == 0) {
                PrintAndLog("File reading error.");
                fclose(fnonces);
                return 1;
                PrintAndLog("File reading error.");
                fclose(fnonces);
                return 1;
@@ -685,7 +686,8 @@ static void Check_for_FilterFlipProperties(void)
 
 static void simulate_MFplus_RNG(uint32_t test_cuid, uint64_t test_key, uint32_t *nt_enc, uint8_t *par_enc)
 {
 
 static void simulate_MFplus_RNG(uint32_t test_cuid, uint64_t test_key, uint32_t *nt_enc, uint8_t *par_enc)
 {
-       struct Crypto1State sim_cs;
+       struct Crypto1State sim_cs = {0, 0};
+//     sim_cs.odd = sim_cs.even = 0;
 
        // init cryptostate with key:
        for(int8_t i = 47; i > 0; i -= 2) {
 
        // init cryptostate with key:
        for(int8_t i = 47; i > 0; i -= 2) {
@@ -749,11 +751,13 @@ static void simulate_acquire_nonces()
 
        } while (num_good_first_bytes < GOOD_BYTES_REQUIRED);
        
 
        } while (num_good_first_bytes < GOOD_BYTES_REQUIRED);
        
+       time1 = clock() - time1;
+       if ( time1 > 0 ) {
        PrintAndLog("Acquired a total of %d nonces in %1.1f seconds (%0.0f nonces/minute)", 
                total_num_nonces, 
        PrintAndLog("Acquired a total of %d nonces in %1.1f seconds (%0.0f nonces/minute)", 
                total_num_nonces, 
-               ((float)clock()-time1)/CLOCKS_PER_SEC, 
-               total_num_nonces*60.0*CLOCKS_PER_SEC/((float)clock()-time1));
-
+               ((float)time1)/CLOCKS_PER_SEC, 
+               total_num_nonces * 60.0 * CLOCKS_PER_SEC/(float)time1);
+       }
        fprintf(fstats, "%d;%d;%d;%1.2f;", total_num_nonces, total_added_nonces, num_good_first_bytes, CONFIDENCE_THRESHOLD);
                
 }
        fprintf(fstats, "%d;%d;%d;%1.2f;", total_num_nonces, total_added_nonces, num_good_first_bytes, CONFIDENCE_THRESHOLD);
                
 }
@@ -856,8 +860,14 @@ static int acquire_nonces(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_
                }
 
                if (!initialize) {
                }
 
                if (!initialize) {
-                       if (!WaitForResponseTimeout(CMD_ACK, &resp, 3000)) return 1;
-                       if (resp.arg[0]) return resp.arg[0];  // error during nested_hard
+                       if (!WaitForResponseTimeout(CMD_ACK, &resp, 3000)) {
+                               fclose(fnonces);
+                               return 1;
+                       }
+                       if (resp.arg[0]) {
+                               fclose(fnonces);
+                               return resp.arg[0];  // error during nested_hard
+                       }
                }
 
                initialize = false;
                }
 
                initialize = false;
@@ -869,11 +879,14 @@ static int acquire_nonces(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_
                fclose(fnonces);
        }
        
                fclose(fnonces);
        }
        
+       time1 = clock() - time1;
+       if ( time1 > 0 ) {
        PrintAndLog("Acquired a total of %d nonces in %1.1f seconds (%0.0f nonces/minute)", 
                total_num_nonces, 
        PrintAndLog("Acquired a total of %d nonces in %1.1f seconds (%0.0f nonces/minute)", 
                total_num_nonces, 
-               ((float)clock()-time1)/CLOCKS_PER_SEC, 
-               total_num_nonces*60.0*CLOCKS_PER_SEC/((float)clock()-time1));
-       
+               ((float)time1)/CLOCKS_PER_SEC, 
+               total_num_nonces * 60.0 * CLOCKS_PER_SEC/(float)time1
+               );
+       }
        return 0;
 }
 
        return 0;
 }
 
@@ -1292,7 +1305,7 @@ static void generate_candidates(uint16_t sum_a0, uint16_t sum_a8)
                        }
                }
        }
                        }
                }
        }
-       printf("Number of possible keys with Sum(a0) = %d: %lld (2^%1.1f)\n", sum_a0, maximum_states, log(maximum_states)/log(2.0));
+       printf("Number of possible keys with Sum(a0) = %d: %"PRIu64" (2^%1.1f)\n", sum_a0, maximum_states, log(maximum_states)/log(2.0));
        
        init_statelist_cache();
        
        
        init_statelist_cache();
        
@@ -1341,7 +1354,7 @@ static void generate_candidates(uint16_t sum_a0, uint16_t sum_a8)
        for (statelist_t *sl = candidates; sl != NULL; sl = sl->next) {
                maximum_states += (uint64_t)sl->len[ODD_STATE] * sl->len[EVEN_STATE];
        }
        for (statelist_t *sl = candidates; sl != NULL; sl = sl->next) {
                maximum_states += (uint64_t)sl->len[ODD_STATE] * sl->len[EVEN_STATE];
        }
-       printf("Number of remaining possible keys: %lld (2^%1.1f)\n", maximum_states, log(maximum_states)/log(2.0));
+       printf("Number of remaining possible keys: %"PRIu64" (2^%1.1f)\n", maximum_states, log(maximum_states)/log(2.0));
        if (write_stats) {
                if (maximum_states != 0) {
                        fprintf(fstats, "%1.1f;", log(maximum_states)/log(2.0));
        if (write_stats) {
                if (maximum_states != 0) {
                        fprintf(fstats, "%1.1f;", log(maximum_states)/log(2.0));
@@ -1427,47 +1440,48 @@ int mfnestedhard(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBloc
                fclose(fstats);
        } else {
                init_nonce_memory();
                fclose(fstats);
        } else {
                init_nonce_memory();
-       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.
-               uint16_t is_OK = acquire_nonces(blockNo, keyType, key, trgBlockNo, trgKeyType, nonce_file_write, slow);
-               if (is_OK != 0) {
-                       return is_OK;
+               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.
+                       uint16_t is_OK = acquire_nonces(blockNo, keyType, key, trgBlockNo, trgKeyType, nonce_file_write, slow);
+                       if (is_OK != 0) {
+                               return is_OK;
+                       }
                }
                }
-       }
-
-       Tests();
 
 
-       PrintAndLog("");
-       PrintAndLog("Sum(a0) = %d", first_byte_Sum);
-       // PrintAndLog("Best 10 first bytes: %02x, %02x, %02x, %02x, %02x, %02x, %02x, %02x, %02x, %02x",
-               // best_first_bytes[0],
-               // best_first_bytes[1],
-               // best_first_bytes[2],
-               // best_first_bytes[3],
-               // best_first_bytes[4],
-               // best_first_bytes[5],
-               // best_first_bytes[6],
-               // best_first_bytes[7],
-               // 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);
-
-       time_t start_time = clock();
-       generate_candidates(first_byte_Sum, nonces[best_first_bytes[0]].Sum8_guess);
-       PrintAndLog("Time for generating key candidates list: %1.0f seconds", (float)(clock() - start_time)/CLOCKS_PER_SEC);
+               Tests();
+
+               PrintAndLog("");
+               PrintAndLog("Sum(a0) = %d", first_byte_Sum);
+               // PrintAndLog("Best 10 first bytes: %02x, %02x, %02x, %02x, %02x, %02x, %02x, %02x, %02x, %02x",
+                       // best_first_bytes[0],
+                       // best_first_bytes[1],
+                       // best_first_bytes[2],
+                       // best_first_bytes[3],
+                       // best_first_bytes[4],
+                       // best_first_bytes[5],
+                       // best_first_bytes[6],
+                       // best_first_bytes[7],
+                       // 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();
+               brute_force();
                free_nonces_memory();
                free_statelist_cache();
                free_candidates_memory(candidates);
                candidates = NULL;
                free_nonces_memory();
                free_statelist_cache();
                free_candidates_memory(candidates);
                candidates = NULL;
-       }
-       
+       }       
        return 0;
 }
 
        return 0;
 }
 
Impressum, Datenschutz