]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
ADD: 'lf search' - @marshmellow42 's check if signal is noice.
authoriceman1001 <iceman@iuse.se>
Sat, 4 Feb 2017 11:41:30 +0000 (12:41 +0100)
committericeman1001 <iceman@iuse.se>
Sat, 4 Feb 2017 11:41:30 +0000 (12:41 +0100)
client/cmdlf.c
client/graph.c
client/graph.h

index 2bbb956725f7cbf231ddd7bae3471f3c326881a4..f2a9bb386220e543886ef1cf56467b1cb9a95404 100644 (file)
@@ -1004,6 +1004,7 @@ int CmdVchDemod(const char *Cmd) {
 //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();
@@ -1011,21 +1012,38 @@ int CmdLFfind(const char *Cmd) {
        if (!offline && (cmdp != '1')){
                CmdLFRead("s");
                getSamples("30000", false);
-       } else if (GraphTraceLen < 1000) {
+       } else if (GraphTraceLen < minLength) {
                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");
 
+       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!");
@@ -1116,24 +1134,8 @@ int CmdLFfind(const char *Cmd) {
                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;
-               }
-       }
-*/
+       // TIdemod?
        PrintAndLog("\nNo Known Tags Found!\n");
        if (testRaw=='u' || testRaw=='U'){
                //test unknown tag formats (raw mode)
index c22b7a3d9d44ef22db1d69c465639e8ed673bab8..17aa3ae49fff071d2bca76c0a53d7c8a53729d82 100644 (file)
@@ -268,3 +268,16 @@ uint8_t fskClocks(uint8_t *fc1, uint8_t *fc2, uint8_t *rf1, bool verbose)
        }
        return 1;
 }
+
+// test samples are not just noise
+bool graphJustNoise(int *BitStream, int size)
+{
+       //might not be high enough for noisy environments
+       #define THRESHOLD 15; 
+
+       bool isNoise = TRUE;
+       for(int i=0; i < size && isNoise; i++){
+               isNoise = BitStream[i] < THRESHOLD;
+       }
+       return isNoise;
+}
index 8deeb386d8da2a0754e30f1790c481dec5c797ef..6f3f600d9832b73858f45c20277eee392939e5f3 100644 (file)
@@ -22,6 +22,7 @@ uint8_t GetPskCarrier(const char str[], bool printAns, bool verbose);
 uint8_t GetNrzClock(const char str[], bool printAns, bool verbose);
 uint8_t GetFskClock(const char str[], bool printAns, bool verbose);
 uint8_t fskClocks(uint8_t *fc1, uint8_t *fc2, uint8_t *rf1, bool verbose);
+bool graphJustNoise(int *BitStream, int size);
 void setGraphBuf(uint8_t *buff, size_t size);
 void save_restoreGB(uint8_t saveOpt);
 
Impressum, Datenschutz