Merge pull request #504 from bosb/hitags_fixes

Fix hitagS reader output
This commit is contained in:
Iceman 2020-01-01 22:17:31 +01:00 committed by GitHub
commit 3d2b0f6a90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 33 deletions

View file

@ -400,6 +400,7 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
- Added trailer block decoding to `hf mf rdbl` and `hf mf cgetbl` (@merlokk)
- Added `hf mf mad` and `hf mfp mad` MAD decode, check and print commands (@merlokk)
- Add `script run luxeodump` (@0xdrrb)
- Fix `lf hitag reader 02` - print all bytes (@bosb)
### Fixed

View file

@ -953,6 +953,13 @@ void SimulateHitagSTag(bool tag_mem_supplied, uint8_t *data) {
tag.max_page = 8;
if ((tag.pages[1][3] & 0x2) == 0 && (tag.pages[1][3] & 0x1) == 0)
tag.max_page = 0;
if (DBGLEVEL >= DBG_EXTENDED)
for (i = 0; i < tag.max_page; i++)
Dbprintf("Page[%2d]: %02X %02X %02X %02X", i,
(tag.pages[i][3]) & 0xff,
(tag.pages[i][2]) & 0xff,
(tag.pages[i][1]) & 0xff,
tag.pages[i][0] & 0xff);
//con1
tag.auth = 0;
if ((tag.pages[1][2] & 0x80) == 0x80)
@ -1145,7 +1152,7 @@ void ReadHitagS(hitag_function htf, hitag_data *htd) {
int reset_sof = 1;
int t_wait = HITAG_T_WAIT_MAX;
bool bStop = false;
int sendNum = 0;
int pageNum = 0;
unsigned char mask = 1;
unsigned char crc;
unsigned char pageData[32];
@ -1265,15 +1272,15 @@ void ReadHitagS(hitag_function htf, hitag_data *htd) {
tag.tstate = HT_READING_PAGE;
txlen = 20;
crc = CRC_PRESET;
tx[0] = 0xc0 + (sendNum / 16);
tx[0] = 0xc0 + (pageNum / 16);
calc_crc(&crc, tx[0], 8);
calc_crc(&crc, 0x00 + ((sendNum % 16) * 16), 4);
tx[1] = 0x00 + ((sendNum % 16) * 16) + (crc / 16);
calc_crc(&crc, 0x00 + ((pageNum % 16) * 16), 4);
tx[1] = 0x00 + ((pageNum % 16) * 16) + (crc / 16);
tx[2] = 0x00 + (crc % 16) * 16;
} else if (tag.pstate == HT_SELECTED
&& tag.tstate == HT_READING_PAGE
&& rxlen > 0) {
//save received data
//save received data - 40 bits
z = 0;
for (i = 0; i < 5; i++) {
for (j = 0; j < 8; j++) {
@ -1284,38 +1291,38 @@ void ReadHitagS(hitag_function htf, hitag_data *htd) {
}
}
k = 0;
for (i = 4; i < 36; i++) {
for (i = 4; i < 36; i++) { // ignore first 4 bits: SOF (actualy 1 or 6 depending on response protocol)
pageData[k] = response_bit[i];
k++;
}
for (i = 0; i < 4; i++)
tag.pages[sendNum / 4][sendNum % 4] = 0x0;
for (i = 0; i < 4; i++) {
tag.pages[sendNum / 4][sendNum % 4] += ((pageData[i * 8] << 7)
| (pageData[1 + (i * 8)] << 6)
| (pageData[2 + (i * 8)] << 5)
| (pageData[3 + (i * 8)] << 4)
| (pageData[4 + (i * 8)] << 3)
| (pageData[5 + (i * 8)] << 2)
| (pageData[6 + (i * 8)] << 1) | pageData[7 + (i * 8)])
<< (i * 8);
for (i = 0; i < 4; i++) // set page bytes to 0
tag.pages[pageNum][i] = 0x0;
for (i = 0; i < 4; i++) { // set page bytes from recieved bits
tag.pages[pageNum][i] += ((pageData[i * 8] << 7)
| (pageData[1 + (i * 8)] << 6)
| (pageData[2 + (i * 8)] << 5)
| (pageData[3 + (i * 8)] << 4)
| (pageData[4 + (i * 8)] << 3)
| (pageData[5 + (i * 8)] << 2)
| (pageData[6 + (i * 8)] << 1)
| pageData[7 + (i * 8)]);
}
if (tag.auth && tag.LKP && sendNum == 1) {
Dbprintf("Page[%2d]: %02X %02X %02X %02X", sendNum, pwdh0,
(tag.pages[sendNum / 4][sendNum % 4] >> 16) & 0xff,
(tag.pages[sendNum / 4][sendNum % 4] >> 8) & 0xff,
tag.pages[sendNum / 4][sendNum % 4] & 0xff);
if (tag.auth && tag.LKP && pageNum == 1) {
Dbprintf("Page[%2d]: %02X %02X %02X %02X", pageNum, pwdh0,
(tag.pages[pageNum][2]) & 0xff,
(tag.pages[pageNum][1]) & 0xff,
tag.pages[pageNum][0] & 0xff);
} else {
Dbprintf("Page[%2d]: %02X %02X %02X %02X", sendNum,
(tag.pages[sendNum / 4][sendNum % 4] >> 24) & 0xff,
(tag.pages[sendNum / 4][sendNum % 4] >> 16) & 0xff,
(tag.pages[sendNum / 4][sendNum % 4] >> 8) & 0xff,
tag.pages[sendNum / 4][sendNum % 4] & 0xff);
Dbprintf("Page[%2d]: %02X %02X %02X %02X", pageNum,
(tag.pages[pageNum][3]) & 0xff,
(tag.pages[pageNum][2]) & 0xff,
(tag.pages[pageNum][1]) & 0xff,
tag.pages[pageNum][0] & 0xff);
}
sendNum++;
pageNum++;
//display key and password if possible
if (sendNum == 2 && tag.auth == 1 && tag.LKP) {
if (pageNum == 2 && tag.auth == 1 && tag.LKP) {
if (htf == RHTSF_KEY) {
Dbprintf("Page[ 2]: %02X %02X %02X %02X",
(uint8_t)(key >> 8) & 0xff,
@ -1338,12 +1345,12 @@ void ReadHitagS(hitag_function htf, hitag_data *htd) {
txlen = 20;
crc = CRC_PRESET;
tx[0] = 0xc0 + (sendNum / 16);
tx[0] = 0xc0 + (pageNum / 16);
calc_crc(&crc, tx[0], 8);
calc_crc(&crc, 0x00 + ((sendNum % 16) * 16), 4);
tx[1] = 0x00 + ((sendNum % 16) * 16) + (crc / 16);
calc_crc(&crc, 0x00 + ((pageNum % 16) * 16), 4);
tx[1] = 0x00 + ((pageNum % 16) * 16) + (crc / 16);
tx[2] = 0x00 + (crc % 16) * 16;
if (sendNum >= tag.max_page) {
if (pageNum >= tag.max_page) {
bStop = !false;
}
}