mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-20 05:13:22 -07:00
when emulating ISO15693, check for the correct address when addressed mode was selected
This commit is contained in:
parent
2e69d17693
commit
31e4c66f00
1 changed files with 19 additions and 2 deletions
|
@ -2375,6 +2375,15 @@ void Iso15693InitTag(void) {
|
||||||
StartCountSspClk();
|
StartCountSspClk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RevUidMatch(uint8_t *uid, uint8_t *pkt) {
|
||||||
|
for(int pos = 0; pos < 8; pos++) {
|
||||||
|
if(uid[pos] != pkt[7-pos]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Simulate an ISO15693 TAG.
|
// Simulate an ISO15693 TAG.
|
||||||
// For Inventory command: print command and send Inventory Response with given UID
|
// For Inventory command: print command and send Inventory Response with given UID
|
||||||
// TODO: interpret other reader commands and send appropriate response
|
// TODO: interpret other reader commands and send appropriate response
|
||||||
|
@ -2442,12 +2451,20 @@ void SimTagIso15693(uint32_t parameter, uint8_t *uid) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t flags = cmd[0];
|
uint8_t flags = cmd[0];
|
||||||
bool slow = !(flags & ISO15693_REQ_DATARATE_HIGH);
|
|
||||||
bool addressed = (flags & ISO15693_REQ_ADDRESS);
|
|
||||||
uint8_t command = cmd[1];
|
uint8_t command = cmd[1];
|
||||||
|
bool slow = !(flags & ISO15693_REQ_DATARATE_HIGH);
|
||||||
|
bool addressed = !(flags & ISO15693_REQ_INVENTORY) && (flags & ISO15693_REQ_ADDRESS);
|
||||||
|
/* when commands above 0xA0 are sent, its most likely a manufacturer code. for SLIX-L it contains an extra byte 0x04 right after the command */
|
||||||
|
bool advanced = addressed && (command >= 0xA0);
|
||||||
|
uint8_t *address = &cmd[2 + (advanced?1:0)];
|
||||||
|
|
||||||
start_time = eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM;
|
start_time = eof_time + DELAY_ISO15693_VCD_TO_VICC_SIM;
|
||||||
|
|
||||||
|
if(addressed && !RevUidMatch(address, uid)) {
|
||||||
|
Dbprintf("(addressed packet, but not for us)");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(debug || passive) {
|
if(debug || passive) {
|
||||||
Dbprintf("%d bytes read from reader:", cmd_len);
|
Dbprintf("%d bytes read from reader:", cmd_len);
|
||||||
Dbhexdump(cmd_len, cmd, false);
|
Dbhexdump(cmd_len, cmd, false);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue