mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-24 07:05:40 -07:00
Merge pull request #1779 from DidierA/fix-srt512-dump
Fix dump of SRT512 tag
This commit is contained in:
commit
bf143219a0
1 changed files with 21 additions and 20 deletions
|
@ -789,23 +789,24 @@ static void print_ct_blocks(uint8_t *data, size_t len) {
|
||||||
|
|
||||||
static void print_sr_blocks(uint8_t *data, size_t len) {
|
static void print_sr_blocks(uint8_t *data, size_t len) {
|
||||||
|
|
||||||
size_t blocks = len / ST25TB_SR_BLOCK_SIZE;
|
size_t blocks = (len / ST25TB_SR_BLOCK_SIZE) -1 ;
|
||||||
|
uint8_t * systemblock = data + blocks * ST25TB_SR_BLOCK_SIZE ;
|
||||||
uint8_t chipid = get_st_chipid(data);
|
uint8_t chipid = get_st_chipid(data);
|
||||||
PrintAndLogEx(SUCCESS, _GREEN_("%s") " tag", get_st_chip_model(chipid));
|
PrintAndLogEx(SUCCESS, _GREEN_("%s") " tag", get_st_chip_model(chipid));
|
||||||
|
|
||||||
PrintAndLogEx(DEBUG, "systemblock : %s", sprint_hex(data + (blocks * 4), 4));
|
PrintAndLogEx(DEBUG, "systemblock : %s", sprint_hex(systemblock, ST25TB_SR_BLOCK_SIZE));
|
||||||
PrintAndLogEx(DEBUG, " otp lock : %02x %02x", data[(blocks * 4)], data[(blocks * 4) + 1]);
|
PrintAndLogEx(DEBUG, " otp lock : %02x %02x", *systemblock, *(systemblock + 1));
|
||||||
|
|
||||||
print_hdr();
|
print_hdr();
|
||||||
|
|
||||||
for (int i = 0; i <= blocks; i++) {
|
for (int i = 0; i < blocks; i++) {
|
||||||
PrintAndLogEx(INFO,
|
PrintAndLogEx(INFO,
|
||||||
"%3d/0x%02X | %s | %s | %s",
|
"%3d/0x%02X | %s | %s | %s",
|
||||||
i,
|
i,
|
||||||
i,
|
i,
|
||||||
sprint_hex(data + (i * 4), 4),
|
sprint_hex(data + (i * ST25TB_SR_BLOCK_SIZE), ST25TB_SR_BLOCK_SIZE),
|
||||||
get_st_lock_info(chipid, data + (blocks * 4), i),
|
get_st_lock_info(chipid, systemblock, i),
|
||||||
sprint_ascii(data + (i * 4), 4)
|
sprint_ascii(data + (i * ST25TB_SR_BLOCK_SIZE), ST25TB_SR_BLOCK_SIZE)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -813,9 +814,9 @@ static void print_sr_blocks(uint8_t *data, size_t len) {
|
||||||
"%3d/0x%02X | %s | %s | %s",
|
"%3d/0x%02X | %s | %s | %s",
|
||||||
0xFF,
|
0xFF,
|
||||||
0xFF,
|
0xFF,
|
||||||
sprint_hex(data + (0xFF * 4), 4),
|
sprint_hex(systemblock, ST25TB_SR_BLOCK_SIZE),
|
||||||
get_st_lock_info(chipid, data + (blocks * 4), 0xFF),
|
get_st_lock_info(chipid, systemblock, 0xFF),
|
||||||
sprint_ascii(data + (0xFF * 4), 4)
|
sprint_ascii(systemblock, ST25TB_SR_BLOCK_SIZE)
|
||||||
);
|
);
|
||||||
|
|
||||||
print_footer();
|
print_footer();
|
||||||
|
@ -1405,18 +1406,18 @@ static int CmdHF14BDump(const char *Cmd) {
|
||||||
// 1 = 4096
|
// 1 = 4096
|
||||||
// 2 = 512
|
// 2 = 512
|
||||||
uint8_t cardtype = get_st_cardsize(card.uid);
|
uint8_t cardtype = get_st_cardsize(card.uid);
|
||||||
uint8_t blocks = 0;
|
uint8_t lastblock = 0;
|
||||||
uint16_t cardsize = 0;
|
uint16_t cardsize = 0;
|
||||||
|
|
||||||
switch (cardtype) {
|
switch (cardtype) {
|
||||||
case 2:
|
case 2:
|
||||||
cardsize = (512 / 8) + 4;
|
cardsize = (512 / 8) + ST25TB_SR_BLOCK_SIZE;
|
||||||
blocks = 0x0F;
|
lastblock = 0x0F;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
default:
|
default:
|
||||||
cardsize = (4096 / 8) + 4;
|
cardsize = (4096 / 8) + ST25TB_SR_BLOCK_SIZE;
|
||||||
blocks = 0x7F;
|
lastblock = 0x7F;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1486,15 +1487,15 @@ static int CmdHF14BDump(const char *Cmd) {
|
||||||
// last read
|
// last read
|
||||||
if (blocknum == 0xFF) {
|
if (blocknum == 0xFF) {
|
||||||
// we reserved space for this block after 0x0F and 0x7F, ie 0x10, 0x80
|
// we reserved space for this block after 0x0F and 0x7F, ie 0x10, 0x80
|
||||||
memcpy(data + (blocks * 4), recv, 4);
|
memcpy(data + ((lastblock+1) * ST25TB_SR_BLOCK_SIZE), recv, ST25TB_SR_BLOCK_SIZE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
memcpy(data + (blocknum * 4), recv, 4);
|
memcpy(data + (blocknum * ST25TB_SR_BLOCK_SIZE), recv, ST25TB_SR_BLOCK_SIZE);
|
||||||
|
|
||||||
|
|
||||||
retry = 0;
|
retry = 0;
|
||||||
blocknum++;
|
blocknum++;
|
||||||
if (blocknum > blocks) {
|
if (blocknum > lastblock) {
|
||||||
// read config block
|
// read config block
|
||||||
blocknum = 0xFF;
|
blocknum = 0xFF;
|
||||||
}
|
}
|
||||||
|
@ -1521,8 +1522,8 @@ static int CmdHF14BDump(const char *Cmd) {
|
||||||
FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen);
|
FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t datalen = (blocks + 1) * 4;
|
size_t datalen = (lastblock + 2) * ST25TB_SR_BLOCK_SIZE;
|
||||||
pm3_save_dump(filename, data, datalen, jsf14b, 4);
|
pm3_save_dump(filename, data, datalen, jsf14b, ST25TB_SR_BLOCK_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return switch_off_field_14b();
|
return switch_off_field_14b();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue