]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/mifarecmd.c
mfu info / dump attempt at missing auths
[proxmark3-svn] / armsrc / mifarecmd.c
index c51a30dc9fbcc58f29d4aef914381084424b3a46..cf36b95a034c17490746241c515b8540d5239f9e 100644 (file)
@@ -121,7 +121,7 @@ void MifareUC_Auth1(uint8_t arg0, uint8_t *datain){
     cmd_send(CMD_ACK,1,cuid,0,dataoutbuf,11);\r
        LEDsoff();\r
 }\r
-void MifareUC_Auth2(uint32_t arg0, uint8_t *datain){\r
+void MifareUC_Auth2(uint8_t arg0, uint8_t *datain){\r
 \r
        uint8_t key[16] = {0x00};\r
        byte_t dataoutbuf[16] = {0x00};\r
@@ -139,8 +139,10 @@ void MifareUC_Auth2(uint32_t arg0, uint8_t *datain){
        if (MF_DBGLEVEL >= MF_DBG_EXTENDED) DbpString("AUTH 2 FINISHED");\r
     \r
        cmd_send(CMD_ACK,1,0,0,dataoutbuf,11);\r
-       FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
-       LEDsoff();\r
+       if (arg0) {\r
+               FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
+               LEDsoff();\r
+       }\r
 }\r
 \r
 // Arg0 = BlockNo,\r
@@ -346,7 +348,8 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
        // params\r
        uint8_t blockNo = arg0;\r
        uint16_t blocks = arg1;\r
-       bool useKey = (arg2 == 1);\r
+       bool useKey = (arg2 == 1); //UL_C\r
+       bool usePwd = (arg2 == 2); //UL_EV1/NTAG\r
        int countblocks = 0;\r
        uint8_t dataout[176] = {0x00};\r
 \r
@@ -373,12 +376,12 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
                uint8_t rnd_ab[16] = {0x00};\r
                uint8_t IV[8] = {0x00};\r
 \r
-               uint16_t len;\r
+               uint16_t len2;\r
                uint8_t receivedAnswer[MAX_FRAME_SIZE];\r
                uint8_t receivedAnswerPar[MAX_PARITY_SIZE];\r
 \r
-               len = mifare_sendcmd_short(NULL, 1, 0x1A, 0x00, receivedAnswer,receivedAnswerPar ,NULL);\r
-               if (len != 11) {\r
+               len2 = mifare_sendcmd_short(NULL, 1, 0x1A, 0x00, receivedAnswer,receivedAnswerPar ,NULL);\r
+               if (len2 != 11) {\r
                        if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Cmd Error: %02x", receivedAnswer[0]);\r
                        OnError(1);\r
                        return;\r
@@ -396,8 +399,8 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
                // encrypt    out, in, length, key, iv\r
                tdes_2key_enc(rnd_ab, rnd_ab, sizeof(rnd_ab), key, enc_random_b);\r
 \r
-               len = mifare_sendcmd_short_mfucauth(NULL, 1, 0xAF, rnd_ab, receivedAnswer, receivedAnswerPar, NULL);\r
-               if (len != 11) {\r
+               len2 = mifare_sendcmd_short_mfucauth(NULL, 1, 0xAF, rnd_ab, receivedAnswer, receivedAnswerPar, NULL);\r
+               if (len2 != 11) {\r
                        OnError(1);\r
                        return;\r
                }\r
@@ -412,6 +415,18 @@ void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
                        Dbprintf("failed authentication");      \r
        }\r
 \r
+       if (usePwd) { //ev1 or ntag auth\r
+               uint8_t Pwd[4] = {0x00};\r
+               memcpy(Pwd, datain, 4);\r
+               uint8_t pack[4] = {0,0,0,0};\r
+\r
+               if (mifare_ul_ev1_auth(Pwd, pack)){\r
+                       OnError(1);\r
+                       Dbprintf("failed authentication");\r
+                       return;                 \r
+               }\r
+       }\r
+\r
        for (int i = 0; i < blocks; i++){\r
                len = mifare_ultra_readblock(blockNo * 4 + i, dataout + 4 * i);\r
 \r
Impressum, Datenschutz