]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/mifarehost.c
add: Topaz mode for "hf 14a raw" (new option -T)
[proxmark3-svn] / client / mifarehost.c
index 7f784850841095713a0a54284259bf9e1b552d05..35499b83677e18129e2278221ed865edbc52f32a 100644 (file)
@@ -231,28 +231,31 @@ int mfEmlSetMem(uint8_t *data, int blockNum, int blocksCount) {
 \r
 // "MAGIC" CARD\r
 \r
-int mfCSetUID(uint8_t *uid, uint8_t *oldUID, bool wantWipe) {\r
-       \r
+int mfCSetUID(uint8_t *uid, uint8_t *atqa, uint8_t *sak, uint8_t *oldUID, bool wantWipe) {\r
        uint8_t oldblock0[16] = {0x00};\r
        uint8_t block0[16] = {0x00};\r
-       memcpy(block0, uid, 4); \r
-       block0[4] = block0[0]^block0[1]^block0[2]^block0[3]; // Mifare UID BCC\r
-       // mifare classic SAK(byte 5) and ATQA(byte 6 and 7)\r
-       //block0[5] = 0x08;\r
-       //block0[6] = 0x04;\r
-       //block0[7] = 0x00;\r
-       \r
-       block0[5] = 0x01;  //sak\r
-       block0[6] = 0x01;\r
-       block0[7] = 0x0f;\r
-       \r
+\r
        int old = mfCGetBlock(0, oldblock0, CSETBLOCK_SINGLE_OPER);\r
-       if ( old == 0) {\r
-               memcpy(block0+8, oldblock0+8, 8);\r
-               PrintAndLog("block 0:  %s", sprint_hex(block0,16));\r
+       if (old == 0) {\r
+               memcpy(block0, oldblock0, 16);\r
+               PrintAndLog("old block 0:  %s", sprint_hex(block0,16));\r
        } else {\r
-               PrintAndLog("Couldn't get olddata. Will write over the last bytes of Block 0.");\r
+               PrintAndLog("Couldn't get old data. Will write over the last bytes of Block 0.");\r
+       }\r
+\r
+       // fill in the new values\r
+       // UID\r
+       memcpy(block0, uid, 4); \r
+       // Mifare UID BCC\r
+       block0[4] = block0[0]^block0[1]^block0[2]^block0[3];\r
+       // mifare classic SAK(byte 5) and ATQA(byte 6 and 7, reversed)\r
+       if (sak!=NULL)\r
+               block0[5]=sak[0];\r
+       if (atqa!=NULL) {\r
+               block0[6]=atqa[1];\r
+               block0[7]=atqa[0];\r
        }\r
+       PrintAndLog("new block 0:  %s", sprint_hex(block0,16));\r
        return mfCSetBlock(0, block0, oldUID, wantWipe, CSETBLOCK_SINGLE_OPER);\r
 }\r
 \r
Impressum, Datenschutz