From cd760e05e7a49466bfd12819074329b9ddb5da16 Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Thu, 29 Jul 2021 17:22:51 +0300 Subject: [PATCH] detailed print settings --- client/src/cmdhfmfdes.c | 9 ++++--- client/src/mifare/desfirecore.c | 44 +++++++++++++++++++++++++++++++++ client/src/mifare/desfirecore.h | 1 + 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 8ee3a0a4b..c825b4a3c 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -6707,6 +6707,7 @@ static int CmdHF14ADesDump(const char *Cmd) { return res; } + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "Application " _CYAN_("%06x") " have " _GREEN_("%zu") " files", appid, filescount); res = PM3_SUCCESS; @@ -6722,14 +6723,14 @@ static int CmdHF14ADesDump(const char *Cmd) { PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "--------------------------------- " _CYAN_("File %02x") " ----------------------------------", FileList[i].fileNum); - PrintAndLogEx(SUCCESS, "File ID : " _GREEN_("%02x"), FileList[i].fileNum); + PrintAndLogEx(SUCCESS, "File ID : " _GREEN_("%02x"), FileList[i].fileNum); if (isopresent) { if (FileList[i].fileISONum != 0) - PrintAndLogEx(SUCCESS, "File ISO ID: %04x", FileList[i].fileISONum); + PrintAndLogEx(SUCCESS, "File ISO ID : %04x", FileList[i].fileISONum); else - PrintAndLogEx(SUCCESS, "File ISO ID: " _YELLOW_("n/a")); + PrintAndLogEx(SUCCESS, "File ISO ID : " _YELLOW_("n/a")); } - DesfirePrintFileSettingsOneLine(&FileList[i].fileSettings); + DesfirePrintFileSettingsExtended(&FileList[i].fileSettings); res = DesfileReadFileAndPrint(&dctx, FileList[i].fileNum, RFTAuto, 0, 0, noauth, verbose); } diff --git a/client/src/mifare/desfirecore.c b/client/src/mifare/desfirecore.c index 162cf6267..20c5ceb1b 100644 --- a/client/src/mifare/desfirecore.c +++ b/client/src/mifare/desfirecore.c @@ -1567,6 +1567,50 @@ void DesfirePrintFileSettingsOneLine(FileSettingsS *fsettings) { GetDesfireAccessRightStr(fsettings->chAccess)); } +void DesfirePrintFileSettingsExtended(FileSettingsS *fsettings) { + PrintAndLogEx(SUCCESS, "File type : " _CYAN_("%s") " [0x%02x]", GetDesfireFileType(fsettings->fileType), fsettings->fileType); + PrintAndLogEx(SUCCESS, "Comm mode : %s", GetDesfireCommunicationMode(fsettings->fileCommMode)); + + switch (fsettings->fileType) { + case 0x00: + case 0x01: { + PrintAndLogEx(SUCCESS, "File size : %d [0x%x] bytes", fsettings->fileSize, fsettings->fileSize); + break; + } + case 0x02: { + PrintAndLogEx(SUCCESS, "Lower limit : %d [0x%x]", fsettings->lowerLimit, fsettings->lowerLimit); + PrintAndLogEx(SUCCESS, "Upper limit : %d [0x%x]", fsettings->upperLimit, fsettings->upperLimit); + bool limited_credit_enabled = ((fsettings->limitedCredit & 0x01) != 0); + PrintAndLogEx(SUCCESS, "Limited credit : [%d - %s] %d (0x%08X)", fsettings->limitedCredit, (limited_credit_enabled) ? "enabled" : "disabled", fsettings->value, fsettings->value); + PrintAndLogEx(SUCCESS, "GetValue access : %s", ((fsettings->limitedCredit & 0x02) != 0) ? "Free" : "Not Free"); + break; + } + case 0x03: + case 0x04: { + PrintAndLogEx(SUCCESS, "Record count : %d [0x%x]", fsettings->curRecordCount, fsettings->curRecordCount); + PrintAndLogEx(SUCCESS, "Max record count: %d [0x%x]", fsettings->maxRecordCount, fsettings->maxRecordCount); + PrintAndLogEx(SUCCESS, "Record size : %d [0x%x] bytes", fsettings->recordSize, fsettings->recordSize); + break; + } + case 0x05: { + PrintAndLogEx(SUCCESS, "Key type : 0x%02x", fsettings->keyType); + PrintAndLogEx(SUCCESS, "Key version : 0x%02x ", fsettings->keyVersion); + break; + } + default: { + break; + } + } + + PrintAndLogEx(SUCCESS, "Access rights : %04x (r: %s w: %s rw: %s change: %s)", + fsettings->rawAccessRights, + GetDesfireAccessRightStr(fsettings->rAccess), + GetDesfireAccessRightStr(fsettings->wAccess), + GetDesfireAccessRightStr(fsettings->rwAccess), + GetDesfireAccessRightStr(fsettings->chAccess)); +} + + static void DesfirePrintFileSettDynPart(uint8_t filetype, uint8_t *data, size_t datalen, uint8_t *dynlen, bool create) { switch (filetype) { case 0x00: diff --git a/client/src/mifare/desfirecore.h b/client/src/mifare/desfirecore.h index 2d41f8de6..bfdc611b4 100644 --- a/client/src/mifare/desfirecore.h +++ b/client/src/mifare/desfirecore.h @@ -136,6 +136,7 @@ int DesfireGetFileISOIDList(DesfireContext *dctx, uint8_t *resp, size_t *resplen void DesfireFillFileSettings(uint8_t *data, size_t datalen, FileSettingsS *fsettings); void DesfirePrintFileSettingsOneLine(FileSettingsS *fsettings); +void DesfirePrintFileSettingsExtended(FileSettingsS *fsettings); int DesfireGetFileSettings(DesfireContext *dctx, uint8_t fileid, uint8_t *resp, size_t *resplen); int DesfireGetFileSettingsStruct(DesfireContext *dctx, uint8_t fileid, FileSettingsS *fsettings); int DesfireChangeFileSettings(DesfireContext *dctx, uint8_t *data, size_t datalen);