]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhfmf.c
ADD: J-Run's 2nd phase tool mf_key_brute ref: https://github.com/J-Run/mf_key_brute...
[proxmark3-svn] / client / cmdhfmf.c
index ec542eb3f00800865cdca8aaa1a60aeedb1bf910..d6e394442c4c9cfcb5a95c42d5ae71f7f023d276 100644 (file)
@@ -125,6 +125,21 @@ int usage_hf14_chk(void){
        PrintAndLog("      hf mf chk *1 ? d                        -- target all blocks, all keys, 1K, write to file");\r
        return 0;\r
 }\r
+int usage_hf14_keybrute(void){\r
+       PrintAndLog("J_Run's 2nd phase of multiple sector nested authentication key recovery");\r
+       PrintAndLog("You have a known 4 last bytes of a key recovered with mf_nonce_brute tool.");\r
+       PrintAndLog("First 2 bytes of key will be bruteforced");\r
+       PrintAndLog("");\r
+       PrintAndLog("Usage:  hf mf keybrute [h] <block number> <A|B> <key>");\r
+       PrintAndLog("options:");\r
+       PrintAndLog("      h               this help");\r
+       PrintAndLog("      <block number>  target block number");\r
+       PrintAndLog("      <A|B>           target key type");\r
+       PrintAndLog("      <key>           candidate key from mf_nonce_brute tool");\r
+       PrintAndLog("samples:");\r
+       PrintAndLog("           hf mf keybrute 1 A 000011223344");\r
+       return 0;\r
+}\r
 \r
 int CmdHF14AMifare(const char *Cmd) {\r
        uint32_t uid = 0;\r
@@ -1639,6 +1654,43 @@ int CmdHF14AMfDbg(const char *Cmd) {
        return 0;\r
 }\r
 \r
+int CmdHF14AMfKeyBrute(const char *Cmd) {\r
+\r
+       uint8_t blockNo = 0, keytype = 0;\r
+       uint8_t key[6] = {0, 0, 0, 0, 0, 0};\r
+       uint64_t foundkey = 0;\r
+       \r
+       char cmdp = param_getchar(Cmd, 0);      \r
+       if ( cmdp == 'H' || cmdp == 'h') return usage_hf14_keybrute();\r
+       \r
+       // block number\r
+       blockNo = param_get8(Cmd, 0);    \r
+       \r
+       // keytype\r
+       cmdp = param_getchar(Cmd, 1);\r
+       if (cmdp == 'B' || cmdp == 'b') keytype = 1;\r
+       \r
+       // key\r
+       if (param_gethex(Cmd, 2, key, 12)) return usage_hf14_keybrute();\r
+       \r
+       clock_t t1 = clock();\r
+       time_t start, end;\r
+       time(&start);\r
+       \r
+       if (mfKeyBrute( blockNo, keytype, key, &foundkey))\r
+               PrintAndLog("Found valid key: %012"llx" \n", foundkey);\r
+       else\r
+               PrintAndLog("Key not found");\r
+       \r
+       t1 = clock() - t1;\r
+       time(&end);\r
+       unsigned long elapsed_time = difftime(end, start);      \r
+       if ( t1 > 0 )\r
+               PrintAndLog("\nTime in keybrute: %.0f ticks %u seconds\n", (float)t1, elapsed_time);\r
+       \r
+       return 0;       \r
+}\r
+\r
 void printKeyTable( uint8_t sectorscnt, sector *e_sector ){\r
        PrintAndLog("|---|----------------|---|----------------|---|");\r
        PrintAndLog("|sec|key A           |res|key B           |res|");\r
@@ -2383,6 +2435,7 @@ static command_t CommandTable[] = {
        {"mifare",              CmdHF14AMifare,                 0, "Read parity error messages."},\r
        {"nested",              CmdHF14AMfNested,               0, "Test nested authentication"},\r
        {"hardnested",  CmdHF14AMfNestedHard,   0, "Nested attack for hardened Mifare cards"},\r
+       {"keybrute",    CmdHF14AMfKeyBrute,             0, "J_Run's 2nd phase of multiple sector nested authentication key recovery"},\r
        {"sniff",               CmdHF14AMfSniff,                0, "Sniff card-reader communication"},\r
        {"sim",                 CmdHF14AMf1kSim,                0, "Simulate MIFARE card"},\r
        {"eclr",                CmdHF14AMfEClear,               0, "Clear simulator memory block"},\r
Impressum, Datenschutz