From f24edfec54295aac701b8240e39d77646ddd9bef Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 28 Feb 2017 08:16:02 +0100 Subject: [PATCH] CHG: `hf 14a read` - started to add a Magic tag gen2 detection. SKipping it for now. Can't decide to put in on deviceside or in client. FIX: `lf read` - ophs.. it works again. ADD: `lf em 4x05--` - added a chipset definition CHG: better kali fix - from @pwpivi --- armsrc/mifarecmd.c | 44 ++++++++++++++++++++++++++++++++++---------- client/cmdhf14a.c | 13 ++++++++----- client/cmdlf.c | 5 +---- client/cmdlfem4x.c | 3 ++- client/whereami.c | 3 +++ 5 files changed, 48 insertions(+), 20 deletions(-) diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index db49a959..2ab076b6 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -1360,24 +1360,48 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain){ void MifareCIdent(){ #define GEN_1A 1 #define GEN_1B 2 + #define GEN_2 4 // variables uint8_t isGen = 0; - uint8_t receivedAnswer[1] = {0x00}; - uint8_t receivedAnswerPar[1] = {0x00}; - + uint8_t rec[1] = {0x00}; + uint8_t recpar[1] = {0x00}; + + // Generation 1 test ReaderTransmitBitsPar(wupC1, 7, NULL, NULL); - if(!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) { - goto OUT; - } - isGen |= GEN_1B; + if(!ReaderReceive(rec, recpar) || (rec[0] != 0x0a)) { + goto TEST2; + }; + isGen = GEN_1B; ReaderTransmit(wupC2, sizeof(wupC2), NULL); - if(!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) { + if(!ReaderReceive(rec, recpar) || (rec[0] != 0x0a)) { goto OUT; - } + }; isGen = GEN_1A; + goto OUT; -OUT: +TEST2:; +/* + // Generation 2 test + struct Crypto1State mpcs = {0, 0}; + struct Crypto1State *pcs = &mpcs; + + // halt previous. + mifare_classic_halt(NULL, 0); + + //select + if (!iso14443a_select_card(NULL, NULL, NULL, true, 0)) { + goto OUT; + }; + + // MIFARE_CLASSIC_WRITEBLOCK 0xA0 + // ACK 0x0a + uint16_t len = mifare_sendcmd_short(pcs, 1, 0xA0, 0, rec, recpar, NULL); + if ((len != 1) || (rec[0] != 0x0A)) { + isGen = GEN_2; + }; + */ +OUT:; // removed the if, since some magic tags misbehavies and send an answer to it. mifare_classic_halt(NULL, 0); cmd_send(CMD_ACK,isGen, 0, 0, 0, 0); diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c index cb3a67ed..21c97fa2 100644 --- a/client/cmdhf14a.c +++ b/client/cmdhf14a.c @@ -391,18 +391,21 @@ int CmdHF14AReader(const char *Cmd) { // try to see if card responses to "chinese magic backdoor" commands. 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)) { + 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"); + + switch( isGeneration ){ + case 1: PrintAndLog("Answers to magic commands (GEN 1a): YES"); break; + case 2: PrintAndLog("Answers to magic commands (GEN 1b): YES"); break; + //case 4: PrintAndLog("Answers to magic commands (GEN 2): YES"); break; + default: PrintAndLog("Answers to magic commands: NO"); break; + } // disconnect SendCommand(&cDisconnect); diff --git a/client/cmdlf.c b/client/cmdlf.c index 8ab065bb..414e4a2b 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -567,14 +567,11 @@ int CmdLFRead(const char *Cmd) { break; default: PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = 1; + errors = TRUE; break; } if(errors) break; } - - // No args - if (cmdp == 0) errors = 1; //Validations if (errors) return usage_lf_read(); diff --git a/client/cmdlfem4x.c b/client/cmdlfem4x.c index ff7a5f69..7383756b 100644 --- a/client/cmdlfem4x.c +++ b/client/cmdlfem4x.c @@ -797,7 +797,7 @@ int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t *word) } int testLen = (GraphTraceLen < 1000) ? GraphTraceLen : 1000; if (graphJustNoise(GraphBuffer, testLen)) { - PrintAndLog("no tag not found"); + PrintAndLog("no tag found"); return -1; } return demodEM4x05resp(word); @@ -981,6 +981,7 @@ void printEM4x05info(uint32_t block0, uint32_t serial) { switch (chipType) { case 9: PrintAndLog("\n Chip Type: %u | EM4305", chipType); break; + case 8: PrintAndLog("\n Chip Type: %u | EM4205", chipType); break; case 4: PrintAndLog(" Chip Type: %u | Unknown", chipType); break; case 2: PrintAndLog(" Chip Type: %u | EM4469", chipType); break; //add more here when known diff --git a/client/whereami.c b/client/whereami.c index aa702adc..a8531889 100644 --- a/client/whereami.c +++ b/client/whereami.c @@ -10,7 +10,10 @@ extern "C" { #endif +#if defined(__linux__) +// make realpath() available: #define _DEFAULT_SOURCE +#endif #if !defined(WAI_MALLOC) || !defined(WAI_FREE) || !defined(WAI_REALLOC) #include -- 2.39.5