]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhfmf.c
CHG: rename the HF MFU * commands.
[proxmark3-svn] / client / cmdhfmf.c
index b7f336db381248a9874888e52f6bd9b2ba4f49ef..6939f653cc7469bd529f70926ecbcfb801eba9c1 100644 (file)
@@ -34,7 +34,7 @@ start:
     SendCommand(&c);\r
        \r
        //flush queue\r
     SendCommand(&c);\r
        \r
        //flush queue\r
-       while (ukbhit())        getchar();\r
+       while (ukbhit()) getchar();\r
 \r
        // wait cycle\r
        while (true) {\r
 \r
        // wait cycle\r
        while (true) {\r
@@ -66,19 +66,19 @@ start:
        if (isOK != 1) return 1;\r
        \r
        // execute original function from util nonce2key\r
        if (isOK != 1) return 1;\r
        \r
        // execute original function from util nonce2key\r
-       if (nonce2key(uid, nt, nr, par_list, ks_list, &r_key))\r
-       {\r
+       if (nonce2key(uid, nt, nr, par_list, ks_list, &r_key)) {\r
                isOK = 2;\r
                PrintAndLog("Key not found (lfsr_common_prefix list is null). Nt=%08x", nt);    \r
        } else {\r
                printf("------------------------------------------------------------------\n");\r
                isOK = 2;\r
                PrintAndLog("Key not found (lfsr_common_prefix list is null). Nt=%08x", nt);    \r
        } else {\r
                printf("------------------------------------------------------------------\n");\r
-               PrintAndLog("Key found:%012"llx" \n", r_key);\r
+               PrintAndLog("Key found :%012"llx" \n", r_key);\r
 \r
                num_to_bytes(r_key, 6, keyBlock);\r
                isOK = mfCheckKeys(0, 0, 1, keyBlock, &r_key);\r
        }\r
 \r
                num_to_bytes(r_key, 6, keyBlock);\r
                isOK = mfCheckKeys(0, 0, 1, keyBlock, &r_key);\r
        }\r
+       \r
        if (!isOK) \r
        if (!isOK) \r
-               PrintAndLog("Found valid key:%012"llx, r_key);\r
+               PrintAndLog("Found valid key :%012"llx, r_key);\r
        else\r
        {\r
                if (isOK != 2) PrintAndLog("Found invalid key. ");      \r
        else\r
        {\r
                if (isOK != 2) PrintAndLog("Found invalid key. ");      \r
@@ -87,6 +87,7 @@ start:
                goto start;\r
        }\r
        \r
                goto start;\r
        }\r
        \r
+       PrintAndLog("");\r
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
@@ -123,10 +124,10 @@ int CmdHF14AMfWrBl(const char *Cmd)
        PrintAndLog("--block no:%d, key type:%c, key:%s", blockNo, keyType?'B':'A', sprint_hex(key, 6));\r
        PrintAndLog("--data: %s", sprint_hex(bldata, 16));\r
        \r
        PrintAndLog("--block no:%d, key type:%c, key:%s", blockNo, keyType?'B':'A', sprint_hex(key, 6));\r
        PrintAndLog("--data: %s", sprint_hex(bldata, 16));\r
        \r
-  UsbCommand c = {CMD_MIFARE_WRITEBL, {blockNo, keyType, 0}};\r
+       UsbCommand c = {CMD_MIFARE_WRITEBL, {blockNo, keyType, 0}};\r
        memcpy(c.d.asBytes, key, 6);\r
        memcpy(c.d.asBytes + 10, bldata, 16);\r
        memcpy(c.d.asBytes, key, 6);\r
        memcpy(c.d.asBytes + 10, bldata, 16);\r
-  SendCommand(&c);\r
+       SendCommand(&c);\r
 \r
        UsbCommand resp;\r
        if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
 \r
        UsbCommand resp;\r
        if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
@@ -139,117 +140,6 @@ int CmdHF14AMfWrBl(const char *Cmd)
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
-/*  dublett finns i CMDHFMFU.C \r
-int CmdHF14AMfUWrBl(const char *Cmd)\r
-{\r
-       uint8_t blockNo = 0;\r
-       bool chinese_card=0;\r
-       uint8_t bldata[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};\r
-       UsbCommand resp;\r
-       \r
-       if (strlen(Cmd)<3) {\r
-               PrintAndLog("Usage:  hf mf uwrbl    <block number> <block data (8 hex symbols)> <w>");\r
-               PrintAndLog("        sample: hf mf uwrbl 0 01020304");\r
-               return 0;\r
-       }      \r
-\r
-       blockNo = param_get8(Cmd, 0);\r
-       if (param_gethex(Cmd, 1, bldata, 8)) {\r
-               PrintAndLog("Block data must include 8 HEX symbols");\r
-               return 1;\r
-       }\r
-       \r
-       if (strchr(Cmd,'w') != 0) {\r
-         chinese_card=1;\r
-       }\r
-       \r
-       switch(blockNo){\r
-               case 0:\r
-                       if (!chinese_card){\r
-                               PrintAndLog("Access Denied");\r
-                       }else{\r
-                               PrintAndLog("--specialblock no:%d", blockNo);\r
-                               PrintAndLog("--data: %s", sprint_hex(bldata, 4));\r
-                               UsbCommand d = {CMD_MIFAREU_WRITEBL, {blockNo}};\r
-                               memcpy(d.d.asBytes,bldata, 4);\r
-                               SendCommand(&d);\r
-\r
-                               if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
-                                       uint8_t isOK  = resp.arg[0] & 0xff;\r
-                                       PrintAndLog("isOk:%02x", isOK);\r
-                               } else {\r
-                                       PrintAndLog("Command execute timeout");\r
-                             }\r
-                       }\r
-                       break;\r
-               case 1:\r
-                         if (!chinese_card){\r
-                               PrintAndLog("Access Denied");\r
-                         }else{\r
-                               PrintAndLog("--specialblock no:%d", blockNo);\r
-                               PrintAndLog("--data: %s", sprint_hex(bldata, 4));\r
-                               UsbCommand d = {CMD_MIFAREU_WRITEBL, {blockNo}};\r
-                               memcpy(d.d.asBytes,bldata, 4);\r
-                               SendCommand(&d);\r
-\r
-                               if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
-                               uint8_t isOK  = resp.arg[0] & 0xff;\r
-                               PrintAndLog("isOk:%02x", isOK);\r
-                               } else {\r
-                                       PrintAndLog("Command execute timeout");\r
-                               }\r
-                       }\r
-                       break;\r
-               case 2:\r
-                       if (!chinese_card){\r
-                               PrintAndLog("Access Denied");\r
-                       }else{\r
-                               PrintAndLog("--specialblock no:%d", blockNo);\r
-                               PrintAndLog("--data: %s", sprint_hex(bldata, 4));\r
-                               UsbCommand c = {CMD_MIFAREU_WRITEBL, {blockNo}};\r
-                               memcpy(c.d.asBytes, bldata, 4);\r
-                               SendCommand(&c);\r
-\r
-                               if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
-                                       uint8_t isOK  = resp.arg[0] & 0xff;\r
-                                       PrintAndLog("isOk:%02x", isOK);\r
-                               } else {\r
-                                       PrintAndLog("Command execute timeout");\r
-                               }\r
-                       }\r
-                       break;\r
-               case 3:\r
-                       PrintAndLog("--specialblock no:%d", blockNo);\r
-                       PrintAndLog("--data: %s", sprint_hex(bldata, 4));\r
-                       UsbCommand d = {CMD_MIFAREU_WRITEBL, {blockNo}};\r
-                       memcpy(d.d.asBytes,bldata, 4);\r
-                       SendCommand(&d);\r
-\r
-                       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
-                               uint8_t isOK  = resp.arg[0] & 0xff;\r
-                               PrintAndLog("isOk:%02x", isOK);\r
-                       } else {\r
-                               PrintAndLog("Command execute timeout");\r
-                       }\r
-                       break;\r
-               default: \r
-                       PrintAndLog("--block no:%d", blockNo);\r
-                       PrintAndLog("--data: %s", sprint_hex(bldata, 4));               \r
-                       UsbCommand e = {CMD_MIFAREU_WRITEBL, {blockNo}};\r
-                       memcpy(e.d.asBytes,bldata, 4);\r
-                       SendCommand(&e);\r
-\r
-                       if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
-                               uint8_t isOK  = resp.arg[0] & 0xff;\r
-                               PrintAndLog("isOk:%02x", isOK);\r
-                       } else {\r
-                               PrintAndLog("Command execute timeout");\r
-                     }\r
-                     break;\r
-       }\r
-       return 0;\r
-}\r
-*/\r
 int CmdHF14AMfRdBl(const char *Cmd)\r
 {\r
        uint8_t blockNo = 0;\r
 int CmdHF14AMfRdBl(const char *Cmd)\r
 {\r
        uint8_t blockNo = 0;\r
@@ -278,9 +168,9 @@ int CmdHF14AMfRdBl(const char *Cmd)
        }\r
        PrintAndLog("--block no:%d, key type:%c, key:%s ", blockNo, keyType?'B':'A', sprint_hex(key, 6));\r
        \r
        }\r
        PrintAndLog("--block no:%d, key type:%c, key:%s ", blockNo, keyType?'B':'A', sprint_hex(key, 6));\r
        \r
-  UsbCommand c = {CMD_MIFARE_READBL, {blockNo, keyType, 0}};\r
+       UsbCommand c = {CMD_MIFARE_READBL, {blockNo, keyType, 0}};\r
        memcpy(c.d.asBytes, key, 6);\r
        memcpy(c.d.asBytes, key, 6);\r
-  SendCommand(&c);\r
+       SendCommand(&c);\r
 \r
        UsbCommand resp;\r
        if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
 \r
        UsbCommand resp;\r
        if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
@@ -298,133 +188,6 @@ int CmdHF14AMfRdBl(const char *Cmd)
   return 0;\r
 }\r
 \r
   return 0;\r
 }\r
 \r
