From 523559205487cf86de5a280d1651c66361965662 Mon Sep 17 00:00:00 2001 From: noproto Date: Tue, 27 Aug 2024 06:32:00 -0400 Subject: [PATCH] Only use dicts in search_dicts_for_nonce_key if we have them --- .../protocols/mf_classic/mf_classic_poller.c | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/lib/nfc/protocols/mf_classic/mf_classic_poller.c b/lib/nfc/protocols/mf_classic/mf_classic_poller.c index 025046e35..c670ed9ed 100644 --- a/lib/nfc/protocols/mf_classic/mf_classic_poller.c +++ b/lib/nfc/protocols/mf_classic/mf_classic_poller.c @@ -1338,6 +1338,7 @@ static MfClassicKey* search_dicts_for_nonce_key( bool found_resume_point = false; for(int i = 0; i < 2; i++) { + if(!dicts[i]) continue; keys_dict_rewind(dicts[i]); while(keys_dict_get_next_key(dicts[i], stack_key.data, sizeof(MfClassicKey))) { if(is_resumed && !found_resume_point) { @@ -1661,20 +1662,21 @@ NfcCommand mf_classic_poller_handler_nested_controller(MfClassicPoller* instance if(initial_dict_attack_iter) { // Initialize dictionaries // Note: System dict should always exist - bool system_dict_exists = keys_dict_check_presence(MF_CLASSIC_NESTED_SYSTEM_DICT_PATH); - bool user_dict_exists = keys_dict_check_presence(MF_CLASSIC_NESTED_USER_DICT_PATH); - if(system_dict_exists) { - dict_attack_ctx->mf_classic_system_dict = keys_dict_alloc( - MF_CLASSIC_NESTED_SYSTEM_DICT_PATH, - KeysDictModeOpenExisting, - sizeof(MfClassicKey)); - } - if(user_dict_exists) { - dict_attack_ctx->mf_classic_user_dict = keys_dict_alloc( - MF_CLASSIC_NESTED_USER_DICT_PATH, - KeysDictModeOpenExisting, - sizeof(MfClassicKey)); - } + dict_attack_ctx->mf_classic_system_dict = + keys_dict_check_presence(MF_CLASSIC_NESTED_SYSTEM_DICT_PATH) ? + keys_dict_alloc( + MF_CLASSIC_NESTED_SYSTEM_DICT_PATH, + KeysDictModeOpenExisting, + sizeof(MfClassicKey)) : + NULL; + + dict_attack_ctx->mf_classic_user_dict = + keys_dict_check_presence(MF_CLASSIC_NESTED_USER_DICT_PATH) ? + keys_dict_alloc( + MF_CLASSIC_NESTED_USER_DICT_PATH, + KeysDictModeOpenExisting, + sizeof(MfClassicKey)) : + NULL; } if((is_weak || is_last_iter_for_hard_key) && dict_attack_ctx->nested_nonce.count > 0) { // Key reuse