diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index c05ba6fd3..db49a9598 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1358,25 +1358,29 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain){ } void MifareCIdent(){ - + #define GEN_1A 1 + #define GEN_1B 2 // variables - bool isOK = true; + uint8_t isGen = 0; uint8_t receivedAnswer[1] = {0x00}; uint8_t receivedAnswerPar[1] = {0x00}; ReaderTransmitBitsPar(wupC1, 7, NULL, NULL); if(!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) { - isOK = false; + goto OUT; } - + isGen |= GEN_1B; + ReaderTransmit(wupC2, sizeof(wupC2), NULL); if(!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) { - isOK = false; - } + goto OUT; + } + isGen = GEN_1A; +OUT: // removed the if, since some magic tags misbehavies and send an answer to it. mifare_classic_halt(NULL, 0); - cmd_send(CMD_ACK,isOK,0,0,0,0); + cmd_send(CMD_ACK,isGen, 0, 0, 0, 0); } void OnSuccessMagic(){ diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c index 36855c97c..cb3a67ed3 100644 --- a/client/cmdhf14a.c +++ b/client/cmdhf14a.c @@ -390,21 +390,22 @@ int CmdHF14AReader(const char *Cmd) { // try to see if card responses to "chinese magic backdoor" commands. - uint8_t isOK = 0; + uint8_t isGeneration = 0; + clearCommandBuffer(); c.cmd = CMD_MIFARE_CIDENT; c.arg[0] = 0; c.arg[1] = 0; c.arg[2] = 0; SendCommand(&c); - if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) - isOK = resp.arg[0] & 0xff; + if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) { + isGeneration = resp.arg[0] & 0xff; + } + if ( isGeneration ) + PrintAndLog("Answers to magic commands (GEN %s): YES", ((isGeneration & 0x2 )==2)?"1B":"1A"); - PrintAndLog("Answers to magic commands (GEN1): %s", (isOK ? "YES" : "NO") ); - // disconnect SendCommand(&cDisconnect); - return select_status; }