From e9b293e8e9a06bd0bb74f632df90483953936b4f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 17 Mar 2020 13:38:51 +0100 Subject: [PATCH] hf mfp info - textual / colours --- client/cmdhfmfp.c | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/client/cmdhfmfp.c b/client/cmdhfmfp.c index 9c7b9cb3c..a5619756d 100644 --- a/client/cmdhfmfp.c +++ b/client/cmdhfmfp.c @@ -39,6 +39,10 @@ static int CmdHFMFPInfo(const char *Cmd) { if (Cmd && strlen(Cmd) > 0) PrintAndLogEx(WARNING, "command don't have any parameters.\n"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(INFO, "-- Mifare Plus Tag Information ------------------------------"); + PrintAndLogEx(INFO, "-------------------------------------------------------------"); + // info about 14a part infoHF14A(false, false, false); @@ -54,57 +58,62 @@ static int CmdHFMFPInfo(const char *Cmd) { uint64_t select_status = resp.oldarg[0]; // 0: couldn't read, 1: OK, with ATS, 2: OK, no ATS, 3: proprietary Anticollision if (select_status == 1 || select_status == 2) { - PrintAndLogEx(NORMAL, "----------------------------------------------"); - PrintAndLogEx(NORMAL, "Mifare Plus info:"); + PrintAndLogEx(INFO, "-------------------------------------------------------------"); + PrintAndLogEx(INFO, " Fingerprint"); + // MIFARE Type Identification Procedure // https://www.nxp.com/docs/en/application-note/AN10833.pdf uint16_t ATQA = card.atqa[0] + (card.atqa[1] << 8); - if (ATQA == 0x0004) PrintAndLogEx(INFO, "ATQA: Mifare Plus 2k 4bUID"); - if (ATQA == 0x0002) PrintAndLogEx(INFO, "ATQA: Mifare Plus 4k 4bUID"); - if (ATQA == 0x0044) PrintAndLogEx(INFO, "ATQA: Mifare Plus 2k 7bUID"); - if (ATQA == 0x0042) PrintAndLogEx(INFO, "ATQA: Mifare Plus 4k 7bUID"); + if (ATQA == 0x0004) PrintAndLogEx(INFO, " ATQA - " _GREEN_("Mifare Plus 2K") " (4b UID)"); + if (ATQA == 0x0002) PrintAndLogEx(INFO, " ATQA - " _GREEN_("Mifare Plus 4K") " (4b UID)"); + if (ATQA == 0x0044) PrintAndLogEx(INFO, " ATQA - " _GREEN_("Mifare Plus 2K") " (7b UID)"); + if (ATQA == 0x0042) PrintAndLogEx(INFO, " ATQA - " _GREEN_("Mifare Plus 4K") " (7b UID)"); uint8_t SLmode = 0xff; if (card.sak == 0x08) { - PrintAndLogEx(INFO, "SAK: Mifare Plus 2k 7bUID"); + PrintAndLogEx(INFO, " SAK - " _GREEN_("Mifare Plus 2K 7b UID")); if (select_status == 2) SLmode = 1; } if (card.sak == 0x18) { - PrintAndLogEx(INFO, "SAK: Mifare Plus 4k 7bUID"); + PrintAndLogEx(INFO, " SAK - " _GREEN_("Mifare Plus 4K 7b UID")); if (select_status == 2) SLmode = 1; } if (card.sak == 0x10) { - PrintAndLogEx(INFO, "SAK: Mifare Plus 2k"); + PrintAndLogEx(INFO, " SAK - " _GREEN_("Mifare Plus 2K")); if (select_status == 2) SLmode = 2; } if (card.sak == 0x11) { - PrintAndLogEx(INFO, "SAK: Mifare Plus 4k"); + PrintAndLogEx(INFO, " SAK - " _GREEN_("Mifare Plus 4K")); if (select_status == 2) SLmode = 2; } if (card.sak == 0x20) { - PrintAndLogEx(INFO, "SAK: Mifare Plus SL0/SL3 or Mifare desfire"); - if (card.ats_len > 0) { - SLmode = 3; + PrintAndLogEx(INFO, " SAK - " _GREEN_("Mifare Plus SL0/SL3") "or " _GREEN_("Mifare DESFire")); + if (card.ats_len > 0) { + + PrintAndLogEx(INFO, ""); + PrintAndLogEx(INFO, " SL fingerprint"); + SLmode = 3; // check SL0 uint8_t data[250] = {0}; int datalen = 0; // https://github.com/Proxmark/proxmark3/blob/master/client/luascripts/mifarePlus.lua#L161 uint8_t cmd[3 + 16] = {0xa8, 0x90, 0x90, 0x00}; int res = ExchangeRAW14a(cmd, sizeof(cmd), false, false, data, sizeof(data), &datalen, false); + if (!res && datalen > 1 && data[0] == 0x09) { SLmode = 0; } } } - if (SLmode != 0xff) - PrintAndLogEx(INFO, "Mifare Plus SL mode: SL%d", SLmode); + if (SLmode != 0xFF) + PrintAndLogEx(SUCCESS, "\tMifare Plus SL mode: " _YELLOW_("SL%d"), SLmode); else - PrintAndLogEx(WARNING, "Mifare Plus SL mode: unknown("); + PrintAndLogEx(WARNING, "\tMifare Plus SL mode: " _YELLOW_("unknown")); } else { - PrintAndLogEx(INFO, "Mifare Plus info not available."); + PrintAndLogEx(INFO, "\tMifare Plus info not available."); } DropField();