]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
Merge branch 'master' of https://github.com/holiman/proxmark3
authoriceman1001 <iceman@iuse.se>
Tue, 20 Jan 2015 19:59:24 +0000 (20:59 +0100)
committericeman1001 <iceman@iuse.se>
Tue, 20 Jan 2015 19:59:24 +0000 (20:59 +0100)
Conflicts:
armsrc/appmain.c
armsrc/apps.h

Step 1 for the Ultralight / Ultralight-c

armsrc/appmain.c
armsrc/apps.h
armsrc/iso14443a.c
armsrc/mifarecmd.c
armsrc/mifaresniff.c
armsrc/mifareutil.c
armsrc/mifareutil.h
client/Makefile

index b998c2a1968569e7b73b42db8e574f6da58539a3..88ade8511b544a561eb8dc5f724706d6ff8f4415 100644 (file)
@@ -808,7 +808,7 @@ void UsbPacketReceived(uint8_t *packet, int len)
                        MifareUC_Auth2(c->arg[0],c->d.asBytes);
                        break;
                case CMD_MIFAREU_READCARD:
-                       MifareUReadCard(c->arg[0], c->arg[1], c->d.asBytes);
+                       MifareUReadCard(c->arg[0],c->arg[1],c->d.asBytes);
                         break;
                case CMD_MIFAREUC_READCARD:
                        MifareUReadCard(c->arg[0],c->arg[1],c->d.asBytes);
index 27e08fa1e528f7a894b67d652854eeb27821947b..376e52c8cb321b606b533a7c3b45fb3f447df90e 100644 (file)
@@ -200,7 +200,9 @@ void ReaderMifare(bool first_try);
 int32_t dist_nt(uint32_t nt1, uint32_t nt2);
 void MifareReadBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *data);
 void MifareUReadBlock(uint8_t arg0,uint8_t *datain);
-void MifareUReadCard(uint8_t arg0, int arg1, uint8_t *datain);
+void MifareUC_Auth1(uint8_t arg0, uint8_t *datain);
+void MifareUC_Auth2(uint32_t arg0, uint8_t *datain);
+void MifareUReadCard(uint8_t arg0, int Pages, uint8_t *datain);
 void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
 void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain);
 void MifareUWriteBlock(uint8_t arg0,uint8_t *datain);
index d326be2c5f6dff70ab535b54a4dc2e101ffbbebc..2722ccb2ef04b62c41a3945a1a0be1d390f396ed 100644 (file)
@@ -1001,10 +1001,11 @@ void SimulateIso14443aTag(int tagType, int uid_1st, int uid_2nd, byte_t* data)
        }
        
        // The second response contains the (mandatory) first 24 bits of the UID
-       uint8_t response2[5];
+       uint8_t response2[5] = {0x00};
 
        // Check if the uid uses the (optional) part
-       uint8_t response2a[5];
+       uint8_t response2a[5] = {0x00};
+       
        if (uid_2nd) {
                response2[0] = 0x88;
                num_to_bytes(uid_1st,3,response2+1);
@@ -1025,12 +1026,12 @@ void SimulateIso14443aTag(int tagType, int uid_1st, int uid_2nd, byte_t* data)
        response2[4] = response2[0] ^ response2[1] ^ response2[2] ^ response2[3];
 
        // Prepare the mandatory SAK (for 4 and 7 byte UID)
-       uint8_t response3[3];
+       uint8_t response3[3]  = {0x00};
        response3[0] = sak;
        ComputeCrc14443(CRC_14443_A, response3, 1, &response3[1], &response3[2]);
 
        // Prepare the optional second SAK (for 7 byte UID), drop the cascade bit
-       uint8_t response3a[3];
+       uint8_t response3a[3]  = {0x00};
        response3a[0] = sak & 0xFB;
        ComputeCrc14443(CRC_14443_A, response3a, 1, &response3a[1], &response3a[2]);
 
index 22926dcfaf399f15c605000865939eafccfb7e70..a96164fc65114ccfa61e80cb22efbb606560fbbd 100644 (file)
@@ -104,14 +104,14 @@ void MifareUC_Auth1(uint8_t arg0, uint8_t *datain){
        if(!iso14443a_select_card(uid, NULL, &cuid)) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
                        Dbprintf("Can't select card");\r
-               OnError(0);\r
+               //OnError(0);\r
                return;\r
        };\r
        \r
        if(mifare_ultra_auth1(cuid, dataoutbuf)){\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)        \r
                        Dbprintf("Authentication part1: Fail.");\r
-               OnError(1);\r
+               //OnError(1);\r
                return;\r
        }\r
 \r
