From 4cafbcc25940b8c993ef0a1df5c6f98f63b387c7 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 18 Nov 2020 23:47:54 +0100 Subject: [PATCH] hf mfdes - keeping track in the tag object of rf_field active status --- client/src/cmdhfmfdes.c | 11 ++++++++--- client/src/mifare/desfire_crypto.h | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/client/src/cmdhfmfdes.c b/client/src/cmdhfmfdes.c index 3c5de933a..b098e5837 100644 --- a/client/src/cmdhfmfdes.c +++ b/client/src/cmdhfmfdes.c @@ -1558,9 +1558,14 @@ static int handler_desfire_select_application(uint8_t *aid) { sAPDU apdu = {0x90, MFDES_SELECT_APPLICATION, 0x00, 0x00, 0x03, aid}; //0x5a uint32_t recv_len = 0; uint16_t sw = 0; - int res = send_desfire_cmd(&apdu, true, NULL, &recv_len, &sw, sizeof(dfname_t), true); + + int res = send_desfire_cmd(&apdu, !tag->rf_field_on, NULL, &recv_len, &sw, sizeof(dfname_t), true); if (res != PM3_SUCCESS) { - PrintAndLogEx(WARNING, _RED_(" Can't select AID 0x%X -> %s"), (aid[2] << 16) + (aid[1] << 8) + aid[0], GetErrorString(res, &sw)); + PrintAndLogEx(WARNING, + _RED_(" Can't select AID 0x%X -> %s"), + (aid[2] << 16) + (aid[1] << 8) + aid[0], + GetErrorString(res, &sw) + ); DropField(); return res; } @@ -2238,9 +2243,9 @@ static int CmdHF14ADesSelectApp(const char *Cmd) { } int res = handler_desfire_select_application(aid); - DropField(); if (res != PM3_SUCCESS) { PrintAndLogEx(ERR, "Error on selecting aid."); + DropField(); } else { PrintAndLogEx(SUCCESS, "Successfully selected aid."); } diff --git a/client/src/mifare/desfire_crypto.h b/client/src/mifare/desfire_crypto.h index a1d514507..e7219eaf0 100644 --- a/client/src/mifare/desfire_crypto.h +++ b/client/src/mifare/desfire_crypto.h @@ -93,6 +93,7 @@ struct desfire_tag { uint8_t *crypto_buffer; size_t crypto_buffer_size; uint32_t selected_application; + bool rf_field_on; }; typedef struct desfire_tag *desfiretag_t;