From: iceman1001 Date: Sun, 22 Nov 2015 20:48:15 +0000 (+0100) Subject: FIX: the read counter in "hf 14a sim" (for ntag/ev) should work better now. Instea... X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/e9a92fe23750c5047943b4e37a7e9c0ba02dd84b FIX: the read counter in "hf 14a sim" (for ntag/ev) should work better now. Instead of always returning zero, it increases aswell. --Started to add the TI demod into the 'LF SEARCH" --- diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index d7a86a09..e2137832 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -1204,10 +1204,12 @@ void SimulateIso14443aTag(int tagType, int flags, byte_t* data) EmSendCmdEx(data,sizeof(data),false); p_response = NULL; } else if (receivedCmd[0] == 0x39 && tagType == 7) { // Received a READ COUNTER -- - uint8_t counter = receivedCmd[1]; - uint32_t value = counters[counter]; + uint8_t index = receivedCmd[1]; uint8_t data[] = {0x00,0x00,0x00,0x14,0xa5}; - AppendCrc14443a(data, sizeof(data)-2); + if ( counters[index] > 0) { + num_to_bytes(counters[index], 3, data); + AppendCrc14443a(data, sizeof(data)-2); + } EmSendCmdEx(data,sizeof(data),false); p_response = NULL; } else if (receivedCmd[0] == 0xA5 && tagType == 7) { // Received a INC COUNTER -- diff --git a/client/cmdlf.c b/client/cmdlf.c index 3a63972c..3f89e6ef 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -1056,67 +1056,66 @@ int CmdVchDemod(const char *Cmd) } //by marshmellow -int CmdLFfind(const char *Cmd) -{ - int ans = 0; - char cmdp = param_getchar(Cmd, 0); - char testRaw = param_getchar(Cmd, 1); - if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') return usage_lf_find(); - - if (!offline && (cmdp != '1')){ - CmdLFRead("s"); - getSamples("30000",false); - } else if (GraphTraceLen < 1000) { - PrintAndLog("Data in Graphbuffer was too small."); - return 0; - } - if (cmdp == 'u' || cmdp == 'U') testRaw = 'u'; +int CmdLFfind(const char *Cmd) { + int ans = 0; + char cmdp = param_getchar(Cmd, 0); + char testRaw = param_getchar(Cmd, 1); + if (strlen(Cmd) > 3 || cmdp == 'h' || cmdp == 'H') return usage_lf_find(); + + if (!offline && (cmdp != '1')){ + CmdLFRead("s"); + getSamples("30000",false); + } else if (GraphTraceLen < 1000) { + PrintAndLog("Data in Graphbuffer was too small."); + return 0; + } + if (cmdp == 'u' || cmdp == 'U') testRaw = 'u'; - PrintAndLog("NOTE: some demods output possible binary\n if it finds something that looks like a tag"); - PrintAndLog("False Positives ARE possible\n"); - PrintAndLog("\nChecking for known tags:\n"); + PrintAndLog("NOTE: some demods output possible binary\n if it finds something that looks like a tag"); + PrintAndLog("False Positives ARE possible\n"); + PrintAndLog("\nChecking for known tags:\n"); - ans=CmdFSKdemodIO(""); - if (ans>0) { - PrintAndLog("\nValid IO Prox ID Found!"); - return 1; - } + ans=CmdFSKdemodIO(""); + if (ans>0) { + PrintAndLog("\nValid IO Prox ID Found!"); + return 1; + } - ans=CmdFSKdemodPyramid(""); - if (ans>0) { - PrintAndLog("\nValid Pyramid ID Found!"); - return 1; - } + ans=CmdFSKdemodPyramid(""); + if (ans>0) { + PrintAndLog("\nValid Pyramid ID Found!"); + return 1; + } - ans=CmdFSKdemodParadox(""); - if (ans>0) { - PrintAndLog("\nValid Paradox ID Found!"); - return 1; - } + ans=CmdFSKdemodParadox(""); + if (ans>0) { + PrintAndLog("\nValid Paradox ID Found!"); + return 1; + } - ans=CmdFSKdemodAWID(""); - if (ans>0) { - PrintAndLog("\nValid AWID ID Found!"); - return 1; - } + ans=CmdFSKdemodAWID(""); + if (ans>0) { + PrintAndLog("\nValid AWID ID Found!"); + return 1; + } - ans=CmdFSKdemodHID(""); - if (ans>0) { - PrintAndLog("\nValid HID Prox ID Found!"); - return 1; - } + ans=CmdFSKdemodHID(""); + if (ans>0) { + PrintAndLog("\nValid HID Prox ID Found!"); + return 1; + } - ans=CmdAskEM410xDemod(""); - if (ans>0) { - PrintAndLog("\nValid EM410x ID Found!"); - return 1; - } + ans=CmdAskEM410xDemod(""); + if (ans>0) { + PrintAndLog("\nValid EM410x ID Found!"); + return 1; + } - ans=CmdG_Prox_II_Demod(""); - if (ans>0) { - PrintAndLog("\nValid Guardall G-Prox II ID Found!"); - return 1; - } + ans=CmdG_Prox_II_Demod(""); + if (ans>0) { + PrintAndLog("\nValid Guardall G-Prox II ID Found!"); + return 1; + } ans=CmdFDXBdemodBI(""); if (ans>0) { @@ -1147,63 +1146,68 @@ int CmdLFfind(const char *Cmd) PrintAndLog("\nValid NexWatch ID Found!"); return 1; } + // TIdemod? + - PrintAndLog("\nNo Known Tags Found!\n"); - if (testRaw=='u' || testRaw=='U'){ - //test unknown tag formats (raw mode) - PrintAndLog("\nChecking for Unknown tags:\n"); - ans=AutoCorrelate(4000, FALSE, FALSE); + PrintAndLog("\nNo Known Tags Found!\n"); + if (testRaw=='u' || testRaw=='U'){ + //test unknown tag formats (raw mode) + PrintAndLog("\nChecking for Unknown tags:\n"); + ans=AutoCorrelate(4000, FALSE, FALSE); - if (ans > 0) { + if (ans > 0) { - PrintAndLog("Possible Auto Correlation of %d repeating samples",ans); + PrintAndLog("Possible Auto Correlation of %d repeating samples",ans); - if ( ans % 8 == 0) { - int bytes = (ans / 8); - PrintAndLog("Possible %d bytes", bytes); - int blocks = 0; - if ( bytes % 2 == 0) { - blocks = (bytes / 2); - PrintAndLog("Possible 2 blocks, width %d", blocks); - } - if ( bytes % 4 == 0) { - blocks = (bytes / 4); - PrintAndLog("Possible 4 blocks, width %d", blocks); - } - if ( bytes % 8 == 0) { - blocks = (bytes / 8); - PrintAndLog("Possible 8 blocks, width %d", blocks); + if ( ans % 8 == 0) { + int bytes = (ans / 8); + PrintAndLog("Possible %d bytes", bytes); + int blocks = 0; + if ( bytes % 2 == 0) { + blocks = (bytes / 2); + PrintAndLog("Possible 2 blocks, width %d", blocks); + } + if ( bytes % 4 == 0) { + blocks = (bytes / 4); + PrintAndLog("Possible 4 blocks, width %d", blocks); + } + if ( bytes % 8 == 0) { + blocks = (bytes / 8); + PrintAndLog("Possible 8 blocks, width %d", blocks); + } + if ( bytes % 16 == 0) { + blocks = (bytes / 16); + PrintAndLog("Possible 16 blocks, width %d", blocks); + } } - if ( bytes % 16 == 0) { - blocks = (bytes / 16); - PrintAndLog("Possible 16 blocks, width %d", blocks); + } + + ans=GetFskClock("",FALSE,FALSE); + if (ans != 0){ //fsk + ans=FSKrawDemod("",TRUE); + if (ans>0) { + PrintAndLog("\nUnknown FSK Modulated Tag Found!"); + return 1; } } - } - ans=GetFskClock("",FALSE,FALSE); - if (ans != 0){ //fsk - ans=FSKrawDemod("",TRUE); + + ans=ASKDemod("0 0 0",TRUE,FALSE,1); if (ans>0) { - PrintAndLog("\nUnknown FSK Modulated Tag Found!"); + PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!"); + PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'"); + return 1; + } + + ans=CmdPSK1rawDemod(""); + if (ans>0) { + PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'"); + PrintAndLog("\nCould also be PSK3 - [currently not supported]"); + PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod"); return 1; } - } - ans=ASKDemod("0 0 0",TRUE,FALSE,1); - if (ans>0) { - PrintAndLog("\nUnknown ASK Modulated and Manchester encoded Tag Found!"); - PrintAndLog("\nif it does not look right it could instead be ASK/Biphase - try 'data rawdemod ab'"); - return 1; - } - ans=CmdPSK1rawDemod(""); - if (ans>0) { - PrintAndLog("Possible unknown PSK1 Modulated Tag Found above!\n\nCould also be PSK2 - try 'data rawdemod p2'"); - PrintAndLog("\nCould also be PSK3 - [currently not supported]"); - PrintAndLog("\nCould also be NRZ - try 'data nrzrawdemod"); - return 1; - } - PrintAndLog("\nNo Data Found!\n"); - } - return 0; + PrintAndLog("\nNo Data Found!\n"); + } + return 0; } static command_t CommandTable[] = diff --git a/client/cmdlfti.c b/client/cmdlfti.c index 12956abd..cb10943c 100644 --- a/client/cmdlfti.c +++ b/client/cmdlfti.c @@ -262,29 +262,30 @@ int CmdTIDemod(const char *Cmd) // read a TI tag and return its ID int CmdTIRead(const char *Cmd) { - UsbCommand c = {CMD_READ_TI_TYPE}; - SendCommand(&c); - return 0; + UsbCommand c = {CMD_READ_TI_TYPE}; + clearCommandbuffer(); + SendCommand(&c); + return 0; } // write new data to a r/w TI tag int CmdTIWrite(const char *Cmd) { - UsbCommand c = {CMD_WRITE_TI_TYPE}; - int res = 0; - - res = sscanf(Cmd, "%012"llx" %012"llx" %012"llx"", &c.arg[0], &c.arg[1], &c.arg[2]); - - if (res == 2) c.arg[2]=0; - if (res < 2) - PrintAndLog("Please specify the data as two hex strings, optionally the CRC as a third"); - else - SendCommand(&c); - return 0; + UsbCommand c = {CMD_WRITE_TI_TYPE}; + int res = 0; + + res = sscanf(Cmd, "%012"llx" %012"llx" %012"llx"", &c.arg[0], &c.arg[1], &c.arg[2]); + + if (res == 2) c.arg[2]=0; + if (res < 2) + PrintAndLog("Please specify the data as two hex strings, optionally the CRC as a third"); + else + clearCommandbuffer(); + SendCommand(&c); + return 0; } -static command_t CommandTable[] = -{ +static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, {"demod", CmdTIDemod, 1, "Demodulate raw bits for TI-type LF tag"}, {"read", CmdTIRead, 0, "Read and decode a TI 134 kHz tag"}, @@ -292,14 +293,12 @@ static command_t CommandTable[] = {NULL, NULL, 0, NULL} }; -int CmdLFTI(const char *Cmd) -{ +int CmdLFTI(const char *Cmd){ CmdsParse(CommandTable, Cmd); return 0; } -int CmdHelp(const char *Cmd) -{ +int CmdHelp(const char *Cmd){ CmdsHelp(CommandTable); return 0; }