-/* dublett finns i CMDHFMFU.C \r
-int CmdHF14AMfURdBl(const char *Cmd)\r
-{\r
-       uint8_t blockNo = 0;\r
-\r
-    if (strlen(Cmd)<1) {\r
-               PrintAndLog("Usage:  hf mf urdbl    <block number>");\r
-               PrintAndLog("        sample: hf mf urdbl 0");\r
-        return 0;\r
-    }       \r
-        \r
-    blockNo = param_get8(Cmd, 0);\r
-    PrintAndLog("--block no:%d", blockNo);\r
-        \r
-       UsbCommand c = {CMD_MIFAREU_READBL, {blockNo}};\r
-       SendCommand(&c);\r
-\r
-    UsbCommand resp;\r
-    if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
-               uint8_t isOK = resp.arg[0] & 0xff;\r
-        uint8_t *data = resp.d.asBytes;\r
-\r
-        if (isOK)\r
-            PrintAndLog("isOk:%02x data:%s", isOK, sprint_hex(data, 4));\r
-        else\r
-            PrintAndLog("isOk:%02x", isOK);\r
-    } else {\r
-        PrintAndLog("Command execute timeout");\r
-    }\r
-\r
-       return 0;\r
-}\r
-*/\r
-\r
-/* dublett finns i CMDHFMFU.C \r
-int CmdHF14AMfURdCard(const char *Cmd)\r
-{\r
-    int i;\r
-    uint8_t sectorNo = 0;\r
-       uint8_t *lockbytes_t=NULL;\r
-       uint8_t lockbytes[2]={0,0};\r
-       bool bit[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};\r
-        \r
-    uint8_t isOK  = 0;\r
-    uint8_t * data  = NULL;\r
-\r
-    if (sectorNo > 15) {\r
-        PrintAndLog("Sector number must be less than 16");\r
-        return 1;\r
-    }\r
-    PrintAndLog("Attempting to Read Ultralight... ");\r
-        \r
-       UsbCommand c = {CMD_MIFAREU_READCARD, {sectorNo}};\r
-       SendCommand(&c);\r
-\r
-    UsbCommand resp;\r
-    if (WaitForResponseTimeout(CMD_ACK,&resp,1500)) {\r
-        isOK = resp.arg[0] & 0xff;\r
-        data = resp.d.asBytes;\r
-\r
-        PrintAndLog("isOk:%02x", isOK);\r
-        if (isOK) \r
-            for (i = 0; i < 16; i++) {\r
-                       switch(i){\r
-                               case 2:\r
-                                       //process lock bytes\r
-                                       lockbytes_t=data+(i*4);\r
-                                       lockbytes[0]=lockbytes_t[2];\r
-                                       lockbytes[1]=lockbytes_t[3];\r
-                                       for(int j=0; j<16; j++){\r
-                                               bit[j]=lockbytes[j/8] & ( 1 <<(7-j%8));\r
-                                       }\r
-                                       //PrintAndLog("LB %02x %02x", lockbytes[0],lockbytes[1]);\r
-                                       //PrintAndLog("LB2b %02x %02x %02x %02x %02x %02x %02x %02x",bit[8],bit[9],bit[10],bit[11],bit[12],bit[13],bit[14],bit[15]);            \r
-                                       PrintAndLog("Block %3d:%s ", i,sprint_hex(data + i * 4, 4));\r
-                                       break;\r
-                               case 3: \r
-                                       PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[4]);\r
-                                       break;\r
-                               case 4:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[3]);\r
-                                       break;\r
-                               case 5:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[2]);\r
-                                       break;\r
-                               case 6:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[1]);\r
-                                       break;\r
-                               case 7:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[0]);\r
-                                       break;\r
-                               case 8:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[15]);\r
-                                       break;\r
-                               case 9:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[14]);\r
-                                       break;\r
-                               case 10:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[13]);\r
-                                       break;\r
-                               case 11:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[12]);\r
-                                       break;\r
-                               case 12:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[11]);\r
-                                       break;\r
-                               case 13:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[10]);\r
-                                       break;\r
-                               case 14:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[9]);\r
-                                       break;\r
-                               case 15:\r
-                    PrintAndLog("Block %3d:%s [%d]", i,sprint_hex(data + i * 4, 4),bit[8]);\r
-                                       break;\r
-                               default:\r
-                                       PrintAndLog("Block %3d:%s ", i,sprint_hex(data + i * 4, 4));\r
-                                       break;\r
-                               }\r
-                        }\r
-        } else {\r
-                PrintAndLog("Command execute timeout");\r
-        }\r
-  return 0;\r
-}\r
-*/\r
-\r
 int CmdHF14AMfRdSc(const char *Cmd)\r
 {\r
        int i;\r
 int CmdHF14AMfRdSc(const char *Cmd)\r
 {\r
        int i;\r
@@ -482,7 +245,6 @@ int CmdHF14AMfRdSc(const char *Cmd)
   return 0;\r
 }\r
 \r
   return 0;\r
 }\r
 \r
