diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c index 9f3ce0190..00dfbde7c 100644 --- a/client/src/cmdhf14a.c +++ b/client/src/cmdhf14a.c @@ -29,7 +29,8 @@ #include "cliparser.h" #include "protocols.h" // definitions of ISO14A/7816 protocol, MAGIC_GEN_1A #include "emv/apduinfo.h" // GetAPDUCodeDescription -#include "nfc/ndef.h" // NDEFRecordsDecodeAndPrint +#include "nfc/ndef.h" // NDEFRecordsDecodeAndPrint +#include "cmdnfc.h" // print_type4_cc_info bool APDUInFramingEnable = true; @@ -2314,38 +2315,6 @@ out: return PM3_SUCCESS; } -static void print_cc_info(uint8_t *d, uint8_t n) { - if (n < 0x0F) { - PrintAndLogEx(WARNING, "Not enought bytes read from CC file"); - return; - } - - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, "------------ " _CYAN_("Capability Container file") " ------------"); - PrintAndLogEx(SUCCESS, " len %u bytes (" _GREEN_("0x%02X") ")", d[1], d[1]); - PrintAndLogEx(SUCCESS, " version %s (" _GREEN_("0x%02X") ")", (d[2] == 0x20) ? "v2.0" : "v1.0", d[2]); - - uint16_t maxr = (d[3] << 8 | d[4]); - PrintAndLogEx(SUCCESS, " max bytes read %u bytes ( 0x%04X )", maxr, maxr); - uint16_t maxw = (d[5] << 8 | d[6]); - PrintAndLogEx(SUCCESS, " max bytes write %u bytes ( 0x%04X )", maxw, maxw); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, " NDEF file control TLV {"); - PrintAndLogEx(SUCCESS, " (t) type of file ( %02X )", d[7]); - PrintAndLogEx(SUCCESS, " (v) ( %02X )", d[8]); - PrintAndLogEx(SUCCESS, " file id ( %02X%02X )", d[9], d[10]); - - uint16_t maxndef = (d[11] << 8 | d[12]); - PrintAndLogEx(SUCCESS, " max NDEF filesize %u bytes ( 0x%04X )", maxndef, maxndef); - PrintAndLogEx(SUCCESS, " ----- " _CYAN_("access rights") " -------"); - PrintAndLogEx(SUCCESS, " read ( %02X ) protection: %s", d[13], ((d[13] & 0x80) == 0x80) ? _RED_("enabled") : _GREEN_("disabled")); - PrintAndLogEx(SUCCESS, " write ( %02X ) protection: %s", d[14], ((d[14] & 0x80) == 0x80) ? _RED_("enabled") : _GREEN_("disabled")); - PrintAndLogEx(SUCCESS, " }"); - PrintAndLogEx(SUCCESS, "----------------- " _CYAN_("raw") " -----------------"); - PrintAndLogEx(SUCCESS, "%s", sprint_hex_inrow(d, n)); - PrintAndLogEx(NORMAL, ""); -} - int CmdHF14ANdefRead(const char *Cmd) { CLIParserContext *ctx; CLIParserInit(&ctx, "hf 14a ndefread", @@ -2449,7 +2418,7 @@ int CmdHF14ANdefRead(const char *Cmd) { memcpy(cc_data, response, sizeof(cc_data)); uint8_t file_id[2] = {cc_data[9], cc_data[10]}; - print_cc_info(cc_data, sizeof(cc_data)); + print_type4_cc_info(cc_data, sizeof(cc_data)); uint16_t max_rapdu_size = (cc_data[3] << 8 | cc_data[4]) - 2; max_rapdu_size = max_rapdu_size < sizeof(response) - 2 ? max_rapdu_size : sizeof(response) - 2; diff --git a/client/src/cmdhfst25ta.c b/client/src/cmdhfst25ta.c index eb3e8e184..5d971c443 100644 --- a/client/src/cmdhfst25ta.c +++ b/client/src/cmdhfst25ta.c @@ -20,43 +20,13 @@ #include "cmdhf14a.h" #include "protocols.h" // definitions of ISO14A/7816 protocol #include "emv/apduinfo.h" // GetAPDUCodeDescription -#include "nfc/ndef.h" // NDEFRecordsDecodeAndPrint +#include "nfc/ndef.h" // NDEFRecordsDecodeAndPrint +#include "cmdnfc.h" // print_type4_cc_info #define TIMEOUT 2000 static int CmdHelp(const char *Cmd); -static void print_st25ta_cc_info(uint8_t *d, uint8_t n) { - if (n < 0x0F) { - PrintAndLogEx(WARNING, "Not enough bytes read from system file"); - return; - } - - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, "------------ " _CYAN_("Capability Container file") " ------------"); - PrintAndLogEx(SUCCESS, " len %u bytes (" _GREEN_("0x%02X") ")", d[1], d[1]); - PrintAndLogEx(SUCCESS, " version %s (" _GREEN_("0x%02X") ")", (d[2] == 0x20) ? "v2.0" : "v1.0", d[2]); - - uint16_t maxr = (d[3] << 8 | d[4]); - PrintAndLogEx(SUCCESS, " max bytes read %u bytes ( 0x%04X )", maxr, maxr); - uint16_t maxw = (d[5] << 8 | d[6]); - PrintAndLogEx(SUCCESS, " max bytes write %u bytes ( 0x%04X )", maxw, maxw); - PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(SUCCESS, " NDEF file control TLV {"); - PrintAndLogEx(SUCCESS, " (t) type of file ( %02X )", d[7]); - PrintAndLogEx(SUCCESS, " (v) ( %02X )", d[8]); - PrintAndLogEx(SUCCESS, " file id ( %02X%02X )", d[9], d[10]); - - uint16_t maxndef = (d[11] << 8 | d[12]); - PrintAndLogEx(SUCCESS, " max NDEF filesize %u bytes ( 0x%04X )", maxndef, maxndef); - PrintAndLogEx(SUCCESS, " ----- " _CYAN_("access rights") " -------"); - PrintAndLogEx(SUCCESS, " read ( %02X ) protection: %s", d[13], ((d[13] & 0x80) == 0x80) ? _RED_("enabled") : _GREEN_("disabled")); - PrintAndLogEx(SUCCESS, " write ( %02X ) protection: %s", d[14], ((d[14] & 0x80) == 0x80) ? _RED_("enabled") : _GREEN_("disabled")); - PrintAndLogEx(SUCCESS, " }"); - PrintAndLogEx(SUCCESS, "----------------- " _CYAN_("raw") " -----------------"); - PrintAndLogEx(SUCCESS, "%s", sprint_hex_inrow(d, n)); - PrintAndLogEx(NORMAL, ""); -} static void print_st25ta_system_info(uint8_t *d, uint8_t n) { if (n < 0x12) { PrintAndLogEx(WARNING, "Not enough bytes read from system file"); @@ -250,7 +220,7 @@ static int infoHFST25TA(void) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--- " _CYAN_("Tag Information") " ---------------------------"); PrintAndLogEx(NORMAL, ""); - print_st25ta_cc_info(st_cc_data, sizeof(st_cc_data)); + print_type4_cc_info(st_cc_data, sizeof(st_cc_data)); print_st25ta_system_info(response, resplen - 2); return PM3_SUCCESS; } diff --git a/client/src/cmdnfc.c b/client/src/cmdnfc.c index 45a0a32e3..27c662e45 100644 --- a/client/src/cmdnfc.c +++ b/client/src/cmdnfc.c @@ -18,6 +18,39 @@ #include "cmdhfst25ta.h" #include "cmdhfthinfilm.h" #include "cmdhftopaz.h" +#include "cmdnfc.h" + +void print_type4_cc_info(uint8_t *d, uint8_t n) { + if (n < 0x0F) { + PrintAndLogEx(WARNING, "Not enough bytes read from CC file"); + return; + } + + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, "------------ " _CYAN_("Capability Container file") " ------------"); + PrintAndLogEx(SUCCESS, " len %u bytes (" _GREEN_("0x%02X") ")", d[1], d[1]); + PrintAndLogEx(SUCCESS, " version %s (" _GREEN_("0x%02X") ")", (d[2] == 0x20) ? "v2.0" : "v1.0", d[2]); + + uint16_t maxr = (d[3] << 8 | d[4]); + PrintAndLogEx(SUCCESS, " max bytes read %u bytes ( 0x%04X )", maxr, maxr); + uint16_t maxw = (d[5] << 8 | d[6]); + PrintAndLogEx(SUCCESS, " max bytes write %u bytes ( 0x%04X )", maxw, maxw); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(SUCCESS, " NDEF file control TLV {"); + PrintAndLogEx(SUCCESS, " (t) type of file ( %02X )", d[7]); + PrintAndLogEx(SUCCESS, " (v) ( %02X )", d[8]); + PrintAndLogEx(SUCCESS, " file id ( %02X%02X )", d[9], d[10]); + + uint16_t maxndef = (d[11] << 8 | d[12]); + PrintAndLogEx(SUCCESS, " max NDEF filesize %u bytes ( 0x%04X )", maxndef, maxndef); + PrintAndLogEx(SUCCESS, " ----- " _CYAN_("access rights") " -------"); + PrintAndLogEx(SUCCESS, " read ( %02X ) protection: %s", d[13], ((d[13] & 0x80) == 0x80) ? _RED_("enabled") : _GREEN_("disabled")); + PrintAndLogEx(SUCCESS, " write ( %02X ) protection: %s", d[14], ((d[14] & 0x80) == 0x80) ? _RED_("enabled") : _GREEN_("disabled")); + PrintAndLogEx(SUCCESS, " }"); + PrintAndLogEx(SUCCESS, "----------------- " _CYAN_("raw") " -----------------"); + PrintAndLogEx(SUCCESS, "%s", sprint_hex_inrow(d, n)); + PrintAndLogEx(NORMAL, ""); +} static int CmdNfcDecode(const char *Cmd) { diff --git a/client/src/cmdnfc.h b/client/src/cmdnfc.h index 1064dbe56..26ab36441 100644 --- a/client/src/cmdnfc.h +++ b/client/src/cmdnfc.h @@ -12,5 +12,6 @@ #include "common.h" int CmdNFC(const char *Cmd); +void print_type4_cc_info(uint8_t *d, uint8_t n); #endif