mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-03-19 11:33:51 +08: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) {
|
||||
|
||||
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);
|
||||
PrintAndLogEx(SUCCESS, _GREEN_("%s") " tag", get_st_chip_model(chipid));
|
||||
|
||||
PrintAndLogEx(DEBUG, "systemblock : %s", sprint_hex(data + (blocks * 4), 4));
|
||||
PrintAndLogEx(DEBUG, " otp lock : %02x %02x", data[(blocks * 4)], data[(blocks * 4) + 1]);
|
||||
PrintAndLogEx(DEBUG, "systemblock : %s", sprint_hex(systemblock, ST25TB_SR_BLOCK_SIZE));
|
||||
PrintAndLogEx(DEBUG, " otp lock : %02x %02x", *systemblock, *(systemblock + 1));
|
||||
|
||||
print_hdr();
|
||||
|
||||
for (int i = 0; i <= blocks; i++) {
|
||||
for (int i = 0; i < blocks; i++) {
|
||||
PrintAndLogEx(INFO,
|
||||
"%3d/0x%02X | %s | %s | %s",
|
||||
i,
|
||||
i,
|
||||
sprint_hex(data + (i * 4), 4),
|
||||
get_st_lock_info(chipid, data + (blocks * 4), i),
|
||||
sprint_ascii(data + (i * 4), 4)
|
||||
sprint_hex(data + (i * ST25TB_SR_BLOCK_SIZE), ST25TB_SR_BLOCK_SIZE),
|
||||
get_st_lock_info(chipid, systemblock, i),
|
||||
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",
|
||||
0xFF,
|
||||
0xFF,
|
||||
sprint_hex(data + (0xFF * 4), 4),
|
||||
get_st_lock_info(chipid, data + (blocks * 4), 0xFF),
|
||||
sprint_ascii(data + (0xFF * 4), 4)
|
||||
sprint_hex(systemblock, ST25TB_SR_BLOCK_SIZE),
|
||||
get_st_lock_info(chipid, systemblock, 0xFF),
|
||||
sprint_ascii(systemblock, ST25TB_SR_BLOCK_SIZE)
|
||||
);
|
||||
|
||||
print_footer();
|
||||
|
@ -1405,18 +1406,18 @@ static int CmdHF14BDump(const char *Cmd) {
|
|||
// 1 = 4096
|
||||
// 2 = 512
|
||||
uint8_t cardtype = get_st_cardsize(card.uid);
|
||||
uint8_t blocks = 0;
|
||||
uint8_t lastblock = 0;
|
||||
uint16_t cardsize = 0;
|
||||
|
||||
switch (cardtype) {
|
||||
case 2:
|
||||
cardsize = (512 / 8) + 4;
|
||||
blocks = 0x0F;
|
||||
cardsize = (512 / 8) + ST25TB_SR_BLOCK_SIZE;
|
||||
lastblock = 0x0F;
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
cardsize = (4096 / 8) + 4;
|
||||
blocks = 0x7F;
|
||||
cardsize = (4096 / 8) + ST25TB_SR_BLOCK_SIZE;
|
||||
lastblock = 0x7F;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1486,15 +1487,15 @@ static int CmdHF14BDump(const char *Cmd) {
|
|||
// last read
|
||||
if (blocknum == 0xFF) {
|
||||
// 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;
|
||||
}
|
||||
memcpy(data + (blocknum * 4), recv, 4);
|
||||
memcpy(data + (blocknum * ST25TB_SR_BLOCK_SIZE), recv, ST25TB_SR_BLOCK_SIZE);
|
||||
|
||||
|
||||
retry = 0;
|
||||
blocknum++;
|
||||
if (blocknum > blocks) {
|
||||
if (blocknum > lastblock) {
|
||||
// read config block
|
||||
blocknum = 0xFF;
|
||||
}
|
||||
|
@ -1521,8 +1522,8 @@ static int CmdHF14BDump(const char *Cmd) {
|
|||
FillFileNameByUID(fptr, SwapEndian64(card.uid, card.uidlen, 8), "-dump", card.uidlen);
|
||||
}
|
||||
|
||||
size_t datalen = (blocks + 1) * 4;
|
||||
pm3_save_dump(filename, data, datalen, jsf14b, 4);
|
||||
size_t datalen = (lastblock + 2) * ST25TB_SR_BLOCK_SIZE;
|
||||
pm3_save_dump(filename, data, datalen, jsf14b, ST25TB_SR_BLOCK_SIZE);
|
||||
}
|
||||
|
||||
return switch_off_field_14b();
|
||||
|
|
Loading…
Add table
Reference in a new issue