+ 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
+\r
+ res = mfCSetBlock(0, block0, oldUID, false, cmdParams);\r
+ if (res) {\r
+ PrintAndLog("Can't set block 0. Error: %d", res);\r
+ return res;\r
+ }\r
+ \r
+ return 0;\r
+}\r
+\r
+int mfCIdentify()\r
+{\r
+ UsbCommand c = {CMD_READER_ISO_14443a, {ISO14A_CONNECT | ISO14A_NO_DISCONNECT, 0, 0}};\r
+ SendCommand(&c);\r
+\r
+ UsbCommand resp;\r
+ WaitForResponse(CMD_ACK,&resp);\r
+\r
+ // iso14a_card_select_t card;\r
+ // memcpy(&card, (iso14a_card_select_t *)resp.d.asBytes, sizeof(iso14a_card_select_t));\r
+\r
+ // uint64_t select_status = resp.arg[0]; // 0: couldn't read, 1: OK, with ATS, 2: OK, no ATS, 3: proprietary Anticollision\r
+\r
+ // if(select_status != 0) {\r
+ // uint8_t rats[] = { 0xE0, 0x80 }; // FSDI=8 (FSD=256), CID=0\r
+ // c.arg[0] = ISO14A_RAW | ISO14A_APPEND_CRC | ISO14A_NO_DISCONNECT;\r
+ // c.arg[1] = 2;\r
+ // c.arg[2] = 0;\r
+ // memcpy(c.d.asBytes, rats, 2);\r
+ // SendCommand(&c);\r
+ // WaitForResponse(CMD_ACK,&resp);\r
+ // }\r
+\r
+ c.cmd = CMD_MIFARE_CIDENT;\r
+ c.arg[0] = 0;\r
+ c.arg[1] = 0;\r
+ c.arg[2] = 0;\r
+ SendCommand(&c);\r
+ WaitForResponse(CMD_ACK,&resp);\r
+\r
+ uint8_t isGeneration = resp.arg[0] & 0xff;\r
+ switch( isGeneration ){\r
+ case 1: PrintAndLog("Chinese magic backdoor commands (GEN 1a) detected"); break;\r
+ case 2: PrintAndLog("Chinese magic backdoor command (GEN 1b) detected"); break;\r
+ default: PrintAndLog("No chinese magic backdoor command detected"); break;\r