From 3f84d473698a65e37504ec873905d248edef0f5d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 4 Feb 2017 12:41:30 +0100 Subject: [PATCH 1/1] ADD: 'lf search' - @marshmellow42 's check if signal is noice. --- client/cmdlf.c | 48 +++++++++++++++++++++++++----------------------- client/graph.c | 13 +++++++++++++ client/graph.h | 1 + 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/client/cmdlf.c b/client/cmdlf.c index 2bbb9567..f2a9bb38 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -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) diff --git a/client/graph.c b/client/graph.c index c22b7a3d..17aa3ae4 100644 --- a/client/graph.c +++ b/client/graph.c @@ -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; +} diff --git a/client/graph.h b/client/graph.h index 8deeb386..6f3f600d 100644 --- a/client/graph.h +++ b/client/graph.h @@ -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); -- 2.39.5