]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhfmf.c
FIX: Minor correction of variablename. don't even ask.
[proxmark3-svn] / client / cmdhfmf.c
index 8448731e9c7bd21588f67bb4e1c04a9660d0d3da..901ccd4921a3b7d0231c19751de6edbec5b52914 100644 (file)
@@ -36,7 +36,6 @@ start:
        //flush queue\r
        while (ukbhit())        getchar();\r
 \r
-       \r
        // wait cycle\r
        while (true) {\r
         printf(".");\r
@@ -521,14 +520,12 @@ int CmdHF14AMfDump(const char *Cmd)
 \r
        int size = GetCardSize();               \r
        char cmdp = param_getchar(Cmd, 0);\r
-       \r
-       PrintAndLog("Got %d",size);\r
-       \r
-       return 0;\r
-       \r
+\r
        if  ( size > -1) \r
-               cmdp = (char)48+size;\r
-       \r
+               cmdp = (char)(48+size);\r
+\r
+       PrintAndLog("Got %d",cmdp);\r
+               \r
        switch (cmdp) {\r
                case '0' : numSectors = 5; break;\r
                case '1' : \r
@@ -548,7 +545,7 @@ int CmdHF14AMfDump(const char *Cmd)
        }\r
        \r
        if ((fin = fopen("dumpkeys.bin","rb")) == NULL) {\r
-               PrintAndLog("Could not find file dumpkeys.bin");\r
+               PrintAndLog("Could not find file dumpkeys.bin");                \r
                return 1;\r
        }\r
        \r
@@ -556,6 +553,7 @@ int CmdHF14AMfDump(const char *Cmd)
        for (sectorNo=0; sectorNo<numSectors; sectorNo++) {\r
                if (fread( keyA[sectorNo], 1, 6, fin ) == 0) {\r
                        PrintAndLog("File reading error.");\r
+                       fclose(fin);\r
                        return 2;\r
                }\r
        }\r
@@ -564,10 +562,13 @@ int CmdHF14AMfDump(const char *Cmd)
        for (sectorNo=0; sectorNo<numSectors; sectorNo++) {\r
                if (fread( keyB[sectorNo], 1, 6, fin ) == 0) {\r
                        PrintAndLog("File reading error.");\r
+                       fclose(fin);\r
                        return 2;\r
                }\r
        }\r
        \r
+       fclose(fin);\r
+       \r
        PrintAndLog("|-----------------------------------------|");\r
        PrintAndLog("|------ Reading sector access bits...-----|");\r
        PrintAndLog("|-----------------------------------------|");\r
@@ -673,7 +674,6 @@ int CmdHF14AMfDump(const char *Cmd)
                PrintAndLog("Dumped %d blocks (%d bytes) to file dumpdata.bin", numblocks, 16*numblocks);\r
        }\r
        \r
-       fclose(fin);\r
        return 0;\r
 }\r
 \r
@@ -847,9 +847,7 @@ int CmdHF14AMfNested(const char *Cmd)
                if (ctmp != 'A' && ctmp != 'a') \r
                        trgKeyType = 1;\r
        } else {\r
-               \r
-               \r
-       \r
+                               \r
                switch (cmdp) {\r
                        case '0': SectorsCnt = 05; break;\r
                        case '1': SectorsCnt = 16; break;\r
@@ -934,20 +932,26 @@ int CmdHF14AMfNested(const char *Cmd)
                        }\r
                }\r
                \r
-               \r
                // nested sectors\r
                iterations = 0;\r
                PrintAndLog("nested...");\r
                bool calibrate = true;\r
                for (i = 0; i < NESTED_SECTOR_RETRY; i++) {\r
                        for (uint8_t sectorNo = 0; sectorNo < SectorsCnt; sectorNo++) {\r
+\r
+                               if (ukbhit()) {\r
+                                       printf("\naborted via keyboard!\n");\r
+                                       free(e_sector);\r
+                                       return 2;\r
+                               }                       \r
+                       \r
                                for (trgKeyType = 0; trgKeyType < 2; trgKeyType++) { \r
                                        if (e_sector[sectorNo].foundKey[trgKeyType]) continue;\r
                                        PrintAndLog("-----------------------------------------------");\r
                                        if(mfnested(blockNo, keyType, key, FirstBlockOfSector(sectorNo), trgKeyType, keyBlock, calibrate)) {\r
                                                PrintAndLog("Nested error.\n");\r
-                                               return 2;\r
-                                       }\r
+                                               free(e_sector);\r
+                                               return 2;                                       }\r
                                        else {\r
                                                calibrate = false;\r
                                        }\r
@@ -1017,10 +1021,9 @@ int CmdHF14AMfNested(const char *Cmd)
                        }\r
                        fclose(fkeys);\r
                }\r
-               \r
+\r
                free(e_sector);\r
        }\r
-\r
        return 0;\r
 }\r
 \r
@@ -1169,11 +1172,12 @@ int CmdHF14AMfChk(const char *Cmd)
                                        keycnt++;\r
                                        memset(buf, 0, sizeof(buf));\r
                                }\r
+                               fclose(f);\r
                        } else {\r
                                PrintAndLog("File: %s: not found or locked.", filename);\r
                                free(keyBlock);\r
                                return 1;\r
-                       fclose(f);\r
+                       \r
                        }\r
                }\r
        }\r
@@ -1415,7 +1419,7 @@ int CmdHF14AMfESet(const char *Cmd)
 int CmdHF14AMfELoad(const char *Cmd)\r
 {\r
        FILE * f;\r
-       char filename[20];\r
+       char filename[255];\r
        char *fnameptr = filename;\r
        char buf[64];\r
        uint8_t buf8[64];\r
@@ -1432,7 +1436,7 @@ int CmdHF14AMfELoad(const char *Cmd)
        }       \r
 \r
        len = strlen(Cmd);\r
-       if (len > 14) len = 14;\r
+       if (len > 250) len = 250;\r
 \r
        memcpy(filename, Cmd, len);\r
        fnameptr += len;\r
@@ -1454,6 +1458,7 @@ int CmdHF14AMfELoad(const char *Cmd)
                                break;\r
                        }\r
                        PrintAndLog("File reading error.");\r
+                       fclose(f);\r
                        return 2;\r
                }\r
                if (strlen(buf) < 32){\r
@@ -1478,6 +1483,7 @@ int CmdHF14AMfELoad(const char *Cmd)
        \r
        if ((blockNum != 16*4) && (blockNum != 32*4 + 8*16)) {\r
                PrintAndLog("File content error. There must be 64 or 256 blocks.");\r
+               fclose(f);\r
                return 4;\r
        }\r
        PrintAndLog("Loaded %d blocks from file: %s", blockNum, filename);\r
@@ -1488,7 +1494,7 @@ int CmdHF14AMfELoad(const char *Cmd)
 int CmdHF14AMfESave(const char *Cmd)\r
 {\r
        FILE * f;\r
-       char filename[20];\r
+       char filename[255];\r
        char * fnameptr = filename;\r
        uint8_t buf[64];\r
        int i, j, len;\r
@@ -1505,7 +1511,7 @@ int CmdHF14AMfESave(const char *Cmd)
        }       \r
 \r
        len = strlen(Cmd);\r
-       if (len > 14) len = 14;\r
+       if (len > 250) len = 250;\r
        \r
        if (len < 1) {\r
                // get filename\r
@@ -1586,13 +1592,34 @@ int CmdHF14AMfECFill(const char *Cmd)
 int CmdHF14AMfEKeyPrn(const char *Cmd)\r
 {\r
        int i;\r
+       uint8_t numSectors;\r
        uint8_t data[16];\r
        uint64_t keyA, keyB;\r
        \r
+       if (param_getchar(Cmd, 0) == 'h') {\r
+               PrintAndLog("It prints the keys loaded in the emulator memory");\r
+               PrintAndLog("Usage:  hf mf ekeyprn [card memory]");\r
+               PrintAndLog("  [card memory]: 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K");\r
+               PrintAndLog("");\r
+               PrintAndLog(" sample: hf mf ekeyprn 1");\r
+               return 0;\r
+       }       \r
+\r
+       char cmdp = param_getchar(Cmd, 0);\r
+       \r
+       switch (cmdp) {\r
+               case '0' : numSectors = 5; break;\r
+               case '1' : \r
+               case '\0': numSectors = 16; break;\r
+               case '2' : numSectors = 32; break;\r
+               case '4' : numSectors = 40; break;\r
+               default:   numSectors = 16;\r
+       }               \r
+       \r
        PrintAndLog("|---|----------------|----------------|");\r
        PrintAndLog("|sec|key A           |key B           |");\r
        PrintAndLog("|---|----------------|----------------|");\r
-       for (i = 0; i < 40; i++) {\r
+       for (i = 0; i < numSectors; i++) {\r
                if (mfEmlGetMem(data, FirstBlockOfSector(i) + NumBlocksPerSector(i) - 1, 1)) {\r
                        PrintAndLog("error get block %d", FirstBlockOfSector(i) + NumBlocksPerSector(i) - 1);\r
                        break;\r
@@ -1610,8 +1637,8 @@ int CmdHF14AMfEKeyPrn(const char *Cmd)
 int CmdHF14AMfCSetUID(const char *Cmd)\r
 {\r
        uint8_t wipeCard = 0;\r
-       uint8_t uid[8];\r
-       uint8_t oldUid[8];\r
+       uint8_t uid[8] = {0x00};\r
+       uint8_t oldUid[8] = {0x00};\r
        int res;\r
 \r
        if (strlen(Cmd) < 1 || param_getchar(Cmd, 0) == 'h') {\r
@@ -1681,7 +1708,7 @@ int CmdHF14AMfCSetBlk(const char *Cmd)
 int CmdHF14AMfCLoad(const char *Cmd)\r
 {\r
        FILE * f;\r
-       char filename[20];\r
+       char filename[255];\r
        char * fnameptr = filename;\r
        char buf[64];\r
        uint8_t buf8[64];\r
@@ -1722,7 +1749,7 @@ int CmdHF14AMfCLoad(const char *Cmd)
                return 0;\r
        } else {\r
                len = strlen(Cmd);\r
-               if (len > 14) len = 14;\r
+               if (len > 250) len = 250;\r
 \r
                memcpy(filename, Cmd, len);\r
                fnameptr += len;\r
@@ -1845,7 +1872,7 @@ int CmdHF14AMfCGetSc(const char *Cmd) {
 int CmdHF14AMfCSave(const char *Cmd) {\r
 \r
        FILE * f;\r
-       char filename[20];\r
+       char filename[255];\r
        char * fnameptr = filename;\r
        uint8_t fillFromEmulator = 0;\r
        uint8_t buf[64];\r
@@ -1887,7 +1914,7 @@ int CmdHF14AMfCSave(const char *Cmd) {
                return 0;\r
        } else {\r
                len = strlen(Cmd);\r
-               if (len > 14) len = 14;\r
+               if (len > 250) len = 250;\r
        \r
                if (len < 1) {\r
                        // get filename\r
Impressum, Datenschutz