@@ -138,7 +138,7 @@ void MifareUC_Auth2(uint32_t arg0, uint8_t *datain){
        if(mifare_ultra_auth2(cuid, key, dataoutbuf)){\r
            if (MF_DBGLEVEL >= MF_DBG_ERROR) \r
                        Dbprintf("Authentication part2: Fail...");\r
-               OnError(1);\r
+               //OnError(1);\r
                return;                 \r
        }\r
        \r
@@ -1141,14 +1141,14 @@ void Mifare_DES_Auth1(uint8_t arg0, uint8_t *datain){
        if(!len) {\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)        \r
                        Dbprintf("Can't select card");\r
-               OnError(1);\r
+               //OnError(1);\r
                return;\r
        };\r
 \r
        if(mifare_desfire_des_auth1(cuid, dataout)){\r
                if (MF_DBGLEVEL >= MF_DBG_ERROR)        \r
                        Dbprintf("Authentication part1: Fail.");\r
-               OnError(4);\r
+               //OnError(4);\r
                return;\r
        }\r
 \r
@@ -1171,7 +1171,7 @@ void Mifare_DES_Auth2(uint32_t arg0, uint8_t *datain){
        if( isOK) {\r
            if (MF_DBGLEVEL >= MF_DBG_EXTENDED) \r
                        Dbprintf("Authentication part2: Failed");  \r
-               OnError(4);\r
+               //OnError(4);\r
                return;\r
        }\r
 \r
@@ -1181,4 +1181,4 @@ void Mifare_DES_Auth2(uint32_t arg0, uint8_t *datain){
        cmd_send(CMD_ACK, isOK, 0, 0, dataout, sizeof(dataout));\r
        FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);\r
        LEDsoff();\r
-}
+}
\ No newline at end of file
index fed127725f9c3caf86b394a2e2fed1bf6e816711..9b6f5f04c417d3514973a5dac79221821d22613b 100644 (file)
 \r
 static int sniffState = SNF_INIT;\r
 static uint8_t sniffUIDType;\r
-static uint8_t sniffUID[8];\r
-static uint8_t sniffATQA[2];\r
+static uint8_t sniffUID[8] = {0x00};\r
+static uint8_t sniffATQA[2] = {0x00};\r
 static uint8_t sniffSAK;\r
-static uint8_t sniffBuf[16];\r
+static uint8_t sniffBuf[16] = {0x00};\r
 static uint32_t timerData = 0;\r
 \r
 \r
index 2b3a5fcf244c87cb71653ace1bac86c5ad94b10b..163eca790f932317cd9ed5db7651cfb906ba032e 100644 (file)
@@ -623,3 +623,98 @@ void emlClearMem(void) {
        emlSetMem((uint8_t *)uid, 0, 1);\r
        return;\r
 }\r
