From 311edff6c7dc80121a97e29db6aadf8d95767e97 Mon Sep 17 00:00:00 2001 From: merlokk <807634+merlokk@users.noreply.github.com> Date: Mon, 9 Aug 2021 18:28:40 +0300 Subject: [PATCH] remove old commands from top level --- client/src/cmdhfmfdes.c | 62 ++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 0a3a6c798..2b4d6a459 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -1060,32 +1060,6 @@ static int handler_desfire_getkeysettings(uint8_t *key_settings, uint8_t *num_ke return res; } -// --- GET APPIDS -static int handler_desfire_appids(uint8_t *dest, uint32_t *app_ids_len) { - if (dest == NULL) { - PrintAndLogEx(DEBUG, "DEST=NULL"); - return PM3_EINVARG; - } - if (app_ids_len == NULL) { - PrintAndLogEx(DEBUG, "APP_IDS_LEN=NULL"); - return PM3_EINVARG; - } - - sAPDU apdu = {0x90, MFDES_GET_APPLICATION_IDS, 0x00, 0x00, 0x00, NULL}; //0x6a - uint32_t recv_len = 0; - uint16_t sw = 0; - int res = send_desfire_cmd(&apdu, true, dest, &recv_len, &sw, 0, true); - - if (res != PM3_SUCCESS) - return res; - - if (sw != status(MFDES_S_OPERATION_OK)) - return PM3_ESOFT; - - *app_ids_len = (uint8_t)(recv_len & 0xFF); - return res; -} - static int handler_desfire_select_application(uint8_t *aid) { if (g_debugMode > 1) { if (aid == NULL) { @@ -1733,7 +1707,7 @@ static int CmdHF14aDesChk(const char *Cmd) { void *argtable[] = { arg_param_begin, - arg_strx0("a", "aid", "", "Use specific AID (3 hex bytes, big endian)"), + arg_strx0(NULL, "aid", "", "Use specific AID (3 hex bytes, big endian)"), arg_str0("k", "key", "", "Key for checking (HEX 16 bytes)"), arg_str0("d", "dict", "", "File with keys dictionary"), arg_lit0(NULL, "pattern1b", "Check all 1-byte combinations of key (0000...0000, 0101...0101, 0202...0202, ...)"), @@ -1743,10 +1717,13 @@ static int CmdHF14aDesChk(const char *Cmd) { arg_lit0("v", "verbose", "Verbose mode."), arg_int0("f", "kdf", "", "Key Derivation Function (KDF) (0=None, 1=AN10922, 2=Gallagher)"), arg_str0("i", "kdfi", "", "KDF input (HEX 1-31 bytes)"), + arg_lit0("a", "apdu", "show APDU requests and responses"), arg_param_end }; CLIExecWithReturn(ctx, Cmd, argtable, false); + bool APDULogging = arg_get_lit(ctx, 11); + int aidlength = 0; uint8_t aid[3] = {0}; CLIGetHexWithReturn(ctx, 1, aid, &aidlength); @@ -1829,6 +1806,7 @@ static int CmdHF14aDesChk(const char *Cmd) { CLIGetHexWithReturn(ctx, 10, kdfInput, &kdfInputLen); CLIParserFree(ctx); + SetAPDULogging(APDULogging); // 1-byte pattern search mode if (pattern1b) { @@ -1891,22 +1869,30 @@ static int CmdHF14aDesChk(const char *Cmd) { bool result = false; uint8_t app_ids[78] = {0}; - uint32_t app_ids_len = 0; + size_t app_ids_len = 0; clearCommandBuffer(); - mfdes_info_res_t info = {0}; - res = mfdes_get_info(&info); - if (res != PM3_SUCCESS) { - return res; - } - // TODO: Store this UID someowhere not global - memcpy(tag->info.uid, info.uid, info.uidlen); - tag->info.uidlen = info.uidlen; + DesfireContext dctx; + DesfireSetKdf(&dctx, cmdKDFAlgo, kdfInput, kdfInputLen); + DesfireSetCommandSet(&dctx, DCCNativeISO); + DesfireSetCommMode(&dctx, DCMPlain); + + // save card UID to dctx + DesfireGetCardUID(&dctx); - if (handler_desfire_appids(app_ids, &app_ids_len) != PM3_SUCCESS) { + res = DesfireSelectAIDHex(&dctx, 0x000000, false, 0); + if (res != PM3_SUCCESS) { + PrintAndLogEx(ERR, "Can't select PICC level."); + DropField(); + return PM3_ESOFT; + } + + + res = DesfireGetAIDList(&dctx, app_ids, &app_ids_len); + if (res != PM3_SUCCESS) { PrintAndLogEx(ERR, "Can't get list of applications on tag"); - DropFieldDesfire(); + DropField(); return PM3_ESOFT; }