X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/70459879e98e1e7a2a5627c4008f0ad38b8dc782..58962d4c3e95ab489c5764db9dc0a3e07efbd30a:/client/cmdlf.c diff --git a/client/cmdlf.c b/client/cmdlf.c index 4cf9c815..3f89e6ef 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -192,7 +192,6 @@ int CmdLFCommandRead(const char *Cmd) if (errors) return usage_lf_cmdread(); // in case they specified 'H' - // added to the end.. strcpy((char *)&c.d.asBytes + strLength, dummy); clearCommandBuffer(); @@ -294,9 +293,12 @@ int CmdIndalaDemod(const char *Cmd) int rawbit = 0; int worst = 0, worstPos = 0; // PrintAndLog("Expecting a bit less than %d raw bits", GraphTraceLen / 32); + + // loop through raw signal - since we know it is psk1 rf/32 fc/2 skip every other value (+=2) for (i = 0; i < GraphTraceLen-1; i += 2) { count += 1; if ((GraphBuffer[i] > GraphBuffer[i + 1]) && (state != 1)) { + // appears redundant - marshmellow if (state == 0) { for (j = 0; j < count - 8; j += 16) { rawbits[rawbit++] = 0; @@ -309,6 +311,7 @@ int CmdIndalaDemod(const char *Cmd) state = 1; count = 0; } else if ((GraphBuffer[i] < GraphBuffer[i + 1]) && (state != 0)) { + //appears redundant if (state == 1) { for (j = 0; j < count - 8; j += 16) { rawbits[rawbit++] = 1; @@ -501,6 +504,7 @@ int CmdIndalaClone(const char *Cmd) c.arg[1] = uid2; } + clearCommandBuffer(); SendCommand(&c); return 0; } @@ -578,6 +582,7 @@ int CmdLFSetConfig(const char *Cmd) //Averaging is a flag on high-bit of arg[1] UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG}; memcpy(c.d.asBytes,&config,sizeof(sample_config)); + clearCommandBuffer(); SendCommand(&c); return 0; } @@ -756,6 +761,7 @@ int CmdLFfskSim(const char *Cmd) UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, size}}; memcpy(c.d.asBytes, DemodBuffer, size); + clearCommandBuffer(); SendCommand(&c); return 0; } @@ -849,6 +855,7 @@ int CmdLFaskSim(const char *Cmd) UsbCommand c = {CMD_ASK_SIM_TAG, {arg1, arg2, size}}; PrintAndLog("preparing to sim ask data: %d bits", size); memcpy(c.d.asBytes, DemodBuffer, size); + clearCommandBuffer(); SendCommand(&c); return 0; } @@ -956,6 +963,7 @@ int CmdLFpskSim(const char *Cmd) UsbCommand c = {CMD_PSK_SIM_TAG, {arg1, arg2, size}}; PrintAndLog("DEBUG: Sending DemodBuffer Length: %d", size); memcpy(c.d.asBytes, DemodBuffer, size); + clearCommandBuffer(); SendCommand(&c); return 0; @@ -1048,74 +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'; - - 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"); +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'; - ans=CmdFSKdemodIO(""); - if (ans>0) { - PrintAndLog("\nValid IO Prox ID Found!"); - return 1; - } + 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=CmdFSKdemodPyramid(""); - if (ans>0) { - PrintAndLog("\nValid Pyramid ID Found!"); - return 1; - } + ans=CmdFSKdemodIO(""); + if (ans>0) { + PrintAndLog("\nValid IO Prox ID Found!"); + return 1; + } - ans=CmdFSKdemodParadox(""); - if (ans>0) { - PrintAndLog("\nValid Paradox ID Found!"); - return 1; - } + ans=CmdFSKdemodPyramid(""); + if (ans>0) { + PrintAndLog("\nValid Pyramid ID Found!"); + return 1; + } - ans=CmdFSKdemodAWID(""); - if (ans>0) { - PrintAndLog("\nValid AWID ID Found!"); - return 1; - } + ans=CmdFSKdemodParadox(""); + if (ans>0) { + PrintAndLog("\nValid Paradox ID Found!"); + return 1; + } - ans=CmdFSKdemodHID(""); - if (ans>0) { - PrintAndLog("\nValid HID Prox ID Found!"); - return 1; - } + ans=CmdFSKdemodAWID(""); + if (ans>0) { + PrintAndLog("\nValid AWID ID Found!"); + return 1; + } - //add psk and indala - ans=CmdIndalaDecode(""); - if (ans>0) { - PrintAndLog("\nValid Indala 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) { @@ -1135,68 +1135,79 @@ int CmdLFfind(const char *Cmd) return 1; } + ans=CmdIndalaDecode(""); + if (ans>0) { + PrintAndLog("\nValid Indala ID Found!"); + return 1; + } + ans=CmdPSKNexWatch(""); if (ans>0) { 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 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("\nUnknown FSK Modulated Tag Found!"); + 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[] =