+\r
+\r
+// Mifare desfire commands\r
+int mifare_sendcmd_special(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t* data, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing)\r
+{\r
+    uint8_t dcmd[5] = {0x00};\r
+    dcmd[0] = cmd;\r
+    memcpy(dcmd+1,data,2);\r
+       AppendCrc14443a(dcmd, 3);\r
+       \r
+       ReaderTransmit(dcmd, sizeof(dcmd), NULL);\r
+       int len = ReaderReceive(answer, answer_parity);\r
+       if(!len) {\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR) \r
+                       Dbprintf("Authentication failed. Card timeout.");\r
+               return 1;\r
+    }\r
+       return len;\r
+}\r
+\r
+int mifare_sendcmd_special2(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t* data, uint8_t* answer,uint8_t *answer_parity, uint32_t *timing)\r
+{\r
+    uint8_t dcmd[20] = {0x00};\r
+    dcmd[0] = cmd;\r
+    memcpy(dcmd+1,data,17);\r
+       AppendCrc14443a(dcmd, 18);\r
+\r
+       ReaderTransmit(dcmd, sizeof(dcmd), NULL);\r
+       int len = ReaderReceive(answer, answer_parity);\r
+       if(!len){\r
+        if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
+                       Dbprintf("Authentication failed. Card timeout.");\r
+               return 1;\r
+    }\r
+       return len;\r
+}\r
+\r
+int mifare_desfire_des_auth1(uint32_t uid, uint8_t *blockData){\r
+\r
+       int len;\r
+       // load key, keynumber\r
+       uint8_t data[2]={0x0a, 0x00};\r
+       uint8_t* receivedAnswer = get_bigbufptr_recvrespbuf();\r
+       uint8_t *receivedAnswerPar = receivedAnswer + MAX_FRAME_SIZE;\r
+       \r
+       len = mifare_sendcmd_special(NULL, 1, 0x02, data, receivedAnswer,receivedAnswerPar,NULL);\r
+       if (len == 1) {\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
+                       Dbprintf("Cmd Error: %02x", receivedAnswer[0]);\r
+               return 1;\r
+       }\r
+       \r
+       if (len == 12) {\r
+               if (MF_DBGLEVEL >= MF_DBG_EXTENDED)     {\r
+                       Dbprintf("Auth1 Resp: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",\r
+                               receivedAnswer[0],receivedAnswer[1],receivedAnswer[2],receivedAnswer[3],receivedAnswer[4],\r
+                               receivedAnswer[5],receivedAnswer[6],receivedAnswer[7],receivedAnswer[8],receivedAnswer[9],\r
+                               receivedAnswer[10],receivedAnswer[11]);\r
+                       }\r
+                       memcpy(blockData, receivedAnswer, 12);\r
+               return 0;\r
+       }\r
+       return 1;\r
+}\r
+\r
+int mifare_desfire_des_auth2(uint32_t uid, uint8_t *key, uint8_t *blockData){\r
+\r
+       int len;\r
+       uint8_t data[17] = {0x00};\r
+       data[0] = 0xAF;\r
+       memcpy(data+1,key,16);\r
+       \r
+       uint8_t* receivedAnswer = get_bigbufptr_recvrespbuf();\r
+       uint8_t *receivedAnswerPar = receivedAnswer + MAX_FRAME_SIZE;\r
+       \r
+       len = mifare_sendcmd_special2(NULL, 1, 0x03, data, receivedAnswer, receivedAnswerPar ,NULL);\r
+       \r
+       if ((receivedAnswer[0] == 0x03) && (receivedAnswer[1] == 0xae)) {\r
+               if (MF_DBGLEVEL >= MF_DBG_ERROR)\r
+                       Dbprintf("Auth Error: %02x %02x", receivedAnswer[0], receivedAnswer[1]);\r
+               return 1;\r
+       }\r
+       \r
+       if (len == 12){\r
+               if (MF_DBGLEVEL >= MF_DBG_EXTENDED) {\r
+                       Dbprintf("Auth2 Resp: %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",\r
+                               receivedAnswer[0],receivedAnswer[1],receivedAnswer[2],receivedAnswer[3],receivedAnswer[4],\r
+                               receivedAnswer[5],receivedAnswer[6],receivedAnswer[7],receivedAnswer[8],receivedAnswer[9],\r
+                               receivedAnswer[10],receivedAnswer[11]);\r
+                       }\r
+               memcpy(blockData, receivedAnswer, 12);\r
+               return 0;\r
+       }\r
+       return 1;\r
+}
\ No newline at end of file
index a62a9f0b871a3362af91ba43cc09b5e1f37cabfe..2770a442f8146ff1a28781756a1ffe29e2e2a45f 100644 (file)
@@ -72,6 +72,11 @@ int mifare_ultra_special_writeblock(uint32_t uid, uint8_t blockNo, uint8_t *bloc
 int mifare_classic_halt(struct Crypto1State *pcs, uint32_t uid); 
 int mifare_ultra_halt(uint32_t uid);
 \r
+// desfire\r
+int mifare_sendcmd_special(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t* data, uint8_t* answer, uint8_t *answer_parity, uint32_t *timing);\r
+int mifare_sendcmd_special2(struct Crypto1State *pcs, uint8_t crypted, uint8_t cmd, uint8_t* data, uint8_t* answer,uint8_t *answer_parity, uint32_t *timing);\r
+int mifare_desfire_des_auth1(uint32_t uid, uint8_t *blockData);\r
+int mifare_desfire_des_auth2(uint32_t uid, uint8_t *key, uint8_t *blockData);\r
 
 // crypto functions
 void mf_crypto1_decrypt(struct Crypto1State *pcs, uint8_t *receivedCmd, int len);
index 523a1ad117c8fbf977ac0ee6c5ff9015600dc268..77fee4e664733a9b3231320f8af5dd4e32b2b060 100644 (file)
@@ -13,11 +13,10 @@ CXX=g++
 VPATH = ../common
 OBJDIR = obj
 
-LDLIBS = -L/opt/local/lib -L/usr/local/lib ../liblua/liblua.a -lreadline -lpthread -lm
+LDLIBS = -L/opt/local/lib -L/usr/local/lib ../liblua/liblua.a -lreadline -lpthread -lm -lcrypto
 LDFLAGS = $(COMMON_FLAGS)
-CFLAGS = -std=c99 -I. -I../include -I../common -I/opt/local/include -I../liblua -Wall $(COMMON_FLAGS) -g -O4 
+CFLAGS = -std=c99 -lcrypto -I. -I../include -I../common -I/opt/local/include -I../liblua -Wall $(COMMON_FLAGS) -g -O4 
 LUAPLATFORM = generic
-
 ifneq (,$(findstring MINGW,$(platform)))
 CXXFLAGS = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui
 QTLDLIBS = -L$(QTDIR)/lib -lQtCore4 -lQtGui4
Impressum, Datenschutz