From 997234e18dec2b0f1521db1354039e287c5ed448 Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Mon, 26 Jul 2021 14:15:11 +0300 Subject: [PATCH] add create file to channel tables, remove debug --- client/src/cmdhfmfdes.c | 121 -------------------------- client/src/mifare/desfirecore.c | 1 - client/src/mifare/desfiresecurechan.c | 106 ++++++++++++---------- 3 files changed, 59 insertions(+), 169 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 909e55f67..58cf495e0 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -6421,127 +6421,6 @@ static int CmdHF14ADesCreateValueFile(const char *Cmd) { DropField(); return PM3_SUCCESS; - - - - -/* CLIParserContext *ctx; - CLIParserInit(&ctx, "hf mfdes createvaluefile", - "Create Value File\n" - "Make sure to select aid or authenticate aid before running this command.", - "hf mfdes createvaluefile -n 03 -c 0 -r EEEE -l 00000000 -u 00002000 --val 00000001 -m 02 -a 123456\n" - ); - - void *argtable[] = { - arg_param_begin, - arg_int0("n", "fileno", "", "File Number (0 - 31)"), - arg_int0("c", "com", "", "Communication setting (0 = Plain, 1 = Plain + MAC, 3 = Enciphered)"), - arg_strx0("r", "rights", "", "Access rights (2 hex bytes -> RW/Chg/R/W, 0x0 - 0xD Key, 0xE Free, 0xF Denied)"), - arg_strx0("l", "lower", "", "Lower limit (4 hex bytes, big endian)"), - arg_strx0("u", "upper", "", "Upper limit (4 hex bytes, big endian)"), - arg_strx0(NULL, "val", "", "Value (4 hex bytes, big endian)"), - arg_int0("m", NULL, "", "Limited Credit enabled (Bit 0 = Limited Credit, 1 = FreeValue)"), - arg_strx0("a", "aid", "", "App ID to select as hex bytes (3 bytes,big endian,optional)"), - arg_param_end - }; - - CLIExecWithReturn(ctx, Cmd, argtable, false); - int fno = arg_get_int_def(ctx, 1, 0); - uint8_t comset = arg_get_int(ctx, 2); - - int arlength = 0; - uint8_t ar[2] = {0}; - CLIGetHexWithReturn(ctx, 3, ar, &arlength); - - int lllen = 0; - uint8_t lowerlimit[4] = {0}; - CLIGetHexWithReturn(ctx, 4, lowerlimit, &lllen); - - int ullen = 0; - uint8_t upperlimit[4] = {0}; - CLIGetHexWithReturn(ctx, 5, upperlimit, &ullen); - - int vllen = 0; - uint8_t value[4] = {0}; - CLIGetHexWithReturn(ctx, 6, value, &vllen); - - uint8_t limited = arg_get_int_def(ctx, 7, 0); - - int aidlength = 3; - uint8_t aid[3] = {0}; - CLIGetHexWithReturn(ctx, 8, aid, &aidlength); - swap24(aid); - CLIParserFree(ctx); - - swap32(lowerlimit); - swap32(upperlimit); - swap32(value); - - if (fno > 0x1F) { - PrintAndLogEx(ERR, "File number range is invalid (exp 0 - 31), got %d", fno); - return PM3_EINVARG; - } - - if (comset != 0 && comset != 1 && comset != 3) { - PrintAndLogEx(ERR, "Communication setting must be either 0=Plain, 1=Plain+MAC or 3=Encrypt"); - return PM3_EINVARG; - } - - if (arlength != 2) { - PrintAndLogEx(ERR, "Access rights must have 2 hex bytes length"); - return PM3_EINVARG; - } - - if (lllen != 4) { - PrintAndLogEx(ERR, "Lower limit must have 4 hex bytes length"); - return PM3_EINVARG; - } - - if (ullen != 4) { - PrintAndLogEx(ERR, "Upper limit must have 4 hex bytes length"); - return PM3_EINVARG; - } - - if (vllen != 4) { - PrintAndLogEx(ERR, "Value must have 4 hex bytes length"); - return PM3_EINVARG; - } - - mfdes_value_file_t ft = { - .fileno = fno, - .comset = comset, - .limitedcreditenabled = limited, - }; - - memcpy(ft.access_rights, ar, 2); - memcpy(ft.lowerlimit, lowerlimit, 4); - memcpy(ft.upperlimit, upperlimit, 4); - memcpy(ft.value, value, 4); - - if (aidlength != 3 && aidlength != 0) { - PrintAndLogEx(ERR, _RED_(" The given aid must have 3 bytes (big endian).")); - return PM3_ESOFT; - } else if (aidlength == 0) { - if (memcmp(&tag->selected_application, aid, 3) == 0) { - PrintAndLogEx(ERR, _RED_(" You need to select an aid first.")); - return PM3_ESOFT; - } - memcpy(aid, (uint8_t *)&tag->selected_application, 3); - } - - if (handler_desfire_select_application(aid) != PM3_SUCCESS) { - PrintAndLogEx(ERR, _RED_(" Error on selecting aid.")); - return PM3_ESOFT; - } - - int res = handler_desfire_create_value_file(&ft); - if (res == PM3_SUCCESS) { - PrintAndLogEx(SUCCESS, "Successfully created value file."); - } else { - PrintAndLogEx(ERR, "Couldn't create value file. Error %d", res); - } - DropFieldDesfire(); - return res;*/ } static int CmdHF14ADesDeleteFile(const char *Cmd) { diff --git a/client/src/mifare/desfirecore.c b/client/src/mifare/desfirecore.c index d3fbee484..dc5ce399c 100644 --- a/client/src/mifare/desfirecore.c +++ b/client/src/mifare/desfirecore.c @@ -1392,7 +1392,6 @@ void DesfirePrintCreateFileSettings(uint8_t filetype, uint8_t *data, size_t len) bool isoidpresent = ftyperec->mayHaveISOfid && (len == ftyperec->createlen + 2 + 1); - PrintAndLogEx(SUCCESS, "---: %d", ftyperec->createlen); PrintAndLogEx(INFO, "---- " _CYAN_("Create file settings") " ----"); PrintAndLogEx(SUCCESS, "File type : %s", ftyperec->text); PrintAndLogEx(SUCCESS, "File number : 0x%02x (%d)", data[0], data[0]); diff --git a/client/src/mifare/desfiresecurechan.c b/client/src/mifare/desfiresecurechan.c index ef7f0b44c..21ab46c40 100644 --- a/client/src/mifare/desfiresecurechan.c +++ b/client/src/mifare/desfiresecurechan.c @@ -24,60 +24,72 @@ #include "mifare/desfire_crypto.h" AllowedChannelModesS AllowedChannelModes[] = { - {MFDES_CREATE_APPLICATION, DACd40, DCCNative, DCMPlain}, - {MFDES_DELETE_APPLICATION, DACd40, DCCNative, DCMPlain}, - {MFDES_GET_APPLICATION_IDS, DACd40, DCCNative, DCMPlain}, - {MFDES_GET_DF_NAMES, DACd40, DCCNative, DCMPlain}, - {MFDES_GET_KEY_SETTINGS, DACd40, DCCNative, DCMPlain}, - {MFDES_GET_KEY_VERSION, DACd40, DCCNative, DCMPlain}, - {MFDES_GET_FREE_MEMORY, DACd40, DCCNative, DCMPlain}, + {MFDES_CREATE_APPLICATION, DACd40, DCCNative, DCMPlain}, + {MFDES_DELETE_APPLICATION, DACd40, DCCNative, DCMPlain}, + {MFDES_GET_APPLICATION_IDS, DACd40, DCCNative, DCMPlain}, + {MFDES_GET_DF_NAMES, DACd40, DCCNative, DCMPlain}, + {MFDES_GET_KEY_SETTINGS, DACd40, DCCNative, DCMPlain}, + {MFDES_GET_KEY_VERSION, DACd40, DCCNative, DCMPlain}, + {MFDES_GET_FREE_MEMORY, DACd40, DCCNative, DCMPlain}, + {MFDES_CREATE_STD_DATA_FILE, DACd40, DCCNative, DCMPlain}, + {MFDES_CREATE_BACKUP_DATA_FILE, DACd40, DCCNative, DCMPlain}, + {MFDES_CREATE_VALUE_FILE, DACd40, DCCNative, DCMPlain}, + {MFDES_CREATE_LINEAR_RECORD_FILE, DACd40, DCCNative, DCMPlain}, + {MFDES_CREATE_CYCLIC_RECORD_FILE, DACd40, DCCNative, DCMPlain}, + {MFDES_CREATE_TRANS_MAC_FILE, DACd40, DCCNative, DCMPlain}, - {MFDES_READ_DATA, DACd40, DCCNative, DCMMACed}, - {MFDES_WRITE_DATA, DACd40, DCCNative, DCMMACed}, - {MFDES_GET_VALUE, DACd40, DCCNative, DCMMACed}, - {MFDES_CREDIT, DACd40, DCCNative, DCMMACed}, - {MFDES_DEBIT, DACd40, DCCNative, DCMMACed}, - {MFDES_LIMITED_CREDIT, DACd40, DCCNative, DCMMACed}, - {MFDES_READ_RECORDS, DACd40, DCCNative, DCMMACed}, - {MFDES_WRITE_RECORD, DACd40, DCCNative, DCMMACed}, - {MFDES_UPDATE_RECORD1, DACd40, DCCNative, DCMMACed}, - {MFDES_UPDATE_RECORD2, DACd40, DCCNativeISO, DCMMACed}, - {MFDES_INIT_KEY_SETTINGS, DACd40, DCCNative, DCMMACed}, - {MFDES_FINALIZE_KEY_SETTINGS, DACd40, DCCNative, DCMMACed}, - {MFDES_ROLL_KEY_SETTINGS, DACd40, DCCNative, DCMMACed}, - {MFDES_COMMIT_READER_ID, DACd40, DCCNative, DCMMACed}, - {MFDES_FORMAT_PICC, DACd40, DCCNative, DCMMACed}, - {MFDES_GET_FILE_IDS, DACd40, DCCNative, DCMMACed}, - {MFDES_GET_ISOFILE_IDS, DACd40, DCCNative, DCMMACed}, + {MFDES_READ_DATA, DACd40, DCCNative, DCMMACed}, + {MFDES_WRITE_DATA, DACd40, DCCNative, DCMMACed}, + {MFDES_GET_VALUE, DACd40, DCCNative, DCMMACed}, + {MFDES_CREDIT, DACd40, DCCNative, DCMMACed}, + {MFDES_DEBIT, DACd40, DCCNative, DCMMACed}, + {MFDES_LIMITED_CREDIT, DACd40, DCCNative, DCMMACed}, + {MFDES_READ_RECORDS, DACd40, DCCNative, DCMMACed}, + {MFDES_WRITE_RECORD, DACd40, DCCNative, DCMMACed}, + {MFDES_UPDATE_RECORD1, DACd40, DCCNative, DCMMACed}, + {MFDES_UPDATE_RECORD2, DACd40, DCCNativeISO, DCMMACed}, + {MFDES_INIT_KEY_SETTINGS, DACd40, DCCNative, DCMMACed}, + {MFDES_FINALIZE_KEY_SETTINGS, DACd40, DCCNative, DCMMACed}, + {MFDES_ROLL_KEY_SETTINGS, DACd40, DCCNative, DCMMACed}, + {MFDES_COMMIT_READER_ID, DACd40, DCCNative, DCMMACed}, + {MFDES_FORMAT_PICC, DACd40, DCCNative, DCMMACed}, + {MFDES_GET_FILE_IDS, DACd40, DCCNative, DCMMACed}, + {MFDES_GET_ISOFILE_IDS, DACd40, DCCNative, DCMMACed}, - {MFDES_GET_UID, DACd40, DCCNative, DCMEncrypted}, - {MFDES_CHANGE_KEY_SETTINGS, DACd40, DCCNative, DCMEncrypted}, - {MFDES_CHANGE_FILE_SETTINGS, DACd40, DCCNative, DCMEncrypted}, - {MFDES_READ_DATA, DACd40, DCCNative, DCMEncrypted}, - {MFDES_WRITE_DATA, DACd40, DCCNative, DCMEncrypted}, + {MFDES_GET_UID, DACd40, DCCNative, DCMEncrypted}, + {MFDES_CHANGE_KEY_SETTINGS, DACd40, DCCNative, DCMEncrypted}, + {MFDES_CHANGE_FILE_SETTINGS, DACd40, DCCNative, DCMEncrypted}, + {MFDES_READ_DATA, DACd40, DCCNative, DCMEncrypted}, + {MFDES_WRITE_DATA, DACd40, DCCNative, DCMEncrypted}, - {MFDES_CHANGE_KEY, DACd40, DCCNative, DCMEncryptedPlain}, - {MFDES_CHANGE_KEY_EV2, DACd40, DCCNative, DCMEncryptedPlain}, + {MFDES_CHANGE_KEY, DACd40, DCCNative, DCMEncryptedPlain}, + {MFDES_CHANGE_KEY_EV2, DACd40, DCCNative, DCMEncryptedPlain}, - {MFDES_GET_KEY_VERSION, DACEV1, DCCNative, DCMPlain}, - {MFDES_GET_FREE_MEMORY, DACEV1, DCCNative, DCMPlain}, + {MFDES_GET_KEY_VERSION, DACEV1, DCCNative, DCMPlain}, + {MFDES_GET_FREE_MEMORY, DACEV1, DCCNative, DCMPlain}, - {MFDES_CREATE_APPLICATION, DACEV1, DCCNative, DCMMACed}, - {MFDES_DELETE_APPLICATION, DACEV1, DCCNative, DCMMACed}, - {MFDES_GET_APPLICATION_IDS, DACEV1, DCCNative, DCMMACed}, - {MFDES_GET_DF_NAMES, DACEV1, DCCNative, DCMMACed}, - {MFDES_GET_KEY_SETTINGS, DACEV1, DCCNative, DCMMACed}, - {MFDES_FORMAT_PICC, DACEV1, DCCNative, DCMMACed}, - {MFDES_GET_FILE_IDS, DACEV1, DCCNative, DCMMACed}, - {MFDES_GET_ISOFILE_IDS, DACEV1, DCCNative, DCMMACed}, - {MFDES_GET_FILE_SETTINGS, DACEV1, DCCNative, DCMMACed}, + {MFDES_CREATE_APPLICATION, DACEV1, DCCNative, DCMMACed}, + {MFDES_DELETE_APPLICATION, DACEV1, DCCNative, DCMMACed}, + {MFDES_GET_APPLICATION_IDS, DACEV1, DCCNative, DCMMACed}, + {MFDES_GET_DF_NAMES, DACEV1, DCCNative, DCMMACed}, + {MFDES_GET_KEY_SETTINGS, DACEV1, DCCNative, DCMMACed}, + {MFDES_FORMAT_PICC, DACEV1, DCCNative, DCMMACed}, + {MFDES_GET_FILE_IDS, DACEV1, DCCNative, DCMMACed}, + {MFDES_GET_ISOFILE_IDS, DACEV1, DCCNative, DCMMACed}, + {MFDES_GET_FILE_SETTINGS, DACEV1, DCCNative, DCMMACed}, + {MFDES_CREATE_STD_DATA_FILE, DACEV1, DCCNative, DCMMACed}, + {MFDES_CREATE_BACKUP_DATA_FILE, DACEV1, DCCNative, DCMMACed}, + {MFDES_CREATE_VALUE_FILE, DACEV1, DCCNative, DCMMACed}, + {MFDES_CREATE_LINEAR_RECORD_FILE, DACEV1, DCCNative, DCMMACed}, + {MFDES_CREATE_CYCLIC_RECORD_FILE, DACEV1, DCCNative, DCMMACed}, + {MFDES_CREATE_TRANS_MAC_FILE, DACEV1, DCCNative, DCMMACed}, - {MFDES_GET_UID, DACEV1, DCCNative, DCMEncrypted}, - {MFDES_CHANGE_KEY_SETTINGS, DACEV1, DCCNative, DCMEncrypted}, - {MFDES_CHANGE_FILE_SETTINGS, DACEV1, DCCNative, DCMEncrypted}, + {MFDES_GET_UID, DACEV1, DCCNative, DCMEncrypted}, + {MFDES_CHANGE_KEY_SETTINGS, DACEV1, DCCNative, DCMEncrypted}, + {MFDES_CHANGE_FILE_SETTINGS, DACEV1, DCCNative, DCMEncrypted}, - {MFDES_CHANGE_KEY, DACEV1, DCCNative, DCMEncryptedPlain}, - {MFDES_CHANGE_KEY_EV2, DACEV1, DCCNative, DCMEncryptedPlain}, + {MFDES_CHANGE_KEY, DACEV1, DCCNative, DCMEncryptedPlain}, + {MFDES_CHANGE_KEY_EV2, DACEV1, DCCNative, DCMEncryptedPlain}, }; #define CMD_HEADER_LEN_ALL 0xffff