mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 22:03:42 -07:00
lf em 410x reader - new param "-b" to break after once, use together with continouse mode.\n lf em 410x spoof - works again
This commit is contained in:
parent
72a837d813
commit
ea7d4ae496
1 changed files with 36 additions and 33 deletions
|
@ -320,11 +320,11 @@ static int CmdEM410xDemod(const char *Cmd) {
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_u64_0(NULL, "clk", "<dec>", "optional - clock (default autodetect)"),
|
arg_u64_0(NULL, "clk", "<dec>", "clock (default autodetect)"),
|
||||||
arg_u64_0(NULL, "err", "<dec>", "optional - maximum allowed errors (default 100)"),
|
arg_u64_0(NULL, "err", "<dec>", "maximum allowed errors (default 100)"),
|
||||||
arg_u64_0(NULL, "len", "<dec>", "optional - maximum length"),
|
arg_u64_0(NULL, "len", "<dec>", "maximum length"),
|
||||||
arg_lit0("i", "invert", "optional - invert output"),
|
arg_lit0("i", "invert", "invert output"),
|
||||||
arg_lit0("a", "amp", "optional - amplify signal"),
|
arg_lit0("a", "amp", "amplify signal"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, true);
|
CLIExecWithReturn(ctx, Cmd, argtable, true);
|
||||||
|
@ -359,12 +359,13 @@ static int CmdEM410xReader(const char *Cmd) {
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_u64_0(NULL, "clk", "<dec>", "optional - clock (default autodetect)"),
|
arg_u64_0(NULL, "clk", "<dec>", "clock (default autodetect)"),
|
||||||
arg_u64_0(NULL, "err", "<dec>", "optional - maximum allowed errors (default 100)"),
|
arg_u64_0(NULL, "err", "<dec>", "maximum allowed errors (default 100)"),
|
||||||
arg_u64_0(NULL, "len", "<dec>", "optional - maximum length"),
|
arg_u64_0(NULL, "len", "<dec>", "maximum length"),
|
||||||
arg_lit0("i", "invert", "optional - invert output"),
|
arg_lit0("i", "invert", "invert output"),
|
||||||
arg_lit0("a", "amp", "optional - amplify signal"),
|
arg_lit0("a", "amp", "amplify signal"),
|
||||||
arg_lit0("@", NULL, "optional - continuous reader mode"),
|
arg_lit0("b", NULL, "break on first found"),
|
||||||
|
arg_lit0("@", NULL, "continuous reader mode"),
|
||||||
arg_lit0("v", "verbose", "verbose output"),
|
arg_lit0("v", "verbose", "verbose output"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
|
@ -375,8 +376,9 @@ static int CmdEM410xReader(const char *Cmd) {
|
||||||
size_t max_len = arg_get_u32_def(ctx, 3, 0);
|
size_t max_len = arg_get_u32_def(ctx, 3, 0);
|
||||||
bool invert = arg_get_lit(ctx, 4);
|
bool invert = arg_get_lit(ctx, 4);
|
||||||
bool amplify = arg_get_lit(ctx, 5);
|
bool amplify = arg_get_lit(ctx, 5);
|
||||||
bool cm = arg_get_lit(ctx, 6);
|
bool break_first = arg_get_lit(ctx, 6);
|
||||||
bool verbose = arg_get_lit(ctx, 7);
|
bool cm = arg_get_lit(ctx, 7);
|
||||||
|
bool verbose = arg_get_lit(ctx, 8);
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
if (cm) {
|
if (cm) {
|
||||||
|
@ -388,6 +390,10 @@ static int CmdEM410xReader(const char *Cmd) {
|
||||||
uint64_t lo = 0;
|
uint64_t lo = 0;
|
||||||
lf_read(false, 12288);
|
lf_read(false, 12288);
|
||||||
AskEm410xDemod(clk, invert, max_err, max_len, amplify, &hi, &lo, verbose);
|
AskEm410xDemod(clk, invert, max_err, max_len, amplify, &hi, &lo, verbose);
|
||||||
|
|
||||||
|
if (break_first && g_em410xid != 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
} while (cm && !kbd_enter_pressed());
|
} while (cm && !kbd_enter_pressed());
|
||||||
|
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
|
@ -406,8 +412,8 @@ static int CmdEM410xSim(const char *Cmd) {
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_u64_0(NULL, "clk", "<dec>", "optional - clock [32|64] (default 64)"),
|
arg_u64_0(NULL, "clk", "<dec>", "<32|64> clock (default 64)"),
|
||||||
arg_str1("i", "id", "<hex>", "ID number (5 hex bytes)"),
|
arg_str1(NULL, "id", "<hex>", "ID number (5 hex bytes)"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||||
|
@ -425,11 +431,8 @@ static int CmdEM410xSim(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, "Starting simulating UID "_YELLOW_("%s")" clock: "_YELLOW_("%d"), sprint_hex_inrow(uid, sizeof(uid)), clk);
|
PrintAndLogEx(SUCCESS, "Starting simulating UID "_YELLOW_("%s")" clock: "_YELLOW_("%d"), sprint_hex_inrow(uid, sizeof(uid)), clk);
|
||||||
PrintAndLogEx(SUCCESS, "Press pm3-button to abort simulation");
|
|
||||||
|
|
||||||
em410x_construct_emul_graph(uid, clk);
|
em410x_construct_emul_graph(uid, clk);
|
||||||
|
CmdLFSim("");
|
||||||
CmdLFSim("0"); // 240 start_gap.
|
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,8 +448,8 @@ static int CmdEM410xBrute(const char *Cmd) {
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_u64_1(NULL, "clk", "<dec>", "optional - clock [32|64] (default 64)"),
|
arg_u64_0(NULL, "clk", "<dec>", "<32|64> clock (default 64)"),
|
||||||
arg_u64_1(NULL, "delay", "<dec>", "optional - pause delay in milliseconds between UIDs simulation (default 1000ms)"),
|
arg_u64_0(NULL, "delay", "<dec>", "pause delay in milliseconds between UIDs simulation (default 1000ms)"),
|
||||||
arg_str1("f", "file", "<hex>", "file with UIDs in HEX format, one per line"),
|
arg_str1("f", "file", "<hex>", "file with UIDs in HEX format, one per line"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
|
@ -536,7 +539,8 @@ static int CmdEM410xBrute(const char *Cmd) {
|
||||||
uint8_t testuid[5];
|
uint8_t testuid[5];
|
||||||
for (uint32_t c = 0; c < uidcnt; ++c) {
|
for (uint32_t c = 0; c < uidcnt; ++c) {
|
||||||
if (kbd_enter_pressed()) {
|
if (kbd_enter_pressed()) {
|
||||||
PrintAndLogEx(WARNING, "\nAborted via keyboard!\n");
|
SendCommandNG(CMD_BREAK_LOOP, NULL, 0);
|
||||||
|
PrintAndLogEx(INFO, "\nAborted via keyboard!\n");
|
||||||
free(uidblock);
|
free(uidblock);
|
||||||
return PM3_EOPABORTED;
|
return PM3_EOPABORTED;
|
||||||
}
|
}
|
||||||
|
@ -549,9 +553,7 @@ static int CmdEM410xBrute(const char *Cmd) {
|
||||||
);
|
);
|
||||||
|
|
||||||
em410x_construct_emul_graph(testuid, clk);
|
em410x_construct_emul_graph(testuid, clk);
|
||||||
|
CmdLFSim(""); //240 start_gap.
|
||||||
CmdLFSim("0"); //240 start_gap.
|
|
||||||
|
|
||||||
msleep(delay);
|
msleep(delay);
|
||||||
}
|
}
|
||||||
free(uidblock);
|
free(uidblock);
|
||||||
|
@ -575,9 +577,10 @@ static int CmdEM410xSpoof(const char *Cmd) {
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
// loops if the captured ID was in XL-format.
|
// loops if the captured ID was in XL-format.
|
||||||
CmdEM410xReader("-@");
|
g_em410xid = 0;
|
||||||
PrintAndLogEx(SUCCESS, "# Replaying captured ID: "_YELLOW_("%010" PRIx64), g_em410xid);
|
CmdEM410xReader("-b@");
|
||||||
CmdLFaskSim("");
|
PrintAndLogEx(SUCCESS, "Replaying captured ID "_YELLOW_("%010" PRIx64), g_em410xid);
|
||||||
|
CmdLFSim("");
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -585,15 +588,15 @@ static int CmdEM410xClone(const char *Cmd) {
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf em 410x clone",
|
CLIParserInit(&ctx, "lf em 410x clone",
|
||||||
"Writes EM410x ID to a T55x7 or Q5/T5555 tag",
|
"Writes EM410x ID to a T55x7 or Q5/T5555 tag",
|
||||||
"lf em 410x clone --uid 0F0368568B -> write id to T55x7 tag\n"
|
"lf em 410x clone --id 0F0368568B -> write id to T55x7 tag\n"
|
||||||
"lf em 410x clone --uid 0F0368568B --q5 -> write id to Q5/T5555 tag"
|
"lf em 410x clone --id 0F0368568B --q5 -> write id to Q5/T5555 tag"
|
||||||
);
|
);
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_u64_0(NULL, "clk", "<dec>", "optional - clock <16|32|40|64> (default 64)"),
|
arg_u64_0(NULL, "clk", "<dec>", "<16|32|40|64> clock (default 64)"),
|
||||||
arg_str1("u", "uid", "<hex>", "ID number (5 hex bytes)"),
|
arg_str1(NULL, "id", "<hex>", "ID number (5 hex bytes)"),
|
||||||
arg_lit0(NULL, "q5", "optional - specify writing to Q5/T5555 tag"),
|
arg_lit0(NULL, "q5", "specify writing to Q5/T5555 tag"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue