mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-22 22:33:48 -07:00
Added ability to emulate paradox tag.
This commit is contained in:
parent
8841991b29
commit
5192c5f5d5
1 changed files with 26 additions and 4 deletions
|
@ -254,7 +254,7 @@ static int CmdParadoxClone(const char *Cmd) {
|
||||||
CLIParserContext *ctx;
|
CLIParserContext *ctx;
|
||||||
CLIParserInit(&ctx, "lf paradox clone",
|
CLIParserInit(&ctx, "lf paradox clone",
|
||||||
"clone a paradox tag to a T55x7, Q5/T5555 or EM4305/4469 tag.",
|
"clone a paradox tag to a T55x7, Q5/T5555 or EM4305/4469 tag.",
|
||||||
"lf paradox clone --fc 96 --cn 40426 -> encode for T55x7 tag with fc and cn\n"
|
"lf paradox clone --fc 96 --cn 40426 [--q5|--em] -> encode for T55x7 tag with fc and cn\n"
|
||||||
"lf paradox clone --raw 0f55555695596a6a9999a59a -> encode for T55x7 tag\n"
|
"lf paradox clone --raw 0f55555695596a6a9999a59a -> encode for T55x7 tag\n"
|
||||||
"lf paradox clone --raw 0f55555695596a6a9999a59a --q5 -> encode for Q5/T5555 tag\n"
|
"lf paradox clone --raw 0f55555695596a6a9999a59a --q5 -> encode for Q5/T5555 tag\n"
|
||||||
"lf paradox clone --raw 0f55555695596a6a9999a59a --em -> encode for EM4305/4469"
|
"lf paradox clone --raw 0f55555695596a6a9999a59a --em -> encode for EM4305/4469"
|
||||||
|
@ -353,12 +353,15 @@ static int CmdParadoxSim(const char *Cmd) {
|
||||||
CLIParserInit(&ctx, "lf paradox sim",
|
CLIParserInit(&ctx, "lf paradox sim",
|
||||||
"Enables simulation of paradox card with specified card number.\n"
|
"Enables simulation of paradox card with specified card number.\n"
|
||||||
"Simulation runs until the button is pressed or another USB command is issued.",
|
"Simulation runs until the button is pressed or another USB command is issued.",
|
||||||
"lf paradox sim --raw 0f55555695596a6a9999a59a"
|
"lf paradox sim --raw 0f55555695596a6a9999a59a -> simulate tag"
|
||||||
|
"lf paradox clone --fc 96 --cn 40426 -> simulate tag with fc and cn\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
arg_param_begin,
|
arg_param_begin,
|
||||||
arg_str0("r", "raw", "<hex>", " raw hex data. 12 bytes"),
|
arg_str0("r", "raw", "<hex>", " raw hex data. 12 bytes"),
|
||||||
|
arg_u64_0(NULL, "fc", "<dec>", "facility code"),
|
||||||
|
arg_u64_0(NULL, "cn", "<dec>", "card number"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||||
|
@ -367,13 +370,32 @@ static int CmdParadoxSim(const char *Cmd) {
|
||||||
// skip first block, 3*4 = 12 bytes left
|
// skip first block, 3*4 = 12 bytes left
|
||||||
uint8_t raw[12] = {0};
|
uint8_t raw[12] = {0};
|
||||||
CLIGetHexWithReturn(ctx, 1, raw, &raw_len);
|
CLIGetHexWithReturn(ctx, 1, raw, &raw_len);
|
||||||
|
|
||||||
|
uint32_t fc = arg_get_u32_def(ctx, 2, 0);
|
||||||
|
uint32_t cn = arg_get_u32_def(ctx, 3, 0);
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
|
if ((fc || cn) && raw_len != 0) {
|
||||||
|
PrintAndLogEx(FAILED, "Can't specify both FC/CN and RAW at the same time");
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fc > 999 || cn > 99999){
|
||||||
|
PrintAndLogEx(FAILED, "FC has a max value of 999 and CN has a max value of 99999");
|
||||||
|
return PM3_EINVARG;
|
||||||
|
}
|
||||||
|
if (raw_len != 0) {
|
||||||
if (raw_len != 12) {
|
if (raw_len != 12) {
|
||||||
PrintAndLogEx(ERR, "Data must be 12 bytes (24 HEX characters) %d", raw_len);
|
PrintAndLogEx(ERR, "Data must be 12 bytes (24 HEX characters) %d", raw_len);
|
||||||
return PM3_EINVARG;
|
return PM3_EINVARG;
|
||||||
}
|
}
|
||||||
|
} else{
|
||||||
|
uint32_t blocks[4] = {0};
|
||||||
|
GetParadoxBits(fc,cn,blocks);
|
||||||
|
for (uint8_t i = 1; i < ARRAYLEN(blocks); i++) {
|
||||||
|
num_to_bytes(blocks[i], sizeof(uint32_t), raw + ((i - 1) * 4));
|
||||||
|
}
|
||||||
|
}
|
||||||
PrintAndLogEx(SUCCESS, "Simulating Paradox - raw " _YELLOW_("%s"), sprint_hex_inrow(raw, sizeof(raw)));
|
PrintAndLogEx(SUCCESS, "Simulating Paradox - raw " _YELLOW_("%s"), sprint_hex_inrow(raw, sizeof(raw)));
|
||||||
|
|
||||||
uint8_t bs[sizeof(raw) * 8];
|
uint8_t bs[sizeof(raw) * 8];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue