\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
FillFileNameByUID(traceFileName, tuid, ".eml", 7);\r
\r
f = fopen(traceFileName, "r");\r
- if (!f) {\r
- fclose(f);\r
- return 1;\r
- }\r
+ if (!f) return 1;\r
\r
blockNum = 0;\r
\r
if ((!strlen(traceFileName)) || (isTraceCardEmpty())) return 0;\r
\r
f = fopen(traceFileName, "w+");\r
- if ( !f ) {\r
- fclose(f);\r
- return 1;\r
- }\r
+ if ( !f ) return 1;\r
\r
for (int i = 0; i < 64; i++) { // blocks\r
for (int j = 0; j < 16; j++) // bytes\r