diff --git a/utils/nfc-mfclassic.c b/utils/nfc-mfclassic.c index dfa5314..7e4ae34 100644 --- a/utils/nfc-mfclassic.c +++ b/utils/nfc-mfclassic.c @@ -358,8 +358,12 @@ read_card(int read_unlocked) memcpy(mtDump.amb[iBlock].mbt.abtKeyB, mtKeys.amb[iBlock].mbt.abtKeyB, sizeof(mtDump.amb[iBlock].mbt.abtKeyB)); } } else { - printf("!\nfailed to read trailer block 0x%02x\n", iBlock); - bFailure = true; + //If the card was never unlocked and we get an error here, it's very likely that it's not a magic card. + printf("!\nfailed to read trailer block 0x%02x\n", iBlock); + bFailure = true; + if (unlocked == false) { + printf("Supplied card unable to perform unlocked read / writes."); + } } } else { // Make sure a earlier readout did not fail @@ -535,7 +539,7 @@ main(int argc, const char *argv[]) } const char *command = argv[1]; - if (argc < 5) { + if (argc < 4) { print_usage(argv[0]); exit(EXIT_FAILURE); } @@ -554,6 +558,10 @@ main(int argc, const char *argv[]) bFormatCard = (strcmp(command, "f") == 0); bUseKeyA = tolower((int)((unsigned char) * (argv[2]))) == 'a'; bTolerateFailures = tolower((int)((unsigned char) * (argv[2]))) != (int)((unsigned char) * (argv[2])); + if (argv[3][0] != 'U' && argv[3][0] != 'u') { + argv[5] = argv[4]; + argv[4] = argv[3]; + } bUseKeyFile = (argc > 5); bForceKeyFile = ((argc > 6) && (strcmp((char *)argv[6], "f") == 0)); } @@ -574,6 +582,7 @@ main(int argc, const char *argv[]) tag_uid[0], tag_uid[1], tag_uid[2], tag_uid[3]); } else { tag_uid = NULL; + argv[5] = argv[4]; } if (atAction == ACTION_USAGE) {