From 6427958e6189b43b6101a2f17fa47624369f9f83 Mon Sep 17 00:00:00 2001 From: tcprst Date: Sat, 5 Dec 2020 19:35:52 -0500 Subject: [PATCH] hf thinfilm - now use cliparser --- client/src/cmdhfthinfilm.c | 106 ++++++++++++------------------------- doc/cliparser_todo.txt | 5 +- 2 files changed, 38 insertions(+), 73 deletions(-) diff --git a/client/src/cmdhfthinfilm.c b/client/src/cmdhfthinfilm.c index 34001be44..9f7f21912 100644 --- a/client/src/cmdhfthinfilm.c +++ b/client/src/cmdhfthinfilm.c @@ -12,7 +12,7 @@ #include #include #include - +#include "cliparser.h" #include "cmdparser.h" // command_t #include "comms.h" #include "cmdtrace.h" @@ -22,28 +22,6 @@ static int CmdHelp(const char *Cmd); -static int usage_thinfilm_info(void) { - PrintAndLogEx(NORMAL, "Usage: hf thinfilm info [h]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " hf thinfilm info"); - return PM3_SUCCESS; -} - -static int usage_thinfilm_sim(void) { - PrintAndLogEx(NORMAL, "Usage: hf thinfilm sim [h] [d ]"); - PrintAndLogEx(NORMAL, "Options:"); - PrintAndLogEx(NORMAL, " h this help"); - PrintAndLogEx(NORMAL, " d bytes to send, in hex"); - PrintAndLogEx(NORMAL, " r raw, provided bytes should include CRC"); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " hf thinfilm sim d B70470726f786d61726b2e636f6d"); - return PM3_SUCCESS; -} - // Printing function based upon the code in libnfc // ref // https://github.com/nfc-tools/libnfc/blob/master/utils/nfc-barcode.c @@ -119,25 +97,16 @@ static int print_barcode(uint8_t *barcode, const size_t barcode_len, bool verbos } static int CmdHfThinFilmInfo(const char *Cmd) { + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf thinfilm info", + "Get info from Thinfilm tags", + "hf thinfilm info"); - uint8_t cmdp = 0; - bool errors = false; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_thinfilm_info(); - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } - } - - //Validations - if (errors) { - usage_thinfilm_info(); - return PM3_EINVARG; - } + void *argtable[] = { + arg_param_begin, + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, true); return infoThinFilm(true); } @@ -168,45 +137,40 @@ int infoThinFilm(bool verbose) { } static int CmdHfThinFilmSim(const char *Cmd) { - uint8_t cmdp = 0; - uint8_t data[512]; - int datalen = 0; + CLIParserContext *ctx; + CLIParserInit(&ctx, "hf thinfilm sim", + "Simulate Thinfilm tag", + "hf thinfilm sim -d B70470726f786d61726b2e636f6d"); + + void *argtable[] = { + arg_param_begin, + arg_str1("d", "data", "", "bytes to send"), + arg_lit0(NULL, "raw", "raw, provided bytes should include CRC"), + arg_param_end + }; + CLIExecWithReturn(ctx, Cmd, argtable, false); + + int data_len = 0; + uint8_t data[512] = {0}; + CLIGetHexWithReturn(ctx, 1, data, &data_len); bool addcrc = true; - bool errors = false; - while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - switch (tolower(param_getchar(Cmd, cmdp))) { - case 'h': - return usage_thinfilm_sim(); - case 'd': - // Retrieve the data - param_gethex_ex(Cmd, cmdp + 1, data, &datalen); - datalen >>= 1; - cmdp += 2; - break; - case 'r': - addcrc = false; - cmdp++; - break; - default: - PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); - errors = true; - break; - } + if (arg_get_lit(ctx, 2)) { + addcrc = false; } - //Validations - if (errors || cmdp == 0 || datalen == 0 || datalen > 512) return usage_thinfilm_sim(); - if (addcrc && datalen <= 510) { + CLIParserFree(ctx); + + if (addcrc && data_len <= 510) { uint8_t b1, b2; - compute_crc(CRC_14443_A, data, datalen, &b1, &b2); - data[datalen++] = b2; - data[datalen++] = b1; + compute_crc(CRC_14443_A, data, data_len, &b1, &b2); + data[data_len++] = b2; + data[data_len++] = b1; } clearCommandBuffer(); - SendCommandNG(CMD_HF_THINFILM_SIMULATE, (uint8_t *)&data, datalen); + SendCommandNG(CMD_HF_THINFILM_SIMULATE, (uint8_t *)&data, data_len); PacketResponseNG resp; PrintAndLogEx(SUCCESS, "press pm3-button to abort simulation"); diff --git a/doc/cliparser_todo.txt b/doc/cliparser_todo.txt index 4e1dc76cd..9eac6d12e 100644 --- a/doc/cliparser_todo.txt +++ b/doc/cliparser_todo.txt @@ -141,8 +141,6 @@ hf mfu otptear hf mfdes enum hf mfdes getuid hf mfdes info -hf thinfilm info -hf thinfilm sim hf topaz info hf topaz reader hf topaz sim @@ -174,11 +172,14 @@ lf simfsk lf simpsk lf simbidir lf sniff +lf tune lf em 410x lf em 4x05 lf em 4x50 +lf hitag info lf hitag reader lf hitag sim +lf hitag sniff lf hitag writer lf hitag dump lf hitag cc