]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/cmdlf.c
ADD: some more keys
[proxmark3-svn] / client / cmdlf.c
index 2daa46abd7a3563fb46f0a84a67f55be1a1c6716..f2a9bb386220e543886ef1cf56467b1cb9a95404 100644 (file)
@@ -36,11 +36,10 @@ int usage_lf_read(void){
        return 0;
 }
 int usage_lf_snoop(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("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) {
        return 0;
 }
 int usage_lf_config(void) {
@@ -498,24 +497,24 @@ int CmdLFSetConfig(const char *Cmd) {
                        cmdp++;
                        break;
                case 'q':
                        cmdp++;
                        break;
                case 'q':
-                       errors |= param_getdec(Cmd,cmdp+1,&divisor);
+                       errors |= param_getdec(Cmd, cmdp+1, &divisor);
                        cmdp+=2;
                        break;
                case 't':
                        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':
                        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':
                        cmdp+=2;
                        break;
                case 'd':
-                       errors |= param_getdec(Cmd,cmdp+1,&decimation);
+                       errors |= param_getdec(Cmd, cmdp+1, &decimation);
                        cmdp+=2;
                        break;
                case 'a':
                        cmdp+=2;
                        break;
                case 'a':
-                       averaging = param_getchar(Cmd,cmdp+1) == '1';
+                       averaging = param_getchar(Cmd, cmdp+1) == '1';
                        cmdp+=2;
                        break;
                default:
                        cmdp+=2;
                        break;
                default:
@@ -532,14 +531,13 @@ int CmdLFSetConfig(const char *Cmd) {
        //Validations
        if (errors) return usage_lf_config();
        
        //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 };
 
        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;
        clearCommandBuffer();
        SendCommand(&c);
        return 0;
@@ -557,7 +555,7 @@ int CmdLFRead(const char *Cmd) {
        UsbCommand c = {CMD_ACQUIRE_RAW_ADC_SAMPLES_125K, {arg1,0,0}};
        clearCommandBuffer();
        SendCommand(&c);
        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;
        }
                PrintAndLog("command execution time out");
                return 1;
        }
@@ -568,10 +566,11 @@ int CmdLFSnoop(const char *Cmd) {
        uint8_t cmdp = param_getchar(Cmd, 0);
        if(cmdp == 'h' || cmdp == 'H') return usage_lf_snoop();
        
        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);
        clearCommandBuffer();   
        SendCommand(&c);
        WaitForResponse(CMD_ACK,NULL);
+       getSamples("", false);
        return 0;
 }
 
        return 0;
 }
 
@@ -1005,28 +1004,46 @@ int CmdVchDemod(const char *Cmd) {
 //by marshmellow
 int CmdLFfind(const char *Cmd) {
        int ans = 0;
 //by marshmellow
 int CmdLFfind(const char *Cmd) {
        int ans = 0;
+       size_t minLength = 1000;
        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");
        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", TRUE);
-       } else if (GraphTraceLen < 1000) {
+               getSamples("30000", false);
+       } else if (GraphTraceLen < minLength) {
                PrintAndLog("Data in Graphbuffer was too small.");
                return 0;
        }
        if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
 
                PrintAndLog("Data in Graphbuffer was too small.");
                return 0;
        }
        if (cmdp == 'u' || cmdp == 'U') testRaw = 'u';
 
-       // if ( justNoise(GraphBuffer, GraphTraceLen) ) {
-               // PrintAndLog("Signal looks just like noise. Quitting.");
-               // return 0;
-       // }
-       
        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");
 
+       size_t testLen = minLength;
+       
+       // only run these tests if device is online
+       if (!offline && (cmdp != '1')){
+
+               // only run if graphbuffer is just noise as it should be for hitag/cotag
+               if (graphJustNoise(GraphBuffer, testLen)) {
+                       
+                       ans=CmdLFHitagReader("26");
+                       if (ans==0)
+                               return 1;
+
+                       ans=CmdCOTAGRead("");
+                       if (ans>0){
+                               PrintAndLog("\nValid COTAG ID Found!");
+                               return 1;
+                       }
+                       PrintAndLog("Signal looks just like noise. Quitting.");
+                   return 0;
+               }
+       }
+
        ans=CmdFSKdemodIO("");
        if (ans>0) {
                PrintAndLog("\nValid IO Prox ID Found!");
        ans=CmdFSKdemodIO("");
        if (ans>0) {
                PrintAndLog("\nValid IO Prox ID Found!");
@@ -1117,15 +1134,8 @@ int CmdLFfind(const char *Cmd) {
                PrintAndLog("\nValid Presco ID Found!");
                return 1;
        }
                PrintAndLog("\nValid Presco ID Found!");
                return 1;
        }
-       // TIdemod?
-       
-       if (!offline && (cmdp != '1')){
-               ans=CmdLFHitagReader("26");
-               if (ans==0) {
-                       return 1;
-               }
-       }
 
 
+       // TIdemod?
        PrintAndLog("\nNo Known Tags Found!\n");
        if (testRaw=='u' || testRaw=='U'){
                //test unknown tag formats (raw mode)
        PrintAndLog("\nNo Known Tags Found!\n");
        if (testRaw=='u' || testRaw=='U'){
                //test unknown tag formats (raw mode)
@@ -1221,7 +1231,7 @@ static command_t CommandTable[] =
        {"simfsk",      CmdLFfskSim,        0, "[c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"},
        {"simpsk",      CmdLFpskSim,        0, "[1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] \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)"},
        {"simfsk",      CmdLFfskSim,        0, "[c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"},
        {"simpsk",      CmdLFpskSim,        0, "[1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] \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'|<divisor>] [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}
 };
        {"vchdemod",    CmdVchDemod,        1, "['clone'] -- Demodulate samples for VeriChip"},
        {NULL, NULL, 0, NULL}
 };
Impressum, Datenschutz