diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 6d4abf82d..ed5802185 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -216,6 +216,7 @@ set (TARGET_SOURCES ${PM3_ROOT}/client/src/uart/uart_posix.c ${PM3_ROOT}/client/src/uart/uart_win32.c ${PM3_ROOT}/client/src/ui/overlays.ui + ${PM3_ROOT}/client/src/aiddesfire.c ${PM3_ROOT}/client/src/aidsearch.c ${PM3_ROOT}/client/src/cmdanalyse.c ${PM3_ROOT}/client/src/cmdcrc.c diff --git a/client/Makefile b/client/Makefile index 0fd3f195a..679926d6a 100644 --- a/client/Makefile +++ b/client/Makefile @@ -410,7 +410,8 @@ POSTCOMPILE = $(MV) -f $(OBJDIR)/$*.Td $(OBJDIR)/$*.d && $(TOUCH) $@ # enumerations # ################ -SRCS = aidsearch.c \ +SRCS = aiddesfire.c \ + aidsearch.c \ cmdanalyse.c \ cmdcrc.c \ cmddata.c \ diff --git a/client/android/CMakeLists.txt b/client/android/CMakeLists.txt index 708833696..3df923c3c 100644 --- a/client/android/CMakeLists.txt +++ b/client/android/CMakeLists.txt @@ -94,6 +94,7 @@ add_library(pm3rrg_rdv4 SHARED ${PM3_ROOT}/client/src/uart/uart_posix.c ${PM3_ROOT}/client/src/uart/uart_win32.c ${PM3_ROOT}/client/src/ui/overlays.ui + ${PM3_ROOT}/client/src/aiddesfire.c ${PM3_ROOT}/client/src/aidsearch.c ${PM3_ROOT}/client/src/cmdanalyse.c ${PM3_ROOT}/client/src/cmdcrc.c diff --git a/client/resources/aid_desfire.json b/client/resources/aid_desfire.json index 9bedab608..c9360ae6a 100644 --- a/client/resources/aid_desfire.json +++ b/client/resources/aid_desfire.json @@ -1,356 +1,355 @@ -[ - { - "AID": "EEEE10", - "Vendor": "NFC Forum", - "Country": "US", - "Name": "NFC Forum NDEF Tag", - "Description": "(FID 03: Capability Container)", - "Type": "ndef" - }, - { - "AID": "D3494F", - "Vendor": "HID", - "Country": "US", - "Name": "SIO DESFire Ev1", - "Description": "Field Encoder", - "Type": "pacs" - }, - { - "AID": "D9494F", - "Vendor": "HID", - "Country": "US", - "Name": "Access control", - "Description": "Field Encoder", - "Type": "pacs" - }, - { - "AID": "53494F", - "Vendor": "HID", - "Country": "US", - "Name": "Access control", - "Description": "HID Factory", - "Type": "pacs" - }, - { - "AID": "4F5931", - "Vendor": "Transport of London", - "Country": "UK", - "Name": "Oyster Card", - "Description": "", - "Type": "transport" - }, - { - "AID": "422201", - "Vendor": "Transport of Istanbul", - "Country": "Turkey", - "Name": "Istanbulkart", - "Description": "", - "Type": "transport" - }, - { - "AID": "F21190", - "Vendor": "Metropolitan Transportation Commission", - "Country": "US", - "Name": "Clipper Card", - "Description": "", - "Type": "transport" - }, - { - "AID": "000357", - "Vendor": "LEGIC", - "Country": "DE", - "Name": "Legic", - "Description": "(FID 02: EF-CONF)", - "Type": "" - }, - { - "AID": "578000", - "Vendor": "NORTIC", - "Country": "", - "Name": "NORTIC Card Issuer", - "Description": "(FID 0C: Card Issuer Header)", - "Type": "transport" - }, - { - "AID": "578001", - "Vendor": "NORTIC", - "Country": "", - "Name": "NORTIC Transport", - "Description": "(FIDs 01: Transport Product Retailer; 02: Transport Service Provider; 03: Transport Special Event; 04: Transport Stored Value; 05: Transport General Event Log; 06: Transport SV Reload Log; 0A: Transport Environment; 0C: Transport Card Holder", - "Type": "transport" - }, - { - "AID": "784000", - "Vendor": "NO1", - "Country": "UAE", - "Name": "Nol Card/Dubai", - "Description": "Nol Card/Dubai", - "Type": "" - }, - { - "AID": "956B19", - "Vendor": "PING PING", - "Country": "", - "Name": "PingPing Tag", - "Description": "PingPing Tag", - "Type": "" - }, - { - "AID": "DB9800", - "Vendor": "PING PING", - "Country": "", - "Name": "PingPing Tag", - "Description": "PingPing Tag", - "Type": "" - }, - { - "AID": "DB9801", - "Vendor": "PING PING", - "Country": "", - "Name": "PingPing Tag", - "Description": "PingPing Tag", - "Type": "" - }, - { - "AID": "DB9802", - "Vendor": "PING PING", - "Country": "", - "Name": "PingPing Tag", - "Description": "PingPing Tag", - "Type": "" - }, - { - "AID": "F21030", - "Vendor": "ORCA Card", - "Country": "", - "Name": "ORCA Card", - "Description": "(FIDs 02: Trip History; 04: current balance)", - "Type": "transport" - }, - { - "AID": "F21190", - "Vendor": "Clipper", - "Country": "US", - "Name": "Clipper Card/San Francisco Bay Area ", - "Description": "(FIDs 02: current balance; 04: Refill History; 08: Card Information; 0E: Trip History) -FFFFFF General Issuer Information (FIDs 00: MAD Version; 01: Card Holder; 02: Card Publisher)", - "Type": "transport" - }, - { - "AID": "F518F0", - "Vendor": "Telenot Electronic GmbH", - "Country": "DE", - "Name": "Telenot Tag", - "Description": "", - "Type": "alarm system" - }, - { - "AID": "F38091", - "Vendor": "Microtronic AG", - "Country": "CH", - "Name": "Microtronic Tag", - "Description": "", - "Type": "payment system" - }, - - { - "AID": "F88280", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "F5217D", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "F48EF1", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535501", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535502", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535503", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535504", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535505", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535506", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535507", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535508", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "535509", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "53550A", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "53550B", - "Vendor": "TU Delft", - "Country": "NL", - "Name": "Uni Delft", - "Description": "", - "Type": "student" - }, - { - "AID": "F001D0", - "Vendor": "Arabako Foru Aldundia", - "Country": "", - "Name": "BAT", - "Description": "", - "Type": "transport" - }, - { - "AID": "05845F", - "Vendor": "InterCard GmbH Kartensysteme", - "Country": "DE", - "Name": "InterCard", - "Description": "Campus Card", - "Type": "student" - }, - { - "AID": "15845F", - "Vendor": "InterCard GmbH Kartensysteme", - "Country": "DE", - "Name": "InterCard", - "Description": "Campus Card", - "Type": "student" - }, - { - "AID": "25845F", - "Vendor": "InterCard GmbH Kartensysteme", - "Country": "DE", - "Name": "InterCard", - "Description": "Campus Card", - "Type": "student" - }, - { - "AID": "35845F", - "Vendor": "InterCard GmbH Kartensysteme", - "Country": "DE", - "Name": "InterCard", - "Description": "Campus Card", - "Type": "student" - }, - { - "AID": "55845F", - "Vendor": "InterCard GmbH Kartensysteme", - "Country": "DE", - "Name": "InterCard", - "Description": "Campus Card", - "Type": "student" - }, - { - "AID": "65845F", - "Vendor": "InterCard GmbH Kartensysteme", - "Country": "DE", - "Name": "InterCard", - "Description": "Campus Card", - "Type": "student" - }, - { - "AID": "75845F", - "Vendor": "InterCard GmbH Kartensysteme", - "Country": "DE", - "Name": "InterCard", - "Description": "Campus Card", - "Type": "student" - }, - { - "AID": "C26001", - "Vendor": "CAR2GO", - "Country": "DE", - "Name": "MemberCard", - "Description": "CAR2GO - Member Card", - "Type": "carsharing" - }, - { - "AID": "2F81F4", - "Vendor": "Gallagher", - "Country": "NZ", - "Name": "Access control", - "Description": "Card Application Directory (CAD)", - "Type": "" - }, - { - "AID": "2081F4", - "Vendor": "Gallagher", - "Country": "NZ", - "Name": "Access control", - "Description": "Cardax Card Data Application", - "Type": "" - } -] +[ + { + "AID": "EEEE10", + "Vendor": "NFC Forum", + "Country": "US", + "Name": "NFC Forum NDEF Tag", + "Description": "(FID 03: Capability Container)", + "Type": "ndef" + }, + { + "AID": "D3494F", + "Vendor": "HID", + "Country": "US", + "Name": "SIO DESFire Ev1", + "Description": "Field Encoder", + "Type": "pacs" + }, + { + "AID": "D9494F", + "Vendor": "HID", + "Country": "US", + "Name": "Access control", + "Description": "Field Encoder", + "Type": "pacs" + }, + { + "AID": "53494F", + "Vendor": "HID", + "Country": "US", + "Name": "Access control", + "Description": "HID Factory", + "Type": "pacs" + }, + { + "AID": "4F5931", + "Vendor": "Transport of London", + "Country": "UK", + "Name": "Oyster Card", + "Description": "", + "Type": "transport" + }, + { + "AID": "422201", + "Vendor": "Transport of Istanbul", + "Country": "Turkey", + "Name": "Istanbulkart", + "Description": "", + "Type": "transport" + }, + { + "AID": "F21190", + "Vendor": "Metropolitan Transportation Commission", + "Country": "US", + "Name": "Clipper Card", + "Description": "", + "Type": "transport" + }, + { + "AID": "000357", + "Vendor": "LEGIC", + "Country": "DE", + "Name": "Legic", + "Description": "(FID 02: EF-CONF)", + "Type": "" + }, + { + "AID": "578000", + "Vendor": "NORTIC", + "Country": "", + "Name": "NORTIC Card Issuer", + "Description": "(FID 0C: Card Issuer Header)", + "Type": "transport" + }, + { + "AID": "578001", + "Vendor": "NORTIC", + "Country": "", + "Name": "NORTIC Transport", + "Description": "(FIDs 01: Transport Product Retailer; 02: Transport Service Provider; 03: Transport Special Event; 04: Transport Stored Value; 05: Transport General Event Log; 06: Transport SV Reload Log; 0A: Transport Environment; 0C: Transport Card Holder", + "Type": "transport" + }, + { + "AID": "784000", + "Vendor": "NO1", + "Country": "UAE", + "Name": "Nol Card/Dubai", + "Description": "Nol Card/Dubai", + "Type": "" + }, + { + "AID": "956B19", + "Vendor": "PING PING", + "Country": "", + "Name": "PingPing Tag", + "Description": "PingPing Tag", + "Type": "" + }, + { + "AID": "DB9800", + "Vendor": "PING PING", + "Country": "", + "Name": "PingPing Tag", + "Description": "PingPing Tag", + "Type": "" + }, + { + "AID": "DB9801", + "Vendor": "PING PING", + "Country": "", + "Name": "PingPing Tag", + "Description": "PingPing Tag", + "Type": "" + }, + { + "AID": "DB9802", + "Vendor": "PING PING", + "Country": "", + "Name": "PingPing Tag", + "Description": "PingPing Tag", + "Type": "" + }, + { + "AID": "F21030", + "Vendor": "ORCA Card", + "Country": "", + "Name": "ORCA Card", + "Description": "(FIDs 02: Trip History; 04: current balance)", + "Type": "transport" + }, + { + "AID": "F21190", + "Vendor": "Clipper", + "Country": "US", + "Name": "Clipper Card/San Francisco Bay Area ", + "Description": "(FIDs 02: current balance; 04: Refill History; 08: Card Information; 0E: Trip History)\\nFFFFFF General Issuer Information (FIDs 00: MAD Version; 01: Card Holder; 02: Card Publisher)", + "Type": "transport" + }, + { + "AID": "F518F0", + "Vendor": "Telenot Electronic GmbH", + "Country": "DE", + "Name": "Telenot Tag", + "Description": "", + "Type": "alarm system" + }, + { + "AID": "F38091", + "Vendor": "Microtronic AG", + "Country": "CH", + "Name": "Microtronic Tag", + "Description": "", + "Type": "payment system" + }, + + { + "AID": "F88280", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "F5217D", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "F48EF1", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535501", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535502", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535503", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535504", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535505", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535506", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535507", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535508", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "535509", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "53550A", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "53550B", + "Vendor": "TU Delft", + "Country": "NL", + "Name": "Uni Delft", + "Description": "", + "Type": "student" + }, + { + "AID": "F001D0", + "Vendor": "Arabako Foru Aldundia", + "Country": "", + "Name": "BAT", + "Description": "", + "Type": "transport" + }, + { + "AID": "05845F", + "Vendor": "InterCard GmbH Kartensysteme", + "Country": "DE", + "Name": "InterCard", + "Description": "Campus Card", + "Type": "student" + }, + { + "AID": "15845F", + "Vendor": "InterCard GmbH Kartensysteme", + "Country": "DE", + "Name": "InterCard", + "Description": "Campus Card", + "Type": "student" + }, + { + "AID": "25845F", + "Vendor": "InterCard GmbH Kartensysteme", + "Country": "DE", + "Name": "InterCard", + "Description": "Campus Card", + "Type": "student" + }, + { + "AID": "35845F", + "Vendor": "InterCard GmbH Kartensysteme", + "Country": "DE", + "Name": "InterCard", + "Description": "Campus Card", + "Type": "student" + }, + { + "AID": "55845F", + "Vendor": "InterCard GmbH Kartensysteme", + "Country": "DE", + "Name": "InterCard", + "Description": "Campus Card", + "Type": "student" + }, + { + "AID": "65845F", + "Vendor": "InterCard GmbH Kartensysteme", + "Country": "DE", + "Name": "InterCard", + "Description": "Campus Card", + "Type": "student" + }, + { + "AID": "75845F", + "Vendor": "InterCard GmbH Kartensysteme", + "Country": "DE", + "Name": "InterCard", + "Description": "Campus Card", + "Type": "student" + }, + { + "AID": "C26001", + "Vendor": "CAR2GO", + "Country": "DE", + "Name": "MemberCard", + "Description": "CAR2GO - Member Card", + "Type": "carsharing" + }, + { + "AID": "2F81F4", + "Vendor": "Gallagher", + "Country": "NZ", + "Name": "Access control", + "Description": "Card Application Directory (CAD)", + "Type": "" + }, + { + "AID": "2081F4", + "Vendor": "Gallagher", + "Country": "NZ", + "Name": "Access control", + "Description": "Cardax Card Data Application", + "Type": "" + } +] diff --git a/client/src/aiddesfire.c b/client/src/aiddesfire.c new file mode 100644 index 000000000..16910f584 --- /dev/null +++ b/client/src/aiddesfire.c @@ -0,0 +1,137 @@ +//----------------------------------------------------------------------------- +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// AID DESFire functions +//----------------------------------------------------------------------------- + +#include "aiddesfire.h" +//#include "ui.h" +//#include "commonutil.h" // ARRAYLEN +#include "pm3_cmd.h" +//#include "util.h" +#include "fileutils.h" +#include "jansson.h" + +// https://www.nxp.com/docs/en/application-note/AN10787.pdf +static json_t *df_known_aids = NULL; + +static int open_aiddf_file(json_t **root, bool verbose) { + + char *path; + int res = searchFile(&path, RESOURCES_SUBDIR, "aid_desfire", ".json", true); + if (res != PM3_SUCCESS) { + return PM3_EFILE; + } + + int retval = PM3_SUCCESS; + json_error_t error; + + *root = json_load_file(path, 0, &error); + if (!*root) { + PrintAndLogEx(ERR, "json (%s) error on line %d: %s", path, error.line, error.text); + retval = PM3_ESOFT; + goto out; + } + + if (!json_is_array(*root)) { + PrintAndLogEx(ERR, "Invalid json (%s) format. root must be an array.", path); + retval = PM3_ESOFT; + goto out; + } + + if (verbose) + PrintAndLogEx(SUCCESS, "Loaded file " _YELLOW_("`%s`") " (%s) %zu records.", path, _GREEN_("ok"), json_array_size(*root)); +out: + free(path); + return retval; +} + +static int close_aiddf_file(json_t *root) { + json_decref(root); + return PM3_SUCCESS; +} + +static const char *aiddf_json_get_str(json_t *data, const char *name) { + + json_t *jstr = json_object_get(data, name); + if (jstr == NULL) + return NULL; + + if (!json_is_string(jstr)) { + PrintAndLogEx(WARNING, _YELLOW_("`%s`") " is not a string", name); + return NULL; + } + + const char *cstr = json_string_value(jstr); + if (strlen(cstr) == 0) + return NULL; + + return cstr; +} + +static int print_aiddf_description(json_t *root, uint8_t aid[3], char *fmt, bool verbose) { + char laid[7] = {0}; + sprintf(laid, "%02x%02x%02x", aid[2], aid[1], aid[0]); // must be lowercase + + json_t *elm = NULL; + + for (uint32_t idx = 0; idx < json_array_size(root); idx++) { + json_t *data = json_array_get(root, idx); + if (!json_is_object(data)) { + PrintAndLogEx(ERR, "data [%d] is not an object\n", idx); + continue; + } + const char *faid = aiddf_json_get_str(data, "AID"); + char lfaid[strlen(faid) + 1]; + strcpy(lfaid, faid); + str_lower(lfaid); + if (strcmp(laid, lfaid) == 0) { + elm = data; + break; + } + } + + if (elm == NULL) { + PrintAndLogEx(INFO, fmt, " (unknown)"); + return PM3_ENODATA; + } + const char *vaid = aiddf_json_get_str(elm, "AID"); + const char *vendor = aiddf_json_get_str(elm, "Vendor"); + const char *country = aiddf_json_get_str(elm, "Country"); + const char *name = aiddf_json_get_str(elm, "Name"); + const char *description = aiddf_json_get_str(elm, "Description"); + const char *type = aiddf_json_get_str(elm, "Type"); + + if (name && vendor) { + char result[4 + strlen(name) + strlen(vendor)]; + sprintf(result, " %s [%s]", name, vendor); + PrintAndLogEx(INFO, fmt, result); + } + + if (verbose) { + PrintAndLogEx(SUCCESS, " AID: %s", vaid); + if (name) + PrintAndLogEx(SUCCESS, " Name: %s", name); + if (description) + PrintAndLogEx(SUCCESS, " Description: %s", description); + if (type) + PrintAndLogEx(SUCCESS, " Type: %s", type); + if (vendor) + PrintAndLogEx(SUCCESS, " Vendor: %s", vendor); + if (country) + PrintAndLogEx(SUCCESS, " Country: %s", country); + } + return PM3_SUCCESS; +} + +int AIDDFDecodeAndPrint(uint8_t aid[3]) { + open_aiddf_file(&df_known_aids, false); + + char fmt[50]; + sprintf(fmt, " DF AID Function %02X%02X%02X :" _YELLOW_("%s"), aid[2], aid[1], aid[0], "%s"); + print_aiddf_description(df_known_aids, aid, fmt, false); + close_aiddf_file(df_known_aids); + return PM3_SUCCESS; +} diff --git a/client/src/aiddesfire.h b/client/src/aiddesfire.h new file mode 100644 index 000000000..bb67dab83 --- /dev/null +++ b/client/src/aiddesfire.h @@ -0,0 +1,16 @@ +//----------------------------------------------------------------------------- +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// AID DESFire functions +//----------------------------------------------------------------------------- + +#ifndef _AIDDESFIRE_H_ +#define _AIDDESFIRE_H_ + +#include "common.h" + +int AIDDFDecodeAndPrint(uint8_t aid[3]); + +#endif // _AIDDESFIRE_H_ diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index ff2656c33..ae2049e83 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -34,6 +34,7 @@ #include "mifare/ndef.h" // NDEF #include "mifare/mad.h" #include "generator.h" +#include "aiddesfire.h" #define MAX_KEY_LEN 24 #define MAX_KEYS_LIST_LEN 1024 @@ -3612,6 +3613,8 @@ static int CmdHF14ADesDump(const char *Cmd) { PrintAndLogEx(SUCCESS, " AID mapped to MIFARE Classic AID (MAD): " _YELLOW_("%02X"), short_aid); PrintAndLogEx(SUCCESS, " MAD AID Cluster 0x%02X : " _YELLOW_("%s"), short_aid >> 8, cluster_to_text(short_aid >> 8)); MADDFDecodeAndPrint(short_aid); + } else { + AIDDFDecodeAndPrint(aid); } for (uint8_t m = 0; m < dfname_count; m++) { if (dfnames[m].aid[0] == aid[0] && dfnames[m].aid[1] == aid[1] && dfnames[m].aid[2] == aid[2]) { @@ -3782,6 +3785,8 @@ static int CmdHF14ADesEnumApplications(const char *Cmd) { PrintAndLogEx(SUCCESS, " AID mapped to MIFARE Classic AID (MAD): " _YELLOW_("%02X"), short_aid); PrintAndLogEx(SUCCESS, " MAD AID Cluster 0x%02X : " _YELLOW_("%s"), short_aid >> 8, cluster_to_text(short_aid >> 8)); MADDFDecodeAndPrint(short_aid); + } else { + AIDDFDecodeAndPrint(aid); } for (uint8_t m = 0; m < dfname_count; m++) { if (dfnames[m].aid[0] == aid[0] && dfnames[m].aid[1] == aid[1] && dfnames[m].aid[2] == aid[2]) {