X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/10403a6a3005f81839603dcb415ee352f939c06b..d1e197e9ec44affdf3ad9ef0ea6a221d0c30aa6d:/client/loclass/elite_crack.c diff --git a/client/loclass/elite_crack.c b/client/loclass/elite_crack.c index 89eac064..29b7f04d 100644 --- a/client/loclass/elite_crack.c +++ b/client/loclass/elite_crack.c @@ -71,7 +71,6 @@ */ void permutekey(uint8_t key[8], uint8_t dest[8]) { - int i; for(i = 0 ; i < 8 ; i++) { @@ -84,7 +83,6 @@ void permutekey(uint8_t key[8], uint8_t dest[8]) (((key[1] & (0x80 >> i)) >> (7-i)) << 1) | (((key[0] & (0x80 >> i)) >> (7-i)) << 0); } - return; } /** @@ -394,7 +392,7 @@ int bruteforceItem(dumpdata item, uint16_t keytable[]) //Diversify diversifyKey(item.csn, key_sel_p, div_key); //Calc mac - doMAC(item.cc_nr,12, div_key,calculated_MAC); + doMAC(item.cc_nr, div_key,calculated_MAC); if(memcmp(calculated_MAC, item.mac, 4) == 0) { @@ -522,8 +520,8 @@ int bruteforceDump(uint8_t dump[], size_t dumpsize, uint16_t keytable[]) errors += bruteforceItem(*attack, keytable); } free(attack); - clock_t t2 = clock(); - float diff = (((float)t2 - (float)t1) / CLOCKS_PER_SEC ); + t1 = clock() - t1; + float diff = ((float)t1 / CLOCKS_PER_SEC ); prnlog("\nPerformed full crack in %f seconds",diff); // Pick out the first 16 bytes of the keytable. @@ -562,15 +560,28 @@ int bruteforceFile(const char *filename, uint16_t keytable[]) long fsize = ftell(f); fseek(f, 0, SEEK_SET); + if (fsize < 0) { + prnlog("Error, when getting filesize"); + if (f) { + fclose(f); + f = NULL; + } + return 1; + } + uint8_t *dump = malloc(fsize); size_t bytes_read = fread(dump, 1, fsize, f); - fclose(f); - if (bytes_read < fsize) - { + if (f) { + fclose(f); + f = NULL; + } + if (bytes_read < fsize) { prnlog("Error, could only read %d bytes (should be %d)",bytes_read, fsize ); } - return bruteforceDump(dump,fsize,keytable); + uint8_t res = bruteforceDump(dump,fsize,keytable); + free(dump); + return res; } /** * @@ -618,7 +629,7 @@ int _testBruteforce() //Test a few variants if(fileExists("iclass_dump.bin")) { - errors |= bruteforceFile("iclass_dump.bin",keytable); + errors |= bruteforceFile("iclass_dump.bin",keytable); }else if(fileExists("loclass/iclass_dump.bin")){ errors |= bruteforceFile("loclass/iclass_dump.bin",keytable); }else if(fileExists("client/loclass/iclass_dump.bin")){ @@ -659,6 +670,21 @@ int _test_iclass_key_permutation() prnlog("[+] Iclass key permutation OK!"); return 0; } +int _testHash1() +{ + uint8_t csn[8]= {0x01,0x02,0x03,0x04,0xF7,0xFF,0x12,0xE0}; + uint8_t k[8] = {0}; + hash1(csn, k); + uint8_t expected[8] = {0x7E,0x72,0x2F,0x40,0x2D,0x02,0x51,0x42}; + if(memcmp(k,expected,8) != 0) + { + prnlog("Error with hash1!"); + printarr("calculated", k, 8); + printarr("expected", expected, 8); + return 1; + } + return 0; +} int testElite() { @@ -691,11 +717,13 @@ int testElite() prnlog("[+] Hash2 looks fine..."); } - prnlog("[+] Testing key diversification ..."); - int errors = 0 ; - errors +=_test_iclass_key_permutation(); + prnlog("[+] Testing hash1..."); + errors += _testHash1(); + prnlog("[+] Testing key diversification ..."); + errors +=_test_iclass_key_permutation(); errors += _testBruteforce(); + return errors; }