-\r
 uint8_t FirstBlockOfSector(uint8_t sectorNo)\r
 {\r
        if (sectorNo < 32) {\r
 uint8_t FirstBlockOfSector(uint8_t sectorNo)\r
 {\r
        if (sectorNo < 32) {\r
@@ -492,7 +254,6 @@ uint8_t FirstBlockOfSector(uint8_t sectorNo)
        }\r
 }\r
 \r
        }\r
 }\r
 \r
-\r
 uint8_t NumBlocksPerSector(uint8_t sectorNo)\r
 {\r
        if (sectorNo < 32) {\r
 uint8_t NumBlocksPerSector(uint8_t sectorNo)\r
 {\r
        if (sectorNo < 32) {\r
@@ -502,7 +263,6 @@ uint8_t NumBlocksPerSector(uint8_t sectorNo)
        }\r
 }\r
 \r
        }\r
 }\r
 \r
-\r
 int CmdHF14AMfDump(const char *Cmd)\r
 {\r
        uint8_t sectorNo, blockNo;\r
 int CmdHF14AMfDump(const char *Cmd)\r
 {\r
        uint8_t sectorNo, blockNo;\r
@@ -677,7 +437,6 @@ int CmdHF14AMfDump(const char *Cmd)
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
-\r
 int CmdHF14AMfRestore(const char *Cmd)\r
 {\r
        uint8_t sectorNo,blockNo;\r
 int CmdHF14AMfRestore(const char *Cmd)\r
 {\r
        uint8_t sectorNo,blockNo;\r
@@ -744,6 +503,7 @@ int CmdHF14AMfRestore(const char *Cmd)
                        \r
                        if (fread(bldata, 1, 16, fdump) == 0) {\r
                                PrintAndLog("File reading error (dumpdata.bin).");\r
                        \r
                        if (fread(bldata, 1, 16, fdump) == 0) {\r
                                PrintAndLog("File reading error (dumpdata.bin).");\r
+                               fclose(fdump);\r
                                return 2;\r
                        }\r
                                        \r
                                return 2;\r
                        }\r
                                        \r
@@ -778,11 +538,9 @@ int CmdHF14AMfRestore(const char *Cmd)
        }\r
        \r
        fclose(fdump);\r
        }\r
        \r
        fclose(fdump);\r
-\r
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
-\r
 int CmdHF14AMfNested(const char *Cmd)\r
 {\r
        int i, j, res, iterations;\r
 int CmdHF14AMfNested(const char *Cmd)\r
 {\r
        int i, j, res, iterations;\r
@@ -1028,7 +786,6 @@ int CmdHF14AMfNested(const char *Cmd)
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
-\r
 int CmdHF14AMfChk(const char *Cmd)\r
 {\r
        if (strlen(Cmd)<3) {\r
 int CmdHF14AMfChk(const char *Cmd)\r
 {\r
        if (strlen(Cmd)<3) {\r
@@ -1256,11 +1013,10 @@ int CmdHF14AMfChk(const char *Cmd)
        }\r
 \r
        free(keyBlock);\r
        }\r
 \r
        free(keyBlock);\r
-\r
+       PrintAndLog("");\r
   return 0;\r
 }\r
 \r
   return 0;\r
 }\r
 \r
-\r
 int CmdHF14AMf1kSim(const char *Cmd)\r
 {\r
        uint8_t uid[7] = {0, 0, 0, 0, 0, 0, 0};\r
 int CmdHF14AMf1kSim(const char *Cmd)\r
 {\r
        uint8_t uid[7] = {0, 0, 0, 0, 0, 0, 0};\r
@@ -1326,7 +1082,6 @@ int CmdHF14AMf1kSim(const char *Cmd)
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
-\r
 int CmdHF14AMfDbg(const char *Cmd)\r
 {\r
        int dbgMode = param_get32ex(Cmd, 0, 0, 10);\r
 int CmdHF14AMfDbg(const char *Cmd)\r
 {\r
        int dbgMode = param_get32ex(Cmd, 0, 0, 10);\r
@@ -1374,7 +1129,6 @@ int CmdHF14AMfEGet(const char *Cmd)
   return 0;\r
 }\r
 \r
   return 0;\r
 }\r
 \r
-\r
 int CmdHF14AMfEClear(const char *Cmd)\r
 {\r
        if (param_getchar(Cmd, 0) == 'h') {\r
 int CmdHF14AMfEClear(const char *Cmd)\r
 {\r
        if (param_getchar(Cmd, 0) == 'h') {\r
@@ -1469,9 +1223,6 @@ int CmdHF14AMfELoad(const char *Cmd)
                return 1;\r
        }\r
        \r
                return 1;\r
        }\r
        \r
-//             for (sectorNo = 0; sectorNo < numSectors; sectorNo++) {\r
-//             for(blockNo = 0; blockNo < NumBlocksPerSector(sectorNo); blockNo++) {\r
-       \r
        blockNum = 0;\r
        while(!feof(f)){\r
                memset(buf, 0, sizeof(buf));\r
        blockNum = 0;\r
        while(!feof(f)){\r
                memset(buf, 0, sizeof(buf));\r
@@ -1489,6 +1240,7 @@ int CmdHF14AMfELoad(const char *Cmd)
                        if(strlen(buf) && feof(f))\r
                                break;\r
                        PrintAndLog("File content error. Block data must include 32 HEX symbols");\r
                        if(strlen(buf) && feof(f))\r
                                break;\r
                        PrintAndLog("File content error. Block data must include 32 HEX symbols");\r
+                       fclose(f);\r
                        return 2;\r
                }\r
                \r
                        return 2;\r
                }\r
                \r
@@ -1498,6 +1250,7 @@ int CmdHF14AMfELoad(const char *Cmd)
                \r
                if (mfEmlSetMem(buf8, blockNum, 1)) {\r
                        PrintAndLog("Cant set emul block: %3d", blockNum);\r
                \r
                if (mfEmlSetMem(buf8, blockNum, 1)) {\r
                        PrintAndLog("Cant set emul block: %3d", blockNum);\r
+                       fclose(f);\r
                        return 3;\r
                }\r
                blockNum++;\r
                        return 3;\r
                }\r
                blockNum++;\r
@@ -1508,7 +1261,6 @@ int CmdHF14AMfELoad(const char *Cmd)
        \r
        if ((blockNum != numBlocks)) {\r
                PrintAndLog("File content error. Got %d must be %d blocks.",blockNum, numBlocks);\r
        \r
        if ((blockNum != numBlocks)) {\r
                PrintAndLog("File content error. Got %d must be %d blocks.",blockNum, numBlocks);\r
-               fclose(f);\r
                return 4;\r
        }\r
        PrintAndLog("Loaded %d blocks from file: %s", blockNum, filename);\r
                return 4;\r
        }\r
        PrintAndLog("Loaded %d blocks from file: %s", blockNum, filename);\r
@@ -1706,11 +1458,12 @@ int CmdHF14AMfCSetUID(const char *Cmd)
 \r
        res = mfCSetUID(uid, oldUid, wipeCard);\r
        if (res) {\r
 \r
        res = mfCSetUID(uid, oldUid, wipeCard);\r
        if (res) {\r
-                       PrintAndLog("Can't set UID. error=%d", res);\r
-                       return 1;\r
-               }\r
+               PrintAndLog("Can't set UID. error=%d", res);\r
+               return 1;\r
+       }\r
        \r
        PrintAndLog("old UID:%s", sprint_hex(oldUid, 4));\r
        \r
        PrintAndLog("old UID:%s", sprint_hex(oldUid, 4));\r
+       PrintAndLog("new UID:%s", sprint_hex(uid, 4));\r
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
@@ -2003,7 +1756,7 @@ int CmdHF14AMfCSave(const char *Cmd) {
 \r
 \r
 int CmdHF14AMfSniff(const char *Cmd){\r
 \r
 \r
 int CmdHF14AMfSniff(const char *Cmd){\r
-       // params\r
+\r
        bool wantLogToFile = 0;\r
        bool wantDecrypt = 0;\r
        //bool wantSaveToEml = 0; TODO\r
        bool wantLogToFile = 0;\r
        bool wantDecrypt = 0;\r
        //bool wantSaveToEml = 0; TODO\r
@@ -2020,7 +1773,6 @@ int CmdHF14AMfSniff(const char *Cmd){
        uint8_t atqa[2];\r
        uint8_t sak;\r
        bool isTag;\r
        uint8_t atqa[2];\r
        uint8_t sak;\r
        bool isTag;\r
-       uint32_t parity;\r
        uint8_t buf[3000];\r
        uint8_t * bufPtr = buf;\r
        memset(buf, 0x00, 3000);\r
        uint8_t buf[3000];\r
        uint8_t * bufPtr = buf;\r
        memset(buf, 0x00, 3000);\r
@@ -2031,8 +1783,8 @@ int CmdHF14AMfSniff(const char *Cmd){
                PrintAndLog("    l - save encrypted sequence to logfile `uid.log`");\r
                PrintAndLog("    d - decrypt sequence and put it to log file `uid.log`");\r
                PrintAndLog(" n/a   e - decrypt sequence, collect read and write commands and save the result of the sequence to emulator memory");\r
                PrintAndLog("    l - save encrypted sequence to logfile `uid.log`");\r
                PrintAndLog("    d - decrypt sequence and put it to log file `uid.log`");\r
                PrintAndLog(" n/a   e - decrypt sequence, collect read and write commands and save the result of the sequence to emulator memory");\r
-               PrintAndLog("    r - decrypt sequence, collect read and write commands and save the result of the sequence to emulator dump file `uid.eml`");\r
-               PrintAndLog("Usage:  hf mf sniff [l][d][e][r]");\r
+               PrintAndLog("    f - decrypt sequence, collect read and write commands and save the result of the sequence to emulator dump file `uid.eml`");\r
+               PrintAndLog("Usage:  hf mf sniff [l][d][e][f]");\r
                PrintAndLog("  sample: hf mf sniff l d e");\r
                return 0;\r
        }       \r
                PrintAndLog("  sample: hf mf sniff l d e");\r
                return 0;\r
        }       \r
@@ -2087,14 +1839,19 @@ int CmdHF14AMfSniff(const char *Cmd){
                                printf(">\n");\r
                                PrintAndLog("received trace len: %d packages: %d", blockLen, pckNum);\r
                                num = 0;\r
                                printf(">\n");\r
                                PrintAndLog("received trace len: %d packages: %d", blockLen, pckNum);\r
                                num = 0;\r
-                               while (bufPtr - buf + 9 < blockLen) {\r
-                                       isTag = bufPtr[3] & 0x80 ? true:false;\r
-                                       bufPtr += 4;\r
-                                       parity = *((uint32_t *)(bufPtr));\r
-                                       bufPtr += 4;\r
-                                       len = bufPtr[0];\r
-                                       bufPtr++;\r
-                                       if ((len == 14) && (bufPtr[0] == 0xff) && (bufPtr[1] == 0xff)) {\r
+                               while (bufPtr - buf < blockLen) {\r
+                                       bufPtr += 6;\r
+                                       len = *((uint16_t *)bufPtr);\r
+\r
+                                       if(len & 0x8000) {\r
+                                               isTag = true;\r
+                                               len &= 0x7fff;\r
+                                       } else {\r
+                                               isTag = false;\r
+                                       }\r
+                                       bufPtr += 2;\r
+                                       if ((len == 14) && (bufPtr[0] == 0xff) && (bufPtr[1] == 0xff) && (bufPtr[12] == 0xff) && (bufPtr[13] == 0xff)) {\r
+                                       \r
                                                memcpy(uid, bufPtr + 2, 7);\r
                                                memcpy(atqa, bufPtr + 2 + 7, 2);\r
                                                uid_len = (atqa[0] & 0xC0) == 0x40 ? 7 : 4;\r
                                                memcpy(uid, bufPtr + 2, 7);\r
                                                memcpy(atqa, bufPtr + 2 + 7, 2);\r
                                                uid_len = (atqa[0] & 0xC0) == 0x40 ? 7 : 4;\r
@@ -2116,9 +1873,10 @@ int CmdHF14AMfSniff(const char *Cmd){
                                                if (wantLogToFile) \r
                                                        AddLogHex(logHexFileName, isTag ? "TAG: ":"RDR: ", bufPtr, len);\r
                                                if (wantDecrypt) \r
                                                if (wantLogToFile) \r
                                                        AddLogHex(logHexFileName, isTag ? "TAG: ":"RDR: ", bufPtr, len);\r
                                                if (wantDecrypt) \r
-                                                       mfTraceDecode(bufPtr, len, parity, wantSaveToEmlFile);\r
+                                                       mfTraceDecode(bufPtr, len, wantSaveToEmlFile);\r
                                        }\r
                                        bufPtr += len;\r
                                        }\r
                                        bufPtr += len;\r
+                                       bufPtr += ((len-1)/8+1); // ignore parity\r
                                        num++;\r
                                }\r
                        }\r
                                        num++;\r
                                }\r
                        }\r
@@ -2220,17 +1978,11 @@ int GetCardSize()
        return -1;\r
 }\r
 \r
        return -1;\r
 }\r
 \r
-\r
-\r
-\r
 static command_t CommandTable[] =\r
 {\r
   {"help",             CmdHelp,                                1, "This help"},\r
   {"dbg",              CmdHF14AMfDbg,                  0, "Set default debug mode"},\r
   {"rdbl",             CmdHF14AMfRdBl,                 0, "Read MIFARE classic block"},\r
 static command_t CommandTable[] =\r
 {\r
   {"help",             CmdHelp,                                1, "This help"},\r
   {"dbg",              CmdHF14AMfDbg,                  0, "Set default debug mode"},\r
   {"rdbl",             CmdHF14AMfRdBl,                 0, "Read MIFARE classic block"},\r
-  //{"urdbl",              CmdHF14AMfURdBl,                 0, "Read MIFARE Ultralight block"},\r
-  //{"urdcard",           CmdHF14AMfURdCard,               0,"Read MIFARE Ultralight Card"},\r
-  //{"uwrbl",          CmdHF14AMfUWrBl,                0,"Write MIFARE Ultralight block"},\r
   {"rdsc",             CmdHF14AMfRdSc,                 0, "Read MIFARE classic sector"},\r
   {"dump",             CmdHF14AMfDump,                 0, "Dump MIFARE classic tag to binary file"},\r
   {"restore",  CmdHF14AMfRestore,              0, "Restore MIFARE classic binary file to BLANK tag"},\r
   {"rdsc",             CmdHF14AMfRdSc,                 0, "Read MIFARE classic sector"},\r
   {"dump",             CmdHF14AMfDump,                 0, "Dump MIFARE classic tag to binary file"},\r
   {"restore",  CmdHF14AMfRestore,              0, "Restore MIFARE classic binary file to BLANK tag"},\r
@@ -2248,9 +2000,9 @@ static command_t CommandTable[] =
   {"ecfill",   CmdHF14AMfECFill,               0, "Fill simulator memory with help of keys from simulator"},\r
   {"ekeyprn",  CmdHF14AMfEKeyPrn,              0, "Print keys from simulator memory"},\r
   {"csetuid",  CmdHF14AMfCSetUID,              0, "Set UID for magic Chinese card"},\r
   {"ecfill",   CmdHF14AMfECFill,               0, "Fill simulator memory with help of keys from simulator"},\r
   {"ekeyprn",  CmdHF14AMfEKeyPrn,              0, "Print keys from simulator memory"},\r
   {"csetuid",  CmdHF14AMfCSetUID,              0, "Set UID for magic Chinese card"},\r
-  {"csetblk",  CmdHF14AMfCSetBlk,              0, "Write block into magic Chinese card"},\r
-  {"cgetblk",  CmdHF14AMfCGetBlk,              0, "Read block from magic Chinese card"},\r
-  {"cgetsc",   CmdHF14AMfCGetSc,               0, "Read sector from magic Chinese card"},\r
+  {"csetblk",  CmdHF14AMfCSetBlk,              0, "Write block - Magic Chinese card"},\r
+  {"cgetblk",  CmdHF14AMfCGetBlk,              0, "Read block - Magic Chinese card"},\r
+  {"cgetsc",   CmdHF14AMfCGetSc,               0, "Read sector - Magic Chinese card"},\r
   {"cload",            CmdHF14AMfCLoad,                0, "Load dump into magic Chinese card"},\r
   {"csave",            CmdHF14AMfCSave,                0, "Save dump from magic Chinese card into file or emulator"},\r
   {NULL, NULL, 0, NULL}\r
   {"cload",            CmdHF14AMfCLoad,                0, "Load dump into magic Chinese card"},\r
   {"csave",            CmdHF14AMfCSave,                0, "Save dump from magic Chinese card into file or emulator"},\r
   {NULL, NULL, 0, NULL}\r
Impressum, Datenschutz