From d0b0586411805d505047229e9bfd75fdc5c61559 Mon Sep 17 00:00:00 2001 From: marshmellow42 Date: Tue, 21 Feb 2017 11:46:13 -0500 Subject: [PATCH] cleanup cmdlfem4x.h - add chip detection to ... ... lf search --- client/cmdlf.c | 52 ++++++++++++++++++++++++++++++++++------------ client/cmdlfem4x.h | 13 +++++++----- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/client/cmdlf.c b/client/cmdlf.c index 34104518..8b6f32b6 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -1078,9 +1078,29 @@ int CmdVchDemod(const char *Cmd) return 0; } + +//by marshmellow +int CheckChipType(char cmdp) { + uint32_t wordData = 0; + + //check for em4x05/em4x69 chips first + save_restoreGB(1); + if ((!offline && (cmdp != '1')) && EM4x05Block0Test(&wordData)) { + PrintAndLog("\nValid EM4x05/EM4x69 Chip Found\nTry lf em 4x05... commands\n"); + save_restoreGB(0); + return 1; + } + + //TODO check for t55xx chip... + + save_restoreGB(0); + return 1; +} + //by marshmellow int CmdLFfind(const char *Cmd) { + uint32_t wordData = 0; int ans=0; size_t minLength = 1000; char cmdp = param_getchar(Cmd, 0); @@ -1115,7 +1135,12 @@ int CmdLFfind(const char *Cmd) // only run if graphbuffer is just noise as it should be for hitag/cotag if (graphJustNoise(GraphBuffer, testLen)) { // only run these tests if we are in online mode - if (!offline && (cmdp != '1')){ + if (!offline && (cmdp != '1')) { + // test for em4x05 in reader talk first mode. + if (EM4x05Block0Test(&wordData)) { + PrintAndLog("\nValid EM4x05/EM4x69 Chip Found\nUse lf em 4x05readword/dump commands to read\n"); + return 1; + } ans=CmdLFHitagReader("26"); if (ans==0) { return 1; @@ -1132,49 +1157,49 @@ int CmdLFfind(const char *Cmd) ans=CmdFSKdemodIO(""); if (ans>0) { PrintAndLog("\nValid IO Prox ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdFSKdemodPyramid(""); if (ans>0) { PrintAndLog("\nValid Pyramid ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdFSKdemodParadox(""); if (ans>0) { PrintAndLog("\nValid Paradox ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdFSKdemodAWID(""); if (ans>0) { PrintAndLog("\nValid AWID ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdFSKdemodHID(""); if (ans>0) { PrintAndLog("\nValid HID Prox ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdAskEM410xDemod(""); if (ans>0) { PrintAndLog("\nValid EM410x ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdG_Prox_II_Demod(""); if (ans>0) { PrintAndLog("\nValid G Prox II ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdFDXBdemodBI(""); if (ans>0) { PrintAndLog("\nValid FDX-B ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=EM4x50Read("", false); @@ -1186,24 +1211,25 @@ int CmdLFfind(const char *Cmd) ans=CmdVikingDemod(""); if (ans>0) { PrintAndLog("\nValid Viking ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdIndalaDecode(""); if (ans>0) { PrintAndLog("\nValid Indala ID Found!"); - return 1; + return CheckChipType(cmdp); } ans=CmdPSKNexWatch(""); if (ans>0) { PrintAndLog("\nValid NexWatch ID Found!"); - return 1; + return CheckChipType(cmdp); } PrintAndLog("\nNo Known Tags Found!\n"); if (testRaw=='u' || testRaw=='U'){ - //test unknown tag formats (raw mode) + ans=CheckChipType(cmdp); + //test unknown tag formats (raw mode)0 PrintAndLog("\nChecking for Unknown tags:\n"); ans=AutoCorrelate(4000, FALSE, FALSE); if (ans > 0) PrintAndLog("Possible Auto Correlation of %d repeating samples",ans); diff --git a/client/cmdlfem4x.h b/client/cmdlfem4x.h index 400536d3..7faf6f49 100644 --- a/client/cmdlfem4x.h +++ b/client/cmdlfem4x.h @@ -18,11 +18,14 @@ int CmdEM410xWatch(const char *Cmd); int CmdEM410xWatchnSpoof(const char *Cmd); int CmdEM410xWrite(const char *Cmd); int CmdEM4x50Read(const char *Cmd); -int CmdLFEM4X(const char *Cmd); -int CmdReadWord(const char *Cmd); -int CmdReadWordPWD(const char *Cmd); -int CmdWriteWord(const char *Cmd); -int CmdWriteWordPWD(const char *Cmd); int EM4x50Read(const char *Cmd, bool verbose); +int CmdLFEM4X(const char *Cmd); +bool EM4x05Block0Test(uint32_t *wordData); +int CmdEM4x05info(const char *Cmd); +int CmdEM4x05WriteWord(const char *Cmd); +int CmdEM4x05dump(const char *Cmd); +int CmdEM4x05ReadWord(const char *Cmd); +int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t *wordData); + #endif -- 2.39.2