From 3aaa9c45ba66f79148200294206fdc5215a8fa25 Mon Sep 17 00:00:00 2001 From: wh201906 Date: Thu, 20 Aug 2020 16:40:57 +0800 Subject: [PATCH 1/2] Add downlinks mode for lf t55xx dump --- client/cmdlft55xx.c | 49 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index c64e5ef2..dcef31f0 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -124,6 +124,8 @@ int usage_t55xx_dump(){ PrintAndLog("Options:"); PrintAndLog(" - OPTIONAL password 4bytes (8 hex symbols)"); PrintAndLog(" o - OPTIONAL override, force pwd read despite danger to card"); + PrintAndLog(" r - OPTIONAL downlink encoding '0' fixed bit length (default), '1' long leading reference"); + PrintAndLog(" '2' leading zero, '3' 1 of 4 coding reference"); PrintAndLog(""); PrintAndLog("Examples:"); PrintAndLog(" lf t55xx dump"); @@ -1256,24 +1258,53 @@ int CmdT55xxInfo(const char *Cmd){ int CmdT55xxDump(const char *Cmd){ uint32_t password = 0; - char cmdp = param_getchar(Cmd, 0); + uint8_t cmdp = 0; + uint8_t downlink_mode = 0; + char param_first[10]; + int param_first_len; bool override = false; - if ( cmdp == 'h' || cmdp == 'H') return usage_t55xx_dump(); + bool usepwd = false; - bool usepwd = ( strlen(Cmd) > 0); - if ( usepwd ){ - password = param_get32ex(Cmd, 0, 0, 16); - if (param_getchar(Cmd, 1) =='o' ) - override = true; + param_getstr(Cmd, 0, param_first, 10); + param_first_len = strlen(param_first); + usepwd = (param_first_len > 1); + + if(usepwd) { + password = param_get32ex(Cmd, cmdp, 0, 16); + cmdp++; } + + while(param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch(param_getchar(Cmd, cmdp)) { + case 'h': + case 'H': + return usage_t55xx_dump(); + case 'o': + case 'O': + override = true; + cmdp++; + break; + case 'r': + case 'R': + downlink_mode = param_getchar(Cmd, cmdp+1) - '0'; + if (downlink_mode > 3) downlink_mode = 0; + cmdp +=2; + break; + default: + PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + if (errors) return usage_t55xx_dump(); printT5xxHeader(0); for ( uint8_t i = 0; i <8; ++i) - T55xxReadBlock(i, 0, usepwd, override, password,0); + T55xxReadBlock(i, 0, usepwd, override, password, downlink_mode); printT5xxHeader(1); for ( uint8_t i = 0; i<4; i++) - T55xxReadBlock(i, 1, usepwd, override, password,0); + T55xxReadBlock(i, 1, usepwd, override, password, downlink_mode); return 1; } From 956a725adb0e87b9b06507f33896854ef64de4cf Mon Sep 17 00:00:00 2001 From: wh201906 Date: Sun, 23 Aug 2020 10:10:47 +0800 Subject: [PATCH 2/2] Align the usage message --- client/cmdlft55xx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index dcef31f0..40d86f6e 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -124,8 +124,8 @@ int usage_t55xx_dump(){ PrintAndLog("Options:"); PrintAndLog(" - OPTIONAL password 4bytes (8 hex symbols)"); PrintAndLog(" o - OPTIONAL override, force pwd read despite danger to card"); - PrintAndLog(" r - OPTIONAL downlink encoding '0' fixed bit length (default), '1' long leading reference"); - PrintAndLog(" '2' leading zero, '3' 1 of 4 coding reference"); + PrintAndLog(" r - OPTIONAL downlink encoding '0' fixed bit length (default), '1' long leading reference"); + PrintAndLog(" '2' leading zero, '3' 1 of 4 coding reference"); PrintAndLog(""); PrintAndLog("Examples:"); PrintAndLog(" lf t55xx dump");