mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-22 06:13:51 -07:00
lf nexwatch - unknown credential identified with a new magic value
This commit is contained in:
parent
7cd278290a
commit
bb722fa1f8
1 changed files with 28 additions and 12 deletions
|
@ -184,7 +184,11 @@ int demodNexWatch(bool verbose) {
|
||||||
char desc[10];
|
char desc[10];
|
||||||
uint8_t chk;
|
uint8_t chk;
|
||||||
} nexwatch_magic_t;
|
} nexwatch_magic_t;
|
||||||
nexwatch_magic_t items[] = { {0xBE, "Quadrakey", 0}, {0x88, "Nexkey", 0} };
|
nexwatch_magic_t items[] = {
|
||||||
|
{0xBE, "Quadrakey", 0},
|
||||||
|
{0x88, "Nexkey", 0},
|
||||||
|
{0x86, "Russian", 0}
|
||||||
|
};
|
||||||
|
|
||||||
uint8_t m_idx;
|
uint8_t m_idx;
|
||||||
for (m_idx = 0; m_idx < ARRAYLEN(items); m_idx++) {
|
for (m_idx = 0; m_idx < ARRAYLEN(items); m_idx++) {
|
||||||
|
@ -264,10 +268,11 @@ static int CmdNexWatchClone(const char *Cmd) {
|
||||||
CLIParserInit(&ctx, "lf nexwatch clone",
|
CLIParserInit(&ctx, "lf nexwatch clone",
|
||||||
"clone a Nexwatch tag to a T55x7, Q5/T5555 or EM4305/4469 tag.\n"
|
"clone a Nexwatch tag to a T55x7, Q5/T5555 or EM4305/4469 tag.\n"
|
||||||
"You can use raw hex values or create a credential based on id, mode\n"
|
"You can use raw hex values or create a credential based on id, mode\n"
|
||||||
"and type of credential (Nexkey / Quadrakey)",
|
"and type of credential (Nexkey / Quadrakey / Russian)",
|
||||||
"lf nexwatch clone --raw 5600000000213C9F8F150C00\n"
|
"lf nexwatch clone --raw 5600000000213C9F8F150C00\n"
|
||||||
"lf nexwatch clone --cn 521512301 -m 1 -n -> Nexkey credential\n"
|
"lf nexwatch clone --cn 521512301 -m 1 --nc -> Nexkey credential\n"
|
||||||
"lf nexwatch clone --cn 521512301 -m 1 -q -> Quadrakey credential\n"
|
"lf nexwatch clone --cn 521512301 -m 1 --qc -> Quadrakey credential\n"
|
||||||
|
"lf nexwatch clone --cn 521512301 -m 1 --uc -> Unknown credential\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
|
@ -275,8 +280,9 @@ static int CmdNexWatchClone(const char *Cmd) {
|
||||||
arg_str0("r", "raw", "<hex>", "raw hex data. 12 bytes"),
|
arg_str0("r", "raw", "<hex>", "raw hex data. 12 bytes"),
|
||||||
arg_u64_0(NULL, "cn", "<dec>", "card id"),
|
arg_u64_0(NULL, "cn", "<dec>", "card id"),
|
||||||
arg_u64_0("m", "mode", "<dec>", "mode (decimal) (0-15, defaults to 1)"),
|
arg_u64_0("m", "mode", "<dec>", "mode (decimal) (0-15, defaults to 1)"),
|
||||||
arg_lit0("n", NULL, "Nexkey credential"),
|
arg_lit0(NULL, "nc", "Nexkey credential"),
|
||||||
arg_lit0("q", NULL, "Quadrakey credential"),
|
arg_lit0(NULL, "qc", "Quadrakey credential"),
|
||||||
|
arg_lit0(NULL, "uc", "Unknown credential"),
|
||||||
arg_lit0(NULL, "q5", "optional - specify writing to Q5/T5555 tag"),
|
arg_lit0(NULL, "q5", "optional - specify writing to Q5/T5555 tag"),
|
||||||
arg_lit0(NULL, "em", "optional - specify writing to EM4305/4469 tag"),
|
arg_lit0(NULL, "em", "optional - specify writing to EM4305/4469 tag"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
|
@ -292,8 +298,9 @@ static int CmdNexWatchClone(const char *Cmd) {
|
||||||
uint32_t mode = arg_get_u32_def(ctx, 3, -1);
|
uint32_t mode = arg_get_u32_def(ctx, 3, -1);
|
||||||
bool use_nexkey = arg_get_lit(ctx, 4);
|
bool use_nexkey = arg_get_lit(ctx, 4);
|
||||||
bool use_quadrakey = arg_get_lit(ctx, 5);
|
bool use_quadrakey = arg_get_lit(ctx, 5);
|
||||||
bool q5 = arg_get_lit(ctx, 6);
|
bool use_unk = arg_get_lit(ctx, 6);
|
||||||
bool em = arg_get_lit(ctx, 7);
|
bool q5 = arg_get_lit(ctx, 7);
|
||||||
|
bool em = arg_get_lit(ctx, 8);
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
if (use_nexkey && use_quadrakey) {
|
if (use_nexkey && use_quadrakey) {
|
||||||
|
@ -335,6 +342,9 @@ static int CmdNexWatchClone(const char *Cmd) {
|
||||||
if (use_quadrakey)
|
if (use_quadrakey)
|
||||||
magic = 0xBE;
|
magic = 0xBE;
|
||||||
|
|
||||||
|
if (use_unk)
|
||||||
|
magic = 0x86;
|
||||||
|
|
||||||
uint32_t blocks[4];
|
uint32_t blocks[4];
|
||||||
|
|
||||||
//Nexwatch - compat mode, PSK, data rate 40, 3 data blocks
|
//Nexwatch - compat mode, PSK, data rate 40, 3 data blocks
|
||||||
|
@ -385,8 +395,9 @@ static int CmdNexWatchSim(const char *Cmd) {
|
||||||
"You can use raw hex values or create a credential based on id, mode\n"
|
"You can use raw hex values or create a credential based on id, mode\n"
|
||||||
"and type of credential (Nexkey/Quadrakey)",
|
"and type of credential (Nexkey/Quadrakey)",
|
||||||
"lf nexwatch sim --raw 5600000000213C9F8F150C00\n"
|
"lf nexwatch sim --raw 5600000000213C9F8F150C00\n"
|
||||||
"lf nexwatch sim --cn 521512301 -m 1 -n -> Nexkey credential\n"
|
"lf nexwatch sim --cn 521512301 -m 1 --nc -> Nexkey credential\n"
|
||||||
"lf nexwatch sim --cn 521512301 -m 1 -q -> Quadrakey credential"
|
"lf nexwatch sim --cn 521512301 -m 1 --qc -> Quadrakey credential\n"
|
||||||
|
"lf nexwatch sim --cn 521512301 -m 1 --uc -> Unknown credential\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
void *argtable[] = {
|
void *argtable[] = {
|
||||||
|
@ -394,8 +405,9 @@ static int CmdNexWatchSim(const char *Cmd) {
|
||||||
arg_str0("r", "raw", "<hex>", "raw hex data. 12 bytes"),
|
arg_str0("r", "raw", "<hex>", "raw hex data. 12 bytes"),
|
||||||
arg_u64_0(NULL, "cn", "<dec>", "card id"),
|
arg_u64_0(NULL, "cn", "<dec>", "card id"),
|
||||||
arg_u64_0("m", "mode", "<dec>", "mode (decimal) (0-15, defaults to 1)"),
|
arg_u64_0("m", "mode", "<dec>", "mode (decimal) (0-15, defaults to 1)"),
|
||||||
arg_lit0("n", NULL, "Nexkey credential"),
|
arg_lit0(NULL, "nc", "Nexkey credential"),
|
||||||
arg_lit0("q", NULL, "Quadrakey credential"),
|
arg_lit0(NULL, "qc", "Quadrakey credential"),
|
||||||
|
arg_lit0(NULL, "uc", "Unknown credential"),
|
||||||
arg_param_end
|
arg_param_end
|
||||||
};
|
};
|
||||||
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
CLIExecWithReturn(ctx, Cmd, argtable, false);
|
||||||
|
@ -409,6 +421,7 @@ static int CmdNexWatchSim(const char *Cmd) {
|
||||||
uint32_t mode = arg_get_u32_def(ctx, 3, -1);
|
uint32_t mode = arg_get_u32_def(ctx, 3, -1);
|
||||||
bool use_nexkey = arg_get_lit(ctx, 4);
|
bool use_nexkey = arg_get_lit(ctx, 4);
|
||||||
bool use_quadrakey = arg_get_lit(ctx, 5);
|
bool use_quadrakey = arg_get_lit(ctx, 5);
|
||||||
|
bool use_unk = arg_get_lit(ctx, 6);
|
||||||
CLIParserFree(ctx);
|
CLIParserFree(ctx);
|
||||||
|
|
||||||
if (use_nexkey && use_quadrakey) {
|
if (use_nexkey && use_quadrakey) {
|
||||||
|
@ -444,6 +457,9 @@ static int CmdNexWatchSim(const char *Cmd) {
|
||||||
if (use_quadrakey)
|
if (use_quadrakey)
|
||||||
magic = 0xBE;
|
magic = 0xBE;
|
||||||
|
|
||||||
|
if (use_unk)
|
||||||
|
magic = 0x86;
|
||||||
|
|
||||||
if (use_raw == false) {
|
if (use_raw == false) {
|
||||||
uint8_t parity = nexwatch_parity(raw + 5) & 0xF;
|
uint8_t parity = nexwatch_parity(raw + 5) & 0xF;
|
||||||
raw[9] |= parity;
|
raw[9] |= parity;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue