CHG: 'hf mf chk' now correctly tests to read key B, when we specify target keytype B or ?.

CHG: 'hf mf chk'  now correctly init all sector keys to 0xFFFFFFFFFFFF,  so it looks unified.
This commit is contained in:
iceman1001 2016-04-23 11:32:37 +02:00
commit d948e0d140

View file

@ -1168,6 +1168,15 @@ int CmdHF14AMfChk(const char *Cmd) {
return 1;
}
// empty e_sector
for(int i = 0; i < SectorsCnt; ++i){
e_sector[i].Key[0] = 0xffffffffffff;
e_sector[i].Key[1] = 0xffffffffffff;
e_sector[i].foundKey[0] = FALSE;
e_sector[i].foundKey[1] = FALSE;
}
uint8_t trgKeyType = 0;
uint32_t max_keys = keycnt > (USB_CMD_DATA_SIZE/6) ? (USB_CMD_DATA_SIZE/6) : keycnt;
@ -1183,21 +1192,15 @@ int CmdHF14AMfChk(const char *Cmd) {
// skip already found keys.
if (e_sector[i].foundKey[trgKeyType]) continue;
for (uint32_t c = 0; c < keycnt; c += max_keys) {
uint32_t size = keycnt-c > max_keys ? max_keys : keycnt-c;
res = mfCheckKeys(b, trgKeyType, true, size, &keyBlock[6*c], &key64);
if (!res) {
//PrintAndLog("Sector:%3d Block:%3d, key type: %C -- Found key [%012"llx"]", i, b, trgKeyType ? 'B':'A', key64);
e_sector[i].Key[trgKeyType] = key64;
e_sector[i].foundKey[trgKeyType] = TRUE;
break;
} else {
e_sector[i].Key[trgKeyType] = 0xffffffffffff;
e_sector[i].foundKey[trgKeyType] = FALSE;
}
printf(".");
fflush(stdout);
@ -1210,7 +1213,9 @@ int CmdHF14AMfChk(const char *Cmd) {
printf("\nTime in checkkeys: %.0f ticks\n", (float)t1);
// 20160116 If Sector A is found, but not Sector B, try just reading it of the tag?
PrintAndLog("testing to read B...");
if ( keyType != 1 ) {
PrintAndLog("testing to read key B...");
for (i = 0; i < SectorsCnt; i++) {
// KEY A but not KEY B
if ( e_sector[i].foundKey[0] && !e_sector[i].foundKey[1] ) {
@ -1239,6 +1244,7 @@ int CmdHF14AMfChk(const char *Cmd) {
}
}
}
}
//print them