mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-01-11 02:31:23 +08:00
hf iclass textual and saving to files unified
This commit is contained in:
parent
dcea185ca2
commit
c6386c68e0
1 changed files with 19 additions and 20 deletions
|
@ -38,6 +38,7 @@
|
||||||
#include "proxendian.h"
|
#include "proxendian.h"
|
||||||
#include "iclass_cmd.h"
|
#include "iclass_cmd.h"
|
||||||
|
|
||||||
|
#define PICOPASS_BLOCK_SIZE 8
|
||||||
#define NUM_CSNS 9
|
#define NUM_CSNS 9
|
||||||
#define ICLASS_KEYS_MAX 8
|
#define ICLASS_KEYS_MAX 8
|
||||||
#define ICLASS_AUTH_RETRY 10
|
#define ICLASS_AUTH_RETRY 10
|
||||||
|
@ -1076,9 +1077,7 @@ static int CmdHFiClassESave(const char *Cmd) {
|
||||||
FillFileNameByUID(fptr, dump, "-dump", 8);
|
FillFileNameByUID(fptr, dump, "-dump", 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
saveFile(filename, ".bin", dump, bytes);
|
pm3_save_dump(filename, dump, bytes, jsfIclass, PICOPASS_BLOCK_SIZE);
|
||||||
saveFileEML(filename, dump, bytes, 8);
|
|
||||||
saveFileJSON(filename, jsfIclass, dump, bytes, NULL);
|
|
||||||
free(dump);
|
free(dump);
|
||||||
|
|
||||||
PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass view -f") "` to view dump file");
|
PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass view -f") "` to view dump file");
|
||||||
|
@ -1325,9 +1324,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) {
|
||||||
strcat(fptr, "hf-iclass-");
|
strcat(fptr, "hf-iclass-");
|
||||||
FillFileNameByUID(fptr, hdr->csn, "-dump-decrypted", sizeof(hdr->csn));
|
FillFileNameByUID(fptr, hdr->csn, "-dump-decrypted", sizeof(hdr->csn));
|
||||||
|
|
||||||
saveFile(fptr, ".bin", decrypted, decryptedlen);
|
pm3_save_dump(fptr, decrypted, decryptedlen, jsfIclass, PICOPASS_BLOCK_SIZE);
|
||||||
saveFileEML(fptr, decrypted, decryptedlen, 8);
|
|
||||||
saveFileJSON(fptr, jsfIclass, decrypted, decryptedlen, NULL);
|
|
||||||
|
|
||||||
printIclassDumpContents(decrypted, 1, (decryptedlen / 8), decryptedlen);
|
printIclassDumpContents(decrypted, 1, (decryptedlen / 8), decryptedlen);
|
||||||
|
|
||||||
|
@ -1879,9 +1876,8 @@ write_dump:
|
||||||
|
|
||||||
// save the dump to .bin file
|
// save the dump to .bin file
|
||||||
PrintAndLogEx(SUCCESS, "saving dump file - %u blocks read", bytes_got / 8);
|
PrintAndLogEx(SUCCESS, "saving dump file - %u blocks read", bytes_got / 8);
|
||||||
saveFile(filename, ".bin", tag_data, bytes_got);
|
|
||||||
saveFileEML(filename, tag_data, bytes_got, 8);
|
pm3_save_dump(filename, tag_data, bytes_got, jsfIclass, PICOPASS_BLOCK_SIZE);
|
||||||
saveFileJSON(filename, jsfIclass, tag_data, bytes_got, NULL);
|
|
||||||
|
|
||||||
PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass decrypt -f") "` to decrypt dump file");
|
PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass decrypt -f") "` to decrypt dump file");
|
||||||
PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass view -f") "` to view dump file");
|
PrintAndLogEx(HINT, "Try `" _YELLOW_("hf iclass view -f") "` to view dump file");
|
||||||
|
@ -2480,10 +2476,10 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e
|
||||||
int i = startblock;
|
int i = startblock;
|
||||||
|
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(INFO, "-------------------------- " _CYAN_("Tag memory") " ---------------------------");
|
PrintAndLogEx(INFO, "--------------------------- " _CYAN_("Tag memory") " ----------------------------");
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
PrintAndLogEx(INFO, " block# | data | ascii |lck| info");
|
PrintAndLogEx(INFO, " block# | data | ascii |lck| info");
|
||||||
PrintAndLogEx(INFO, "---------+-------------------------+----------+---+--------------");
|
PrintAndLogEx(INFO, "---------+-------------------------+----------+---+----------------");
|
||||||
PrintAndLogEx(INFO, " 0/0x00 | " _GREEN_("%s") "| " _GREEN_("%s") " | | CSN "
|
PrintAndLogEx(INFO, " 0/0x00 | " _GREEN_("%s") "| " _GREEN_("%s") " | | CSN "
|
||||||
, sprint_hex(iclass_dump, 8)
|
, sprint_hex(iclass_dump, 8)
|
||||||
, sprint_ascii(iclass_dump, 8)
|
, sprint_ascii(iclass_dump, 8)
|
||||||
|
@ -2491,9 +2487,9 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e
|
||||||
|
|
||||||
if (i != 1)
|
if (i != 1)
|
||||||
PrintAndLogEx(INFO, " ......");
|
PrintAndLogEx(INFO, " ......");
|
||||||
|
bool isLegacy = (memcmp(iclass_dump + (7 * 8), "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8));
|
||||||
uint8_t fb1 = (iclass_dump + (6 * 8))[0];
|
bool isSE = (memcmp(iclass_dump + (12 * 8) + 4, "\x05\x00\x05\x00", 4) == 0);
|
||||||
uint8_t fb2 = (iclass_dump + (10 * 8))[0];
|
bool isSR = (memcmp(iclass_dump + (16 * 8) + 3, "\x05\x00\x05\x00\x00", 5) == 0);
|
||||||
|
|
||||||
while (i <= endblock) {
|
while (i <= endblock) {
|
||||||
uint8_t *blk = iclass_dump + (i * 8);
|
uint8_t *blk = iclass_dump + (i * 8);
|
||||||
|
@ -2554,7 +2550,7 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e
|
||||||
} else {
|
} else {
|
||||||
const char *info_ks[] = {"CSN", "Config", "E-purse", "Debit", "Credit", "AIA", "User"};
|
const char *info_ks[] = {"CSN", "Config", "E-purse", "Debit", "Credit", "AIA", "User"};
|
||||||
|
|
||||||
if (i >= 6 && i <= 9 && fb1 != 0x30) {
|
if (i >= 6 && i <= 9 && isLegacy && isSE == false) {
|
||||||
// legacy credential
|
// legacy credential
|
||||||
PrintAndLogEx(INFO, "%3d/0x%02X | " _YELLOW_("%s") "| " _YELLOW_("%s") " | %s | User / Cred "
|
PrintAndLogEx(INFO, "%3d/0x%02X | " _YELLOW_("%s") "| " _YELLOW_("%s") " | %s | User / Cred "
|
||||||
, i
|
, i
|
||||||
|
@ -2563,7 +2559,7 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e
|
||||||
, sprint_ascii(blk, 8)
|
, sprint_ascii(blk, 8)
|
||||||
, lockstr
|
, lockstr
|
||||||
);
|
);
|
||||||
} else if (i >= 6 && i <= 11 && fb1 == 0x30) {
|
} else if (i >= 6 && i <= 13 && isSE) {
|
||||||
// SIO credential
|
// SIO credential
|
||||||
PrintAndLogEx(INFO, "%3d/0x%02X | " _CYAN_("%s") "| " _CYAN_("%s") " | %s | User / SIO"
|
PrintAndLogEx(INFO, "%3d/0x%02X | " _CYAN_("%s") "| " _CYAN_("%s") " | %s | User / SIO"
|
||||||
, i
|
, i
|
||||||
|
@ -2572,9 +2568,9 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e
|
||||||
, sprint_ascii(blk, 8)
|
, sprint_ascii(blk, 8)
|
||||||
, lockstr
|
, lockstr
|
||||||
);
|
);
|
||||||
} else if (i >= 10 && i <= 16 && fb2 == 0x30) {
|
} else if (i >= 10 && i <= 16 && isSR) {
|
||||||
// SIO credential
|
// SIO credential
|
||||||
PrintAndLogEx(INFO, "%3d/0x%02X | " _CYAN_("%s") "| " _CYAN_("%s") " | %s | User / SIO"
|
PrintAndLogEx(INFO, "%3d/0x%02X | " _CYAN_("%s") "| " _CYAN_("%s") " | %s | User / SIO / SR"
|
||||||
, i
|
, i
|
||||||
, i
|
, i
|
||||||
, sprint_hex(blk, 8)
|
, sprint_hex(blk, 8)
|
||||||
|
@ -2591,9 +2587,12 @@ void printIclassDumpContents(uint8_t *iclass_dump, uint8_t startblock, uint8_t e
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
PrintAndLogEx(INFO, "---------+-------------------------+----------+---+--------------");
|
PrintAndLogEx(INFO, "---------+-------------------------+----------+---+----------------");
|
||||||
|
if (isLegacy)
|
||||||
PrintAndLogEx(HINT, _YELLOW_("yellow") " = legacy credential");
|
PrintAndLogEx(HINT, _YELLOW_("yellow") " = legacy credential");
|
||||||
PrintAndLogEx(HINT, _CYAN_("cyan") " = SIO credential");
|
if (isSE || isSR)
|
||||||
|
PrintAndLogEx(HINT, _CYAN_("cyan") " = SIO / SR credential");
|
||||||
|
|
||||||
PrintAndLogEx(NORMAL, "");
|
PrintAndLogEx(NORMAL, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue