]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Merge branch 'master' of https://github.com/Proxmark/proxmark3
authoriceman1001 <iceman@iuse.se>
Thu, 11 Sep 2014 21:29:14 +0000 (23:29 +0200)
committericeman1001 <iceman@iuse.se>
Thu, 11 Sep 2014 21:29:14 +0000 (23:29 +0200)
Conflicts:
client/cmdhfmf.c

1  2 
client/cmdhfmf.c

index 37c6fe94bd29dd308dbc34df67c85ddfca7c3cb6,9ccfef95c3b5ff53a3b4c6fe804dcadce070dfed..0d4813dd43c88cdef82bb443bd9ebaca864f06de
@@@ -551,12 -541,8 +552,7 @@@ int CmdHF14AMfDump(const char *Cmd
                return 1;\r
        }\r
        \r
-       if ((fout = fopen("dumpdata.bin","wb")) == NULL) { \r
-               PrintAndLog("Could not create file name dumpdata.bin");\r
-               return 1;\r
-       }\r
-       \r
 -      // Read key file\r
 -\r
 +      // Read keys A from file\r
        for (sectorNo=0; sectorNo<numSectors; sectorNo++) {\r
                if (fread( keyA[sectorNo], 1, 6, fin ) == 0) {\r
                        PrintAndLog("File reading error.");\r
        PrintAndLog("|----- Dumping all blocks to file... -----|");\r
        PrintAndLog("|-----------------------------------------|");\r
        \r
-       for (sectorNo = 0; sectorNo < numSectors; sectorNo++) {\r
-               for (blockNo = 0; blockNo < NumBlocksPerSector(sectorNo); blockNo++) {\r
+       bool isOK = true;\r
+       for (sectorNo = 0; isOK && sectorNo < numSectors; sectorNo++) {\r
+               for (blockNo = 0; isOK && blockNo < NumBlocksPerSector(sectorNo); blockNo++) {\r
                        bool received = false;\r
 +                      \r
                        if (blockNo == NumBlocksPerSector(sectorNo) - 1) {              // sector trailer. At least the Access Conditions can always be read with key A. \r
                                UsbCommand c = {CMD_MIFARE_READBL, {FirstBlockOfSector(sectorNo) + blockNo, 0, 0}};\r
                                memcpy(c.d.asBytes, keyA[sectorNo], 6);\r
                                        SendCommand(&c);\r
                                        received = WaitForResponseTimeout(CMD_ACK,&resp,1500);\r
                                } else if (rights[sectorNo][data_area] == 7) {                                                                                  // no key would work\r
 -                                      PrintAndLog("Access rights do not allow reading of sector %2d block %3d", sectorNo, blockNo);\r
+                                       isOK = false;\r
 +                                              PrintAndLog("Access rights do not allow reading of sector %2d block %3d", sectorNo, blockNo);\r
                                } else {                                                                                                                                                                // key A would work\r
 -                                      UsbCommand c = {CMD_MIFARE_READBL, {FirstBlockOfSector(sectorNo) + blockNo, 0, 0}};\r
 -                                      memcpy(c.d.asBytes, keyA[sectorNo], 6);\r
 -                                      SendCommand(&c);\r
 -                                      received = WaitForResponseTimeout(CMD_ACK,&resp,1500);\r
 +                                              UsbCommand c = {CMD_MIFARE_READBL, {FirstBlockOfSector(sectorNo) + blockNo, 0, 0}};\r
 +                                              memcpy(c.d.asBytes, keyA[sectorNo], 6);\r
 +                                              SendCommand(&c);\r
 +                                              received = WaitForResponseTimeout(CMD_ACK,&resp,1500);\r
                                }\r
                        }\r
  \r
                                }\r
                        }\r
                        else {\r
-                               PrintAndLog("Command execute timeout");\r
+                               isOK = false;\r
+                               PrintAndLog("Command execute timeout when trying to read block %2d of sector %2d.", blockNo, sectorNo);\r
+                               break;\r
                        }\r
                }\r
 -\r
        }\r
 -              \r
\r
+       if (isOK) {\r
+               if ((fout = fopen("dumpdata.bin","wb")) == NULL) { \r
+                       PrintAndLog("Could not create file name dumpdata.bin");\r
+                       return 1;\r
+               }\r
+               uint16_t numblocks = FirstBlockOfSector(numSectors - 1) + NumBlocksPerSector(numSectors - 1);\r
+               fwrite(carddata, 1, 16*numblocks, fout);\r
+               fclose(fout);\r
+               PrintAndLog("Dumped %d blocks (%d bytes) to file dumpdata.bin", numblocks, 16*numblocks);\r
+       }\r
 +      \r
        fclose(fin);\r
-       fclose(fout);\r
        return 0;\r
  }\r
  \r
@@@ -1179,10 -1155,22 +1178,22 @@@ int CmdHF14AMfChk(const char *Cmd
                PrintAndLog("No key specified, trying default keys");\r
                for (;keycnt < defaultKeysSize; keycnt++)\r
                        PrintAndLog("chk default key[%2d] %02x%02x%02x%02x%02x%02x", keycnt,\r
 -                              (keyBlock + 6*keycnt)[0],(keyBlock + 6*keycnt)[1], (keyBlock + 6*keycnt)[2],\r
 -                              (keyBlock + 6*keycnt)[3], (keyBlock + 6*keycnt)[4],     (keyBlock + 6*keycnt)[5], 6);\r
 +                      (keyBlock + 6*keycnt)[0],(keyBlock + 6*keycnt)[1], (keyBlock + 6*keycnt)[2],\r
 +                      (keyBlock + 6*keycnt)[3], (keyBlock + 6*keycnt)[4],     (keyBlock + 6*keycnt)[5], 6);\r
        }\r
        \r
+       // initialize storage for found keys\r
+       bool validKey[2][40];\r
+       uint8_t foundKey[2][40][6];\r
+       for (uint16_t t = 0; t < 2; t++) {\r
+               for (uint16_t sectorNo = 0; sectorNo < SectorsCnt; sectorNo++) {\r
+                       validKey[t][sectorNo] = false;\r
+                       for (uint16_t i = 0; i < 6; i++) {\r
+                               foundKey[t][sectorNo][i] = 0xff;\r
+                       }\r
+               }\r
+       }\r
+       \r
        for ( int t = !keyType; t < 2; keyType==2?(t++):(t=2) ) {\r
                int b=blockNo;\r
                for (int i = 0; i < SectorsCnt; ++i) {\r
                        b<127?(b+=4):(b+=16);   \r
                }\r
        }\r
-       \r
-       free(keyBlock);\r
  \r
- /*\r
-       // Create dump file\r
-       if (createDumpFile) {\r
-               if ((fkeys = fopen("dumpkeys.bin","wb")) == NULL) { \r
-                       PrintAndLog("Could not create file dumpkeys.bin");\r
-                       free(e_sector);\r
-                       return 1;\r
+       if (transferToEml) {\r
+               uint8_t block[16];\r
+               for (uint16_t sectorNo = 0; sectorNo < SectorsCnt; sectorNo++) {\r
+                       if (validKey[0][sectorNo] || validKey[1][sectorNo]) {\r
+                               mfEmlGetMem(block, FirstBlockOfSector(sectorNo) + NumBlocksPerSector(sectorNo) - 1, 1);\r
+                               for (uint16_t t = 0; t < 2; t++) {\r
+                                       if (validKey[t][sectorNo]) {\r
+                                               memcpy(block + t*10, foundKey[t][sectorNo], 6);\r
 -                                      }\r
 -                              }\r
 +              }\r
-               PrintAndLog("Printing keys to binary file dumpkeys.bin...");\r
-               for(i=0; i<16; i++) {\r
-                       if (e_sector[i].foundKey[0]){\r
-                               num_to_bytes(e_sector[i].Key[0], 6, tempkey);\r
-                               fwrite ( tempkey, 1, 6, fkeys );\r
 +                      }\r
-                       else{\r
-                               fwrite ( &standart, 1, 6, fkeys );\r
+                               mfEmlSetMem(block, FirstBlockOfSector(sectorNo) + NumBlocksPerSector(sectorNo) - 1, 1);\r
                        }\r
                }\r
-               for(i=0; i<16; i++) {\r
-                       if (e_sector[i].foundKey[1]){\r
-                               num_to_bytes(e_sector[i].Key[1], 6, tempkey);\r
-                               fwrite ( tempkey, 1, 6, fkeys );\r
+               PrintAndLog("Found keys have been transferred to the emulator memory");\r
 -      }\r
 +                      }\r
-                       else{\r
-                               fwrite ( &standart, 1, 6, fkeys );\r
\r
+       if (createDumpFile) {\r
+               FILE *fkeys = fopen("dumpkeys.bin","wb");\r
+               if (fkeys == NULL) { \r
+                       PrintAndLog("Could not create file dumpkeys.bin");\r
+                       free(keyBlock);\r
+                       return 1;\r
 -              }\r
 +                      }\r
+               for (uint16_t t = 0; t < 2; t++) {\r
+                       fwrite(foundKey[t], 1, 6*SectorsCnt, fkeys);\r
                }\r
                fclose(fkeys);\r
+               PrintAndLog("Found keys have been dumped to file dumpkeys.bin. 0xffffffffffff has been inserted for unknown keys.");\r
        }\r
- */\r
\r
+       free(keyBlock);\r
\r
 -      return 0;\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
Impressum, Datenschutz