mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 21:33:47 -07:00
Fix MAD decoding for DESFire
This commit is contained in:
parent
fce8da584a
commit
fdd11c3fb2
3 changed files with 24 additions and 4 deletions
|
@ -32,6 +32,7 @@
|
||||||
#include "fileutils.h"
|
#include "fileutils.h"
|
||||||
#include "mifare/mifaredefault.h" // default keys
|
#include "mifare/mifaredefault.h" // default keys
|
||||||
#include "mifare/ndef.h" // NDEF
|
#include "mifare/ndef.h" // NDEF
|
||||||
|
#include "mifare/mad.h"
|
||||||
|
|
||||||
#define MAX_KEY_LEN 24
|
#define MAX_KEY_LEN 24
|
||||||
#define MAX_KEYS_LIST_LEN 1024
|
#define MAX_KEYS_LIST_LEN 1024
|
||||||
|
@ -3539,8 +3540,12 @@ static int CmdHF14ADesDump(const char *Cmd) {
|
||||||
aid[2] = app_ids[i + 2];
|
aid[2] = app_ids[i + 2];
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, " AID : " _GREEN_("%02X%02X%02X"), aid[2], aid[1], aid[0]);
|
PrintAndLogEx(SUCCESS, " AID : " _GREEN_("%02X%02X%02X"), aid[2], aid[1], aid[0]);
|
||||||
PrintAndLogEx(SUCCESS, " AID Function Cluster 0x%02X: " _YELLOW_("%s"), aid[2], cluster_to_text(aid[2]));
|
if ((aid[2] >> 4) == 0xF) {
|
||||||
|
uint16_t short_aid = ((aid[2] & 0xF) << 12) | (aid[1] << 4) | (aid[0] >> 4);
|
||||||
|
PrintAndLogEx(SUCCESS, " AID mapped to MIFARE Classic AID (MAD): " _YELLOW_("%02X"), short_aid);
|
||||||
|
PrintAndLogEx(SUCCESS, " MAD AID Cluster 0x%02X : " _YELLOW_("%s"), short_aid >> 8, cluster_to_text(short_aid >> 8));
|
||||||
|
MADDFDecodeAndPrint(short_aid);
|
||||||
|
}
|
||||||
for (uint8_t m = 0; m < dfname_count; m++) {
|
for (uint8_t m = 0; m < dfname_count; m++) {
|
||||||
if (dfnames[m].aid[0] == aid[0] && dfnames[m].aid[1] == aid[1] && dfnames[m].aid[2] == aid[2]) {
|
if (dfnames[m].aid[0] == aid[0] && dfnames[m].aid[1] == aid[1] && dfnames[m].aid[2] == aid[2]) {
|
||||||
PrintAndLogEx(SUCCESS, " - DF " _YELLOW_("%02X%02X") " Name : " _YELLOW_("%s"), dfnames[m].fid[1], dfnames[m].fid[0], dfnames[m].name);
|
PrintAndLogEx(SUCCESS, " - DF " _YELLOW_("%02X%02X") " Name : " _YELLOW_("%s"), dfnames[m].fid[1], dfnames[m].fid[0], dfnames[m].name);
|
||||||
|
@ -3705,8 +3710,12 @@ static int CmdHF14ADesEnumApplications(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLogEx(SUCCESS, " AID : " _GREEN_("%02X%02X%02X"), aid[2], aid[1], aid[0]);
|
PrintAndLogEx(SUCCESS, " AID : " _GREEN_("%02X%02X%02X"), aid[2], aid[1], aid[0]);
|
||||||
PrintAndLogEx(SUCCESS, " AID Function Cluster 0x%02X: " _YELLOW_("%s"), aid[2], cluster_to_text(aid[2]));
|
if ((aid[2] >> 4) == 0xF) {
|
||||||
|
uint16_t short_aid = ((aid[2] & 0xF) << 12) | (aid[1] << 4) | (aid[0] >> 4);
|
||||||
|
PrintAndLogEx(SUCCESS, " AID mapped to MIFARE Classic AID (MAD): " _YELLOW_("%02X"), short_aid);
|
||||||
|
PrintAndLogEx(SUCCESS, " MAD AID Cluster 0x%02X : " _YELLOW_("%s"), short_aid >> 8, cluster_to_text(short_aid >> 8));
|
||||||
|
MADDFDecodeAndPrint(short_aid);
|
||||||
|
}
|
||||||
for (uint8_t m = 0; m < dfname_count; m++) {
|
for (uint8_t m = 0; m < dfname_count; m++) {
|
||||||
if (dfnames[m].aid[0] == aid[0] && dfnames[m].aid[1] == aid[1] && dfnames[m].aid[2] == aid[2]) {
|
if (dfnames[m].aid[0] == aid[0] && dfnames[m].aid[1] == aid[1] && dfnames[m].aid[2] == aid[2]) {
|
||||||
PrintAndLogEx(SUCCESS, " - DF " _YELLOW_("%02X%02X") " Name : " _YELLOW_("%s"), dfnames[m].fid[1], dfnames[m].fid[0], dfnames[m].name);
|
PrintAndLogEx(SUCCESS, " - DF " _YELLOW_("%02X%02X") " Name : " _YELLOW_("%s"), dfnames[m].fid[1], dfnames[m].fid[0], dfnames[m].name);
|
||||||
|
|
|
@ -372,3 +372,13 @@ int MAD2DecodeAndPrint(uint8_t *sector, bool swapmad, bool verbose) {
|
||||||
|
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MADDFDecodeAndPrint(uint32_t short_aid) {
|
||||||
|
open_mad_file(&mad_known_aids, false);
|
||||||
|
|
||||||
|
char fmt[50];
|
||||||
|
sprintf(fmt, " MAD AID Function 0x%04X :" _YELLOW_("%s"), short_aid, "%s");
|
||||||
|
print_aid_description(mad_known_aids, short_aid, fmt, false);
|
||||||
|
close_mad_file(mad_known_aids);
|
||||||
|
return PM3_SUCCESS;
|
||||||
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ int MADCheck(uint8_t *sector0, uint8_t *sector10, bool verbose, bool *haveMAD2);
|
||||||
int MADDecode(uint8_t *sector0, uint8_t *sector10, uint16_t *mad, size_t *madlen, bool swapmad);
|
int MADDecode(uint8_t *sector0, uint8_t *sector10, uint16_t *mad, size_t *madlen, bool swapmad);
|
||||||
int MAD1DecodeAndPrint(uint8_t *sector, bool swapmad, bool verbose, bool *haveMAD2);
|
int MAD1DecodeAndPrint(uint8_t *sector, bool swapmad, bool verbose, bool *haveMAD2);
|
||||||
int MAD2DecodeAndPrint(uint8_t *sector, bool swapmad, bool verbose);
|
int MAD2DecodeAndPrint(uint8_t *sector, bool swapmad, bool verbose);
|
||||||
|
int MADDFDecodeAndPrint(uint32_t short_aid);
|
||||||
int MADCardHolderInfoDecode(uint8_t *data, size_t dataLen, bool verbose);
|
int MADCardHolderInfoDecode(uint8_t *data, size_t dataLen, bool verbose);
|
||||||
|
|
||||||
#endif // _MAD_H_
|
#endif // _MAD_H_
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue