]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdhfmfu.c
hf mfu dump testing
[proxmark3-svn] / client / cmdhfmfu.c
index e7b90b4c82641097d0736dd9b58770c1684bf4fc..37f7f0c070205dc2c42540c213dcb454bf58b00f 100644 (file)
@@ -17,7 +17,7 @@
 
 #define MAX_UL_BLOCKS     0x0f
 #define MAX_ULC_BLOCKS    0x2f
-#define MAX_ULEV1a_BLOCKS 0x0b
+#define MAX_ULEV1a_BLOCKS 0x12
 #define MAX_ULEV1b_BLOCKS 0x20
 #define MAX_NTAG_213      0x2c
 #define MAX_NTAG_215      0x86
@@ -46,6 +46,14 @@ uint8_t default_pwd_pack[KEYS_PWD_COUNT][4] = {
        {0x32,0x0C,0x16,0x17}, // PACK 0x80,0x80 -- AMiiboo (sniffed) 
 };
 
+#define MAX_UL_TYPES 13
+uint16_t UL_TYPES_ARRAY[MAX_UL_TYPES] = {UNKNOWN, UL, UL_C, UL_EV1_48, UL_EV1_128, 
+           NTAG, NTAG_213, NTAG_215, NTAG_216, MY_D, MY_D_NFC, MY_D_MOVE, MY_D_MOVE_NFC};
+uint8_t UL_MEMORY_ARRAY[MAX_UL_TYPES] = {MAX_UL_BLOCKS, MAX_UL_BLOCKS, MAX_ULC_BLOCKS, 
+           MAX_ULEV1a_BLOCKS, MAX_ULEV1b_BLOCKS, MAX_NTAG_213, MAX_NTAG_213, MAX_NTAG_215,
+           MAX_NTAG_216, MAX_UL_BLOCKS, MAX_UL_BLOCKS, MAX_UL_BLOCKS, MAX_UL_BLOCKS};
+
+
 static int CmdHelp(const char *Cmd);
 
 char* getProductTypeStr( uint8_t id){
@@ -271,9 +279,14 @@ static int ul_print_default( uint8_t *data){
                PrintAndLog("      BCC1 : %02X - crc should be %02X", data[8], crc1 );
 
        PrintAndLog("  Internal : %02X - %s default", data[9], (data[9]==0x48)?"":"not" );
-       PrintAndLog("      Lock : %s - %s", sprint_hex(data+10, 2),printBits( 2, data+10) );
-       PrintAndLog("OneTimePad : %s ", sprint_hex(data + 12, 4));
-       PrintAndLog("");
+       PrintAndLog("      Lock : %s - %s",
+                               sprint_hex(data+10, 2),
+                               printBits(2, data+10)
+               );
+       PrintAndLog("OneTimePad : %s - %s\n",
+                               sprint_hex(data + 12, 4),
+                               printBits(4, data+12)
+               );
        return 0;
 }
 
@@ -914,7 +927,7 @@ int CmdHF14AMfUDump(const char *Cmd){
        FILE *fout;
        char filename[FILE_PATH_SIZE] = {0x00};
        char *fnameptr = filename;
-       char *str = "Dumping Ultralight%s%s Card Data...";
+       //char *str = "Dumping Ultralight%s%s Card Data...";
        uint8_t *lockbytes_t = NULL;
        uint8_t lockbytes[2] = {0x00};
        uint8_t *lockbytes_t2 = NULL;
@@ -980,6 +993,13 @@ int CmdHF14AMfUDump(const char *Cmd){
        TagTypeUL_t tagtype = GetHF14AMfU_Type();
        if (tagtype == UL_ERROR) return -1;
 
+       for (uint8_t idx = 0; idx < MAX_UL_TYPES; idx++)
+               if (tagtype & UL_TYPES_ARRAY[idx])
+                       Pages = UL_MEMORY_ARRAY[idx]+1;
+       
+       ul_print_type(tagtype, 0);
+       PrintAndLog("Dumping tag memory...");
+       /*
        if ( tagtype & UL ) {
                Pages = 16;
                PrintAndLog(str,"", (tagtype & MAGIC)?" (magic)":"" );
@@ -999,7 +1019,7 @@ int CmdHF14AMfUDump(const char *Cmd){
                Pages = 16;
                PrintAndLog("Dumping unknown Ultralight, using default values.");
        }
-
+       */
        UsbCommand c = {CMD_MIFAREUC_READCARD, {0,Pages}};
        if ( hasPwd ) {
                c.arg[2] = 1;
@@ -1103,7 +1123,7 @@ int CmdHF14AMfUDump(const char *Cmd){
                sprintf(fnameptr,"%02X%02X%02X%02X%02X%02X%02X.bin",
                        data[0],data[1], data[2], data[4],data[5],data[6], data[7]);
        } else {
-               sprintf(fnameptr + fileNlen," .bin");
+               sprintf(fnameptr + fileNlen,".bin");
        }
 
        if ((fout = fopen(filename,"wb")) == NULL) { 
Impressum, Datenschutz