X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/c2d25819d8c55b568814da61d116fda9b4ad53d1..6ff6ade2f5f24ffb52a9f90238ee7b8c77edc89c:/client/cmdlf.c diff --git a/client/cmdlf.c b/client/cmdlf.c index a198e1e1..70db0575 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -20,6 +20,7 @@ #include "cmdmain.h" #include "cmddata.h" #include "cmdlf.h" +#include "cmdlfawid26.h" #include "cmdlfhid.h" #include "cmdlfti.h" #include "cmdlfem4x.h" @@ -170,9 +171,10 @@ int CmdIndalaDemod(const char *Cmd) count = 0; } } - PrintAndLog("Recovered %d raw bits", rawbit); + if (rawbit>0){ + 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 int uidlen, long_wait; if (strcmp(Cmd, "224") == 0) { @@ -268,7 +270,7 @@ int CmdIndalaDemod(const char *Cmd) PrintAndLog("UID=%s (%x%08x%08x%08x%08x%08x%08x)", showbits, uid1, uid2, uid3, uid4, uid5, uid6, uid7); } - // Checking UID against next occurences + // Checking UID against next occurrences for (; i + uidlen <= rawbit;) { int failed = 0; for (bit = 0; bit < uidlen; bit++) { @@ -282,7 +284,7 @@ int CmdIndalaDemod(const char *Cmd) } times += 1; } - PrintAndLog("Occurences: %d (expected %d)", times, (rawbit - start) / uidlen); + PrintAndLog("Occurrences: %d (expected %d)", times, (rawbit - start) / uidlen); // Remodulating for tag cloning GraphTraceLen = 32*uidlen; @@ -302,7 +304,7 @@ int CmdIndalaDemod(const char *Cmd) } RepaintGraphWindow(); - return 0; + return 1; } int CmdIndalaClone(const char *Cmd) @@ -370,6 +372,9 @@ int CmdLFRead(const char *Cmd) } SendCommand(&c); WaitForResponse(CMD_ACK,NULL); + + // load samples + CmdSamples(""); return 0; } @@ -390,7 +395,8 @@ static void ChkBitstream(const char *str) int CmdLFSim(const char *Cmd) { - int i; + int i,j; + static int gap; sscanf(Cmd, "%i", &gap); @@ -398,18 +404,19 @@ int CmdLFSim(const char *Cmd) /* convert to bitstream if necessary */ ChkBitstream(Cmd); - PrintAndLog("Sending data, please wait..."); - for (i = 0; i < GraphTraceLen; i += 48) { + printf("Sending [%d bytes]", GraphTraceLen); + for (i = 0; i < GraphTraceLen; i += USB_CMD_DATA_SIZE) { UsbCommand c={CMD_DOWNLOADED_SIM_SAMPLES_125K, {i, 0, 0}}; - int j; - for (j = 0; j < 48; j++) { + + for (j = 0; j < USB_CMD_DATA_SIZE; j++) { c.d.asBytes[j] = GraphBuffer[i+j]; } SendCommand(&c); WaitForResponse(CMD_ACK,NULL); + printf("."); } - - PrintAndLog("Starting simulator..."); + printf("\n"); + PrintAndLog("Starting to simulate"); UsbCommand c = {CMD_SIMULATE_TAG_125K, {GraphTraceLen, gap, 0}}; SendCommand(&c); return 0; @@ -561,6 +568,36 @@ int CmdVchDemod(const char *Cmd) return 0; } +//by marshmellow +int CmdLFfind(const char *Cmd) +{ + int ans=0; + if (!offline){ + ans=CmdLFRead(""); + //ans=CmdSamples("20000"); + } + if (GraphTraceLen<1000) return 0; + PrintAndLog("Checking for known tags:"); + + ans=Cmdaskmandemod(""); + PrintAndLog("ASK_MAN: %s", (ans)?"YES":"NO" ); + + ans=CmdFSKdemodHID(""); + PrintAndLog("HID: %s", (ans)?"YES":"NO" ); + + ans=CmdFSKdemodIO(""); + PrintAndLog("IO prox: %s", (ans)?"YES":"NO" ); + + ans=CmdIndalaDemod(""); + PrintAndLog("Indala (64): %s", (ans)?"YES":"NO" ); + + ans=CmdIndalaDemod("224"); + PrintAndLog("Indala (224): %s", (ans)?"YES":"NO" ); + + //PrintAndLog("No Known Tags Found!\n"); + return 0; +} + static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, @@ -568,16 +605,18 @@ static command_t CommandTable[] = {"flexdemod", CmdFlexdemod, 1, "Demodulate samples for FlexPass"}, {"indalademod", CmdIndalaDemod, 1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"}, - {"indalaclone", CmdIndalaClone, 1, " ['l']-- Clone Indala to T55x7 (UID in HEX)(option 'l' for 224 UID"}, + {"indalaclone", CmdIndalaClone, 0, " ['l']-- Clone Indala to T55x7 (UID in HEX)(option 'l' for 224 UID"}, {"vchdemod", CmdVchDemod, 1, "['clone'] -- Demodulate samples for VeriChip"}, {"read", CmdLFRead, 0, "['h' or ] -- Read 125/134 kHz LF ID-only tag (option 'h' for 134, alternatively: f=12MHz/(divisor+1))"}, + {"search", CmdLFfind, 1, "Read and Search for valid known tag (in offline mode it you can load first then search)"}, {"sim", CmdLFSim, 0, "[GAP] -- Simulate LF tag from buffer with optional GAP (in microseconds)"}, {"simbidir", CmdLFSimBidir, 0, "Simulate LF tag (with bidirectional data transmission between reader and tag)"}, {"simman", CmdLFSimManchester, 0, " [GAP] Simulate arbitrary Manchester LF tag"}, {"snoop", CmdLFSnoop, 0, "['l'|'h'|] [trigger threshold]-- Snoop LF (l:125khz, h:134khz)"}, + {"awid26", CmdLFAWID26, 1, "{ AWID26 tags }"}, {"em4x", CmdLFEM4X, 1, "{ EM4X tags }"}, {"hid", CmdLFHID, 1, "{ HID tags }"}, {"hitag", CmdLFHitag, 1, "{ Hitag tags and transponders }"},