return 0;
}
int usage_lf_snoop(void) {
- PrintAndLog("Usage: lf snoop");
+ PrintAndLog("Snoop low frequence signal. Use 'lf config' to set parameters.");
+ PrintAndLog("Usage: lf snoop [h]");
PrintAndLog("Options:");
- PrintAndLog(" h This help");
- PrintAndLog("This function takes no arguments. ");
- PrintAndLog("Use 'lf config' to set parameters.");
+ PrintAndLog(" h This help");
return 0;
}
int usage_lf_config(void) {
int CmdIndalaDemod(const char *Cmd)
{
+ // PSK1, Bitrate 32,
+
// Usage: recover 64bit UID by default, specify "224" as arg to recover a 224bit UID
-
int state = -1;
int count = 0;
int i, j;
count = 0;
}
}
+ if ( rawbit<1 ) return 0;
- if ( rawbit>0 ){
+ if (g_debugMode) {
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
}
if (start == rawbit - uidlen + 1) {
- PrintAndLog("nothing to wait for");
+ if (g_debugMode) PrintAndLog("nothing to wait for");
return 0;
}
// Inverting signal if needed
if (first == 1) {
- for (i = start; i < rawbit; i++) {
+ for (i = start; i < rawbit; i++)
rawbits[i] = !rawbits[i];
- }
}
// Dumping UID
times += 1;
}
- PrintAndLog("Occurrences: %d (expected %d)", times, (rawbit - start) / uidlen);
+ if (g_debugMode) PrintAndLog("Occurrences: %d (expected %d)", times, (rawbit - start) / uidlen);
// Remodulating for tag cloning
// HACK: 2015-01-04 this will have an impact on our new way of seening lf commands (demod)
uint8_t cmdp = param_getchar(Cmd, 0);
if(cmdp == 'h' || cmdp == 'H') return usage_lf_snoop();
- UsbCommand c = {CMD_LF_SNOOP_RAW_ADC_SAMPLES};
+ UsbCommand c = {CMD_LF_SNOOP_RAW_ADC_SAMPLES,{0,0,0}};
clearCommandBuffer();
SendCommand(&c);
WaitForResponse(CMD_ACK,NULL);
+ getSamples("", false);
return 0;
}
// convert to bitstream if necessary
ChkBitstream(Cmd);
+ if (g_debugMode)
+ printf("DEBUG: Sending [%d bytes]\n", GraphTraceLen);
+
//can send only 512 bits at a time (1 byte sent per bit...)
- 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}};
- for (j = 0; j < USB_CMD_DATA_SIZE; j++) {
+ for (j = 0; j < USB_CMD_DATA_SIZE; j++)
c.d.asBytes[j] = GraphBuffer[i+j];
- }
+
clearCommandBuffer();
SendCommand(&c);
WaitForResponse(CMD_ACK, NULL);
printf(".");
}
- PrintAndLog("\nStarting to simulate");
+ PrintAndLog("Simulating");
+
UsbCommand c = {CMD_SIMULATE_TAG_125K, {GraphTraceLen, gap, 0}};
clearCommandBuffer();
SendCommand(&c);
while(param_getchar(Cmd, cmdp) != 0x00) {
switch(param_getchar(Cmd, cmdp)) {
+ case 'H':
case 'h': return usage_lf_simask();
case 'i':
invert = 1;
setDemodBuf(data, dataLen, 0);
}
if (clk == 0) clk = 64;
- if (encoding == 0) clk = clk/2; //askraw needs to double the clock speed
+ if (encoding == 0) clk >>= 2; //askraw needs to double the clock speed
size_t size = DemodBufferLen;
if (!offline && (cmdp != '1')){
CmdLFRead("s");
- getSamples("30000",false);
+ getSamples("30000", TRUE);
} else if (GraphTraceLen < 1000) {
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");
PrintAndLog("\nValid NexWatch ID Found!");
return 1;
}
+ ans=CmdPSKIdteck("");
+ if (ans>0) {
+ PrintAndLog("\nValid Idteck ID Found!");
+ return 1;
+ }
ans=CmdJablotronDemod("");
if (ans>0) {
PrintAndLog("\nValid Jablotron ID Found!");
PrintAndLog("\nValid NEDAP ID Found!");
return 1;
}
+ ans=CmdVisa2kDemod("");
+ if (ans>0) {
+ PrintAndLog("\nValid Visa2000 ID Found!");
+ return 1;
+ }
+ ans=CmdNoralsyDemod("");
+ if (ans>0) {
+ PrintAndLog("\nValid Noralsy ID Found!");
+ return 1;
+ }
+ ans=CmdPrescoDemod("");
+ if (ans>0) {
+ PrintAndLog("\nValid Presco ID Found!");
+ return 1;
+ }
// TIdemod?
+ if (!offline && (cmdp != '1')){
+ ans=CmdLFHitagReader("26");
+ if (ans==0) {
+ return 1;
+ }
+ }
PrintAndLog("\nNo Known Tags Found!\n");
if (testRaw=='u' || testRaw=='U'){
static command_t CommandTable[] =
{
{"help", CmdHelp, 1, "This help"},
+ {"animal", CmdLFFdx, 1, "{ Animal RFIDs... }"},
{"awid", CmdLFAWID, 1, "{ AWID RFIDs... }"},
+ {"cotag", CmdLFCOTAG, 1, "{ COTAG RFIDs... }"},
{"em4x", CmdLFEM4X, 1, "{ EM4X RFIDs... }"},
{"guard", CmdLFGuard, 1, "{ Guardall RFIDs... }"},
{"hid", CmdLFHID, 1, "{ HID RFIDs... }"},
{"hitag", CmdLFHitag, 1, "{ HITAG RFIDs... }"},
+// {"indala", CmdLFIndala, 1, "{ Indala RFIDs... }"},
{"io", CmdLFIO, 1, "{ IOPROX RFIDs... }"},
- {"jablotron", CmdLFJablotron, 1, "{ JABLOTRON RFIDs... }"},
- {"nedap", CmdLFNedap, 1, "{ NEDAP RFIDs... }"},
+ {"jablotron", CmdLFJablotron, 1, "{ Jablotron RFIDs... }"},
+ {"nedap", CmdLFNedap, 1, "{ Nedap RFIDs... }"},
+ {"noralsy", CmdLFNoralsy, 1, "{ Noralsy RFIDs... }"},
{"pcf7931", CmdLFPCF7931, 1, "{ PCF7931 RFIDs... }"},
{"presco", CmdLFPresco, 1, "{ Presco RFIDs... }"},
{"pyramid", CmdLFPyramid, 1, "{ Farpointe/Pyramid RFIDs... }"},
{"ti", CmdLFTI, 1, "{ TI RFIDs... }"},
{"t55xx", CmdLFT55XX, 1, "{ T55xx RFIDs... }"},
{"viking", CmdLFViking, 1, "{ Viking RFIDs... }"},
+ {"visa2000", CmdLFVisa2k, 1, "{ Visa2000 RFIDs... }"},
{"config", CmdLFSetConfig, 0, "Set config for LF sampling, bit/sample, decimation, frequency"},
{"cmdread", CmdLFCommandRead, 0, "<off period> <'0' period> <'1' period> <command> ['h' 134] \n\t\t-- Modulate LF reader field to send command before read (all periods in microseconds)"},
{"flexdemod", CmdFlexdemod, 1, "Demodulate samples for FlexPass"},
{"simfsk", CmdLFfskSim, 0, "[c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] \n\t\t-- Simulate LF FSK tag from demodbuffer or input"},
{"simpsk", CmdLFpskSim, 0, "[1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] \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)"},
- {"snoop", CmdLFSnoop, 0, "['l'|'h'|<divisor>] [trigger threshold]-- Snoop LF (l:125khz, h:134khz)"},
+ {"snoop", CmdLFSnoop, 0, "Snoop LF"},
{"vchdemod", CmdVchDemod, 1, "['clone'] -- Demodulate samples for VeriChip"},
{NULL, NULL, 0, NULL}
};