X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/bcf61bd34ab2747580aabf648093e5854b7283ed..9276e859a6f57ba2518e501fd8148a390ca3aa5e:/client/cmdlf.c diff --git a/client/cmdlf.c b/client/cmdlf.c index 7c5d273f..f04feb97 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -22,6 +22,7 @@ #include "util.h" #include "cmdlf.h" #include "cmdlfhid.h" +#include "cmdlfawid.h" #include "cmdlfti.h" #include "cmdlfem4x.h" #include "cmdlfhitag.h" @@ -29,22 +30,85 @@ #include "cmdlfpcf7931.h" #include "cmdlfio.h" #include "lfdemod.h" - +#include "cmdlfviking.h" static int CmdHelp(const char *Cmd); -/* send a command before reading */ + +int usage_lf_cmdread() +{ + PrintAndLog("Usage: lf cmdread d z o c [H]"); + PrintAndLog("Options: "); + PrintAndLog(" h This help"); + PrintAndLog(" H Freqency High (134 KHz), default is 'Low (125KHz)'"); + PrintAndLog(" d delay OFF period, (dec)"); + PrintAndLog(" z time period ZERO, (dec)"); + PrintAndLog(" o time period ONE, (dec)"); + PrintAndLog(" c Command bytes"); + PrintAndLog(" ************* All periods in microseconds (ms)"); + PrintAndLog("Examples:"); + PrintAndLog(" lf cmdread d 80 z 100 o 200 c 11000"); + PrintAndLog(" lf cmdread d 80 z 100 o 100 c 11000 H"); + return 0; +} + +/* send a LF command before reading */ int CmdLFCommandRead(const char *Cmd) { - static char dummy[3]; + static char dummy[3] = {0x20,0x00,0x00}; + UsbCommand c = {CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K}; + bool errors = FALSE; - dummy[0]= ' '; + uint8_t cmdp = 0; + int strLength = 0; - UsbCommand c = {CMD_MOD_THEN_ACQUIRE_RAW_ADC_SAMPLES_125K}; - sscanf(Cmd, "%"lli" %"lli" %"lli" %s %s", &c.arg[0], &c.arg[1], &c.arg[2],(char*)(&c.d.asBytes),(char*)(&dummy+1)); - // in case they specified 'h' - strcpy((char *)&c.d.asBytes + strlen((char *)c.d.asBytes), dummy); - SendCommand(&c); - return 0; + while(param_getchar(Cmd, cmdp) != 0x00) { + switch(param_getchar(Cmd, cmdp)) + { + case 'h': + return usage_lf_cmdread(); + case 'H': + dummy[1]='h'; + cmdp++; + break; + case 'L': + cmdp++; + break; + case 'c': + strLength = param_getstr(Cmd, cmdp+1, (char *)&c.d.asBytes); + cmdp+=2; + break; + case 'd': + c.arg[0] = param_get32ex(Cmd, cmdp+1, 0, 10); + cmdp+=2; + break; + case 'z': + c.arg[1] = param_get32ex(Cmd, cmdp+1, 0, 10); + cmdp+=2; + break; + case 'o': + c.arg[2] = param_get32ex(Cmd, cmdp+1, 0, 10); + cmdp+=2; + break; + default: + PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = 1; + break; + } + if(errors) break; + } + // No args + if (cmdp == 0) errors = 1; + + //Validations + if (errors) return usage_lf_cmdread(); + + // in case they specified 'H' + // added to the end.. + strcpy((char *)&c.d.asBytes + strLength, dummy); + + clearCommandBuffer(); + SendCommand(&c); + return 0; } int CmdFlexdemod(const char *Cmd) @@ -388,7 +452,7 @@ int usage_lf_config() PrintAndLog(" b Sets resolution of bits per sample. Default (max): 8"); PrintAndLog(" d Sets decimation. A value of N saves only 1 in N samples. Default: 1"); PrintAndLog(" a [0|1] Averaging - if set, will average the stored sample value when decimating. Default: 1"); - PrintAndLog(" t Sets trigger threshold. 0 means no threshold"); + PrintAndLog(" t Sets trigger threshold. 0 means no threshold (range: 0-128)"); PrintAndLog("Examples:"); PrintAndLog(" lf config b 8 L"); PrintAndLog(" Samples at 125KHz, 8bps."); @@ -1011,6 +1075,7 @@ int CmdLFfind(const char *Cmd) PrintAndLog(" : lf search 1 = use data from GraphBuffer & search for known tags"); PrintAndLog(" : lf search u = try reading data from tag & search for known and unknown tags"); PrintAndLog(" : lf search 1 u = use data from GraphBuffer & search for known and unknown tags"); + return 0; } @@ -1028,7 +1093,6 @@ int CmdLFfind(const char *Cmd) PrintAndLog("\nChecking for known tags:\n"); ans=CmdFSKdemodIO(""); - if (ans>0) { PrintAndLog("\nValid IO Prox ID Found!"); return 1; @@ -1073,10 +1137,16 @@ int CmdLFfind(const char *Cmd) ans=CmdG_Prox_II_Demod(""); if (ans>0) { - PrintAndLog("\nValid G Prox II ID Found!"); + PrintAndLog("\nValid Guardall G-Prox II ID Found!"); return 1; } + ans=CmdFDXBdemodBI(""); + if (ans>0) { + PrintAndLog("\nValid FDX-B ID Found!"); + return 1; + } + ans=EM4x50Read("", false); if (ans>0) { PrintAndLog("\nValid EM4x50 ID Found!"); @@ -1150,6 +1220,7 @@ int CmdLFfind(const char *Cmd) static command_t CommandTable[] = { {"help", CmdHelp, 1, "This help"}, + {"awid", CmdLFAWID, 1, "{ AWID RFIDs... }"}, {"em4x", CmdLFEM4X, 1, "{ EM4X RFIDs... }"}, {"hid", CmdLFHID, 1, "{ HID RFIDs... }"}, {"hitag", CmdLFHitag, 1, "{ HITAG RFIDs... }"}, @@ -1157,7 +1228,7 @@ static command_t CommandTable[] = {"pcf7931", CmdLFPCF7931, 1, "{ PCF7931 RFIDs... }"}, {"ti", CmdLFTI, 1, "{ TI RFIDs... }"}, {"t55xx", CmdLFT55XX, 1, "{ T55X7 RFIDs... }"}, - + {"viking", CmdLFViking, 1, "{ Viking RFIDs... }"}, {"config", CmdLFSetConfig, 0, "Set config for LF sampling, bit/sample, decimation, frequency"}, {"cmdread", CmdLFCommandRead, 0, " <'0' period> <'1' period> ['h' 134] \n\t\t-- Modulate LF reader field to send command before read (all periods in microseconds)"}, @@ -1165,9 +1236,9 @@ static command_t CommandTable[] = {"indalademod", CmdIndalaDemod, 1, "['224'] -- Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"}, {"indalaclone", CmdIndalaClone, 0, " ['l']-- Clone Indala to T55x7 (tag must be in antenna)(UID in HEX)(option 'l' for 224 UID"}, {"read", CmdLFRead, 0, "['s' silent] Read 125/134 kHz LF ID-only tag. Do 'lf read h' for help"}, - {"search", CmdLFfind, 1, "[offline] ['u'] Read and Search for valid known tag (in offline mode it you can load first then search) \n\t\t- 'u' to search for unknown tags"}, + {"search", CmdLFfind, 1, "[offline] ['u'] Read and Search for valid known tag (in offline mode it you can load first then search) \n\t\t-- 'u' to search for unknown tags"}, {"sim", CmdLFSim, 0, "[GAP] -- Simulate LF tag from buffer with optional GAP (in microseconds)"}, - {"simask", CmdLFaskSim, 0, "[clock] [invert <1|0>] [manchester/raw <'m'|'r'>] [msg separator 's'] [d ] \n\t\t-- Simulate LF ASK tag from demodbuffer or input"}, + {"simask", CmdLFaskSim, 0, "[clock] [invert <1|0>] [biphase/manchester/raw <'b'|'m'|'r'>] [msg separator 's'] [d ] \n\t\t-- Simulate LF ASK tag from demodbuffer or input"}, {"simfsk", CmdLFfskSim, 0, "[c ] [i] [H ] [L ] [d ] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"}, {"simpsk", CmdLFpskSim, 0, "[1|2|3] [c ] [i] [r ] [d ] \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)"},