\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