mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
textual
This commit is contained in:
parent
15726268bf
commit
063b393eba
2 changed files with 15 additions and 13 deletions
|
@ -42,7 +42,7 @@ static int CmdHFMFPInfo(const char *Cmd) {
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(INFO, "-- Mifare Plus Tag Information ------------------------------");
|
PrintAndLogEx(INFO, "-- Mifare Plus Tag Information ------------------------------");
|
||||||
PrintAndLogEx(INFO, "-------------------------------------------------------------");
|
PrintAndLogEx(INFO, "-------------------------------------------------------------");
|
||||||
|
|
||||||
// info about 14a part
|
// info about 14a part
|
||||||
infoHF14A(false, false, false);
|
infoHF14A(false, false, false);
|
||||||
|
|
||||||
|
@ -61,13 +61,12 @@ static int CmdHFMFPInfo(const char *Cmd) {
|
||||||
|
|
||||||
PrintAndLogEx(INFO, "-------------------------------------------------------------");
|
PrintAndLogEx(INFO, "-------------------------------------------------------------");
|
||||||
PrintAndLogEx(INFO, " Fingerprint");
|
PrintAndLogEx(INFO, " Fingerprint");
|
||||||
|
|
||||||
// MIFARE Type Identification Procedure
|
// MIFARE Type Identification Procedure
|
||||||
// https://www.nxp.com/docs/en/application-note/AN10833.pdf
|
// https://www.nxp.com/docs/en/application-note/AN10833.pdf
|
||||||
uint16_t ATQA = card.atqa[0] + (card.atqa[1] << 8);
|
uint16_t ATQA = card.atqa[0] + (card.atqa[1] << 8);
|
||||||
|
|
||||||
bool isPlus = false;
|
bool isPlus = false;
|
||||||
|
|
||||||
if (ATQA == 0x0004) {
|
if (ATQA == 0x0004) {
|
||||||
PrintAndLogEx(INFO, " ATQA - " _GREEN_("Mifare Plus 2K") " (4b UID)");
|
PrintAndLogEx(INFO, " ATQA - " _GREEN_("Mifare Plus 2K") " (4b UID)");
|
||||||
isPlus = true;
|
isPlus = true;
|
||||||
|
@ -131,25 +130,25 @@ static int CmdHFMFPInfo(const char *Cmd) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// How do we detect SL0 / SL1 / SL2 / SL3 modes?!?
|
// How do we detect SL0 / SL1 / SL2 / SL3 modes?!?
|
||||||
PrintAndLogEx(INFO, "Security Level (SL)");
|
PrintAndLogEx(INFO, "Security Level (SL)");
|
||||||
switch(SLmode) {
|
switch(SLmode) {
|
||||||
case 0:
|
case 0:
|
||||||
PrintAndLogEx(INFO, "SL 0: initial delivery configuration, used for card personalization");
|
PrintAndLogEx(INFO, "SL 0: initial delivery configuration, used for card personalization");
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
PrintAndLogEx(INFO, "SL 1: backwards functional compatibility mode (with MIFARE Classic 1K / 4K) with an optional AES authentication");
|
PrintAndLogEx(INFO, "SL 1: backwards functional compatibility mode (with MIFARE Classic 1K / 4K) with an optional AES authentication");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
PrintAndLogEx(INFO, "SL 2: 3-Pass Authentication based on AES followed by MIFARE CRYPTO1 authentication, communication secured by MIFARE CRYPTO1");
|
PrintAndLogEx(INFO, "SL 2: 3-Pass Authentication based on AES followed by MIFARE CRYPTO1 authentication, communication secured by MIFARE CRYPTO1");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
PrintAndLogEx(INFO, "SL 3: 3-Pass authentication based on AES, data manipulation commands secured by AES encryption and an AES based MACing method.");
|
PrintAndLogEx(INFO, "SL 3: 3-Pass authentication based on AES, data manipulation commands secured by AES encryption and an AES based MACing method.");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SLmode != 0xFF)
|
if (SLmode != 0xFF)
|
||||||
PrintAndLogEx(SUCCESS, "\tMifare Plus SL mode: " _YELLOW_("SL%d"), SLmode);
|
PrintAndLogEx(SUCCESS, "\tMifare Plus SL mode: " _YELLOW_("SL%d"), SLmode);
|
||||||
else
|
else
|
||||||
|
@ -966,9 +965,9 @@ static int CmdHFMFPChk(const char *Cmd) {
|
||||||
if (foundKeys[0][sector][0] || foundKeys[1][sector][0]) {
|
if (foundKeys[0][sector][0] || foundKeys[1][sector][0]) {
|
||||||
if (!printedHeader) {
|
if (!printedHeader) {
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(INFO, ".------.--------------------------------.--------------------------------.");
|
PrintAndLogEx(INFO, "-------+--------------------------------+---------------------------------");
|
||||||
PrintAndLogEx(INFO, "|sector| key A | key B |");
|
PrintAndLogEx(INFO, "|sector| key A | key B |");
|
||||||
PrintAndLogEx(INFO, "|------|--------------------------------|--------------------------------|");
|
PrintAndLogEx(INFO, "|------+--------------------------------+--------------------------------|");
|
||||||
printedHeader = true;
|
printedHeader = true;
|
||||||
}
|
}
|
||||||
PrintAndLogEx(INFO, "| %02d |%32s|%32s|",
|
PrintAndLogEx(INFO, "| %02d |%32s|%32s|",
|
||||||
|
@ -980,7 +979,7 @@ static int CmdHFMFPChk(const char *Cmd) {
|
||||||
if (!printedHeader)
|
if (!printedHeader)
|
||||||
PrintAndLogEx(INFO, "No keys found(");
|
PrintAndLogEx(INFO, "No keys found(");
|
||||||
else
|
else
|
||||||
PrintAndLogEx(INFO, "'------'--------------------------------'--------------------------------'\n");
|
PrintAndLogEx(INFO, "'------+--------------------------------+--------------------------------'\n");
|
||||||
|
|
||||||
// save keys to json
|
// save keys to json
|
||||||
if ((jsonnamelen > 0) && printedHeader) {
|
if ((jsonnamelen > 0) && printedHeader) {
|
||||||
|
|
|
@ -25,3 +25,6 @@ eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
|
||||||
15141312111009080706050403020100
|
15141312111009080706050403020100
|
||||||
0f0e0d0c0b0a09080706050403020100
|
0f0e0d0c0b0a09080706050403020100
|
||||||
100f0e0d0c0b0a090807060504030201
|
100f0e0d0c0b0a090807060504030201
|
||||||
|
404142434445464748494a4b4c4d4e4f
|
||||||
|
303132333435363738393a3b3c3d3e3f
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue