X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/e7f43e92e9b8a8afe7aa235a34a70af59e8e6cea..52108cabf322819371659f90bfddfcf58062bfa8:/client/cmdlf.c?ds=sidebyside diff --git a/client/cmdlf.c b/client/cmdlf.c index d64a15c5..2bbb9567 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -36,11 +36,10 @@ int usage_lf_read(void){ return 0; } int usage_lf_snoop(void) { - PrintAndLog("Usage: lf snoop"); + PrintAndLog("Snoop low frequence signal. Use 'lf config' to set parameters."); + PrintAndLog("Usage: lf snoop [h]"); PrintAndLog("Options:"); - PrintAndLog(" h This help"); - PrintAndLog("This function takes no arguments. "); - PrintAndLog("Use 'lf config' to set parameters."); + PrintAndLog(" h This help"); return 0; } int usage_lf_config(void) { @@ -249,8 +248,9 @@ int CmdFlexdemod(const char *Cmd) int CmdIndalaDemod(const char *Cmd) { + // PSK1, Bitrate 32, + // Usage: recover 64bit UID by default, specify "224" as arg to recover a 224bit UID - int state = -1; int count = 0; int i, j; @@ -293,12 +293,11 @@ int CmdIndalaDemod(const char *Cmd) count = 0; } } + if ( rawbit<1 ) return 0; - if ( rawbit>0 ){ + if (g_debugMode) { PrintAndLog("Recovered %d raw bits, expected: %d", rawbit, GraphTraceLen/32); PrintAndLog("worst metric (0=best..7=worst): %d at pos %d", worst, worstPos); - } else { - return 0; } // Finding the start of a UID @@ -326,15 +325,14 @@ int CmdIndalaDemod(const char *Cmd) } if (start == rawbit - uidlen + 1) { - PrintAndLog("nothing to wait for"); + if (g_debugMode) PrintAndLog("nothing to wait for"); return 0; } // Inverting signal if needed if (first == 1) { - for (i = start; i < rawbit; i++) { + for (i = start; i < rawbit; i++) rawbits[i] = !rawbits[i]; - } } // Dumping UID @@ -413,7 +411,7 @@ int CmdIndalaDemod(const char *Cmd) times += 1; } - PrintAndLog("Occurrences: %d (expected %d)", times, (rawbit - start) / uidlen); + if (g_debugMode) PrintAndLog("Occurrences: %d (expected %d)", times, (rawbit - start) / uidlen); // Remodulating for tag cloning // HACK: 2015-01-04 this will have an impact on our new way of seening lf commands (demod) @@ -499,24 +497,24 @@ int CmdLFSetConfig(const char *Cmd) { cmdp++; break; case 'q': - errors |= param_getdec(Cmd,cmdp+1,&divisor); + errors |= param_getdec(Cmd, cmdp+1, &divisor); cmdp+=2; break; case 't': - errors |= param_getdec(Cmd,cmdp+1,&unsigned_trigg); + errors |= param_getdec(Cmd, cmdp+1, &unsigned_trigg); cmdp+=2; if(!errors) trigger_threshold = unsigned_trigg; break; case 'b': - errors |= param_getdec(Cmd,cmdp+1,&bps); + errors |= param_getdec(Cmd, cmdp+1, &bps); cmdp+=2; break; case 'd': - errors |= param_getdec(Cmd,cmdp+1,&decimation); + errors |= param_getdec(Cmd, cmdp+1, &decimation); cmdp+=2; break; case 'a': - averaging = param_getchar(Cmd,cmdp+1) == '1'; + averaging = param_getchar(Cmd, cmdp+1) == '1'; cmdp+=2; break; default: @@ -533,14 +531,13 @@ int CmdLFSetConfig(const char *Cmd) { //Validations if (errors) return usage_lf_config(); - //Bps is limited to 8, so fits in lower half of arg1 + //Bps is limited to 8 if (bps >> 4) bps = 8; sample_config config = { decimation, bps, averaging, divisor, trigger_threshold }; - //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)); + UsbCommand c = {CMD_SET_LF_SAMPLING_CONFIG, {0,0,0} }; + memcpy(c.d.asBytes, &config, sizeof(sample_config)); clearCommandBuffer(); SendCommand(&c); return 0; @@ -558,7 +555,7 @@ int CmdLFRead(const char *Cmd) { UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {arg1,0,0}}; clearCommandBuffer(); SendCommand(&c); - if ( !WaitForResponseTimeout(CMD_ACK,NULL,2500) ) { + if ( !WaitForResponseTimeout(CMD_ACK, NULL ,2500) ) { PrintAndLog("command execution time out"); return 1; } @@ -569,10 +566,11 @@ int CmdLFSnoop(const char *Cmd) { uint8_t cmdp = param_getchar(Cmd, 0); if(cmdp == 'h' || cmdp == 'H') return usage_lf_snoop(); - UsbCommand c = {CMD_LF_SNOOP_RAW_ADC_SAMPLES}; + UsbCommand c = {CMD_LF_SNOOP_RAW_ADC_SAMPLES,{0,0,0}}; clearCommandBuffer(); SendCommand(&c); WaitForResponse(CMD_ACK,NULL); + getSamples("", false); return 0; } @@ -603,16 +601,16 @@ int CmdLFSim(const char *Cmd) { for (i = 0; i < GraphTraceLen; i += USB_CMD_DATA_SIZE) { UsbCommand c = {CMD_DOWNLOADED_SIM_SAMPLES_125K, {i, 0, 0}}; - for (j = 0; j < USB_CMD_DATA_SIZE; j++) { + for (j = 0; j < USB_CMD_DATA_SIZE; j++) c.d.asBytes[j] = GraphBuffer[i+j]; - } + clearCommandBuffer(); SendCommand(&c); WaitForResponse(CMD_ACK, NULL); printf("."); } - PrintAndLog("Starting to simulate"); + PrintAndLog("Simulating"); UsbCommand c = {CMD_SIMULATE_TAG_125K, {GraphTraceLen, gap, 0}}; clearCommandBuffer(); @@ -1012,7 +1010,7 @@ int CmdLFfind(const char *Cmd) { if (!offline && (cmdp != '1')){ CmdLFRead("s"); - getSamples("30000",false); + getSamples("30000", false); } else if (GraphTraceLen < 1000) { PrintAndLog("Data in Graphbuffer was too small."); return 0; @@ -1028,8 +1026,6 @@ int CmdLFfind(const char *Cmd) { PrintAndLog("False Positives ARE possible\n"); PrintAndLog("\nChecking for known tags:\n"); - - ans=CmdFSKdemodIO(""); if (ans>0) { PrintAndLog("\nValid IO Prox ID Found!"); @@ -1090,6 +1086,11 @@ int CmdLFfind(const char *Cmd) { PrintAndLog("\nValid NexWatch ID Found!"); return 1; } + ans=CmdPSKIdteck(""); + if (ans>0) { + PrintAndLog("\nValid Idteck ID Found!"); + return 1; + } ans=CmdJablotronDemod(""); if (ans>0) { PrintAndLog("\nValid Jablotron ID Found!"); @@ -1100,9 +1101,39 @@ int CmdLFfind(const char *Cmd) { PrintAndLog("\nValid NEDAP ID Found!"); return 1; } + ans=CmdVisa2kDemod(""); + if (ans>0) { + PrintAndLog("\nValid Visa2000 ID Found!"); + return 1; + } + ans=CmdNoralsyDemod(""); + if (ans>0) { + PrintAndLog("\nValid Noralsy ID Found!"); + return 1; + } + ans=CmdPrescoDemod(""); + if (ans>0) { + PrintAndLog("\nValid Presco ID Found!"); + return 1; + } + // ICEMAN; always call save_restorGB for COTAG. Will break graphbuffer + save_restoreGB(1); + ans=CmdCOTAGRead(""); + if (ans>0){ + PrintAndLog("\nValid COTAG ID Found!"); + return 1; + } + save_restoreGB(0); // TIdemod? - +/* + if (!offline && (cmdp != '1')){ + ans=CmdLFHitagReader("26"); + if (ans==0) { + return 1; + } + } +*/ PrintAndLog("\nNo Known Tags Found!\n"); if (testRaw=='u' || testRaw=='U'){ //test unknown tag formats (raw mode) @@ -1167,20 +1198,25 @@ int CmdLFfind(const char *Cmd) { static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, + {"animal", CmdLFFdx, 1, "{ Animal RFIDs... }"}, {"awid", CmdLFAWID, 1, "{ AWID RFIDs... }"}, + {"cotag", CmdLFCOTAG, 1, "{ COTAG RFIDs... }"}, {"em4x", CmdLFEM4X, 1, "{ EM4X RFIDs... }"}, {"guard", CmdLFGuard, 1, "{ Guardall RFIDs... }"}, {"hid", CmdLFHID, 1, "{ HID RFIDs... }"}, {"hitag", CmdLFHitag, 1, "{ HITAG RFIDs... }"}, +// {"indala", CmdLFIndala, 1, "{ Indala RFIDs... }"}, {"io", CmdLFIO, 1, "{ IOPROX RFIDs... }"}, - {"jablotron", CmdLFJablotron, 1, "{ JABLOTRON RFIDs... }"}, - {"nedap", CmdLFNedap, 1, "{ NEDAP RFIDs... }"}, + {"jablotron", CmdLFJablotron, 1, "{ Jablotron RFIDs... }"}, + {"nedap", CmdLFNedap, 1, "{ Nedap RFIDs... }"}, + {"noralsy", CmdLFNoralsy, 1, "{ Noralsy RFIDs... }"}, {"pcf7931", CmdLFPCF7931, 1, "{ PCF7931 RFIDs... }"}, {"presco", CmdLFPresco, 1, "{ Presco RFIDs... }"}, {"pyramid", CmdLFPyramid, 1, "{ Farpointe/Pyramid RFIDs... }"}, {"ti", CmdLFTI, 1, "{ TI RFIDs... }"}, {"t55xx", CmdLFT55XX, 1, "{ T55xx RFIDs... }"}, {"viking", CmdLFViking, 1, "{ Viking RFIDs... }"}, + {"visa2000", CmdLFVisa2k, 1, "{ Visa2000 RFIDs... }"}, {"config", CmdLFSetConfig, 0, "Set config for LF sampling, bit/sample, decimation, frequency"}, {"cmdread", CmdLFCommandRead, 0, " <'0' period> <'1' period> ['h' 134] \n\t\t-- Modulate LF reader field to send command before read (all periods in microseconds)"}, {"flexdemod", CmdFlexdemod, 1, "Demodulate samples for FlexPass"}, @@ -1193,7 +1229,7 @@ static command_t CommandTable[] = {"simfsk", CmdLFfskSim, 0, "[c ] [i] [H ] [L ] [d ] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"}, {"simpsk", CmdLFpskSim, 0, "[1|2|3] [c ] [i] [r ] [d ] \n\t\t-- Simulate LF PSK tag from demodbuffer or input"}, {"simbidir", CmdLFSimBidir, 0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"}, - {"snoop", CmdLFSnoop, 0, "['l'|'h'|] [trigger threshold]-- Snoop LF (l:125khz, h:134khz)"}, + {"snoop", CmdLFSnoop, 0, "Snoop LF"}, {"vchdemod", CmdVchDemod, 1, "['clone'] -- Demodulate samples for VeriChip"}, {NULL, NULL, 0, NULL} };