- // check if we have unrecognized keys\r
- bool notFoundKeys = false;\r
- for (i = 0; i < SectorsCnt; i++) {\r
- for (j = 0; j < 2; j++) {\r
- if (!e_sector[i].foundKey[j]) {\r
- notFoundKeys = true;\r
- break;\r
- }\r
- }\r
- if (notFoundKeys) break;\r
- } \r
- \r
- if (notFoundKeys) {\r
- PrintAndLog("-----------------------------------------------\n");\r
- PrintAndLog("We have unrecognized keys. Trying to check if we have this keys on key buffer...");\r
-\r
- // fill keyBlock with known keys\r
- int cnt = 0;\r
- for (i = 0; i < SectorsCnt; i++) {\r
- for (j = 0; j < 2; j++) {\r
- if (e_sector[i].foundKey[j]) {\r
- // try to insert key to keyBlock \r
- if (cnt < NESTED_KEY_COUNT) {\r
-\r
- // search for dublicates\r
- bool dubl = false;\r
- for (int v = 0; v < NESTED_KEY_COUNT; v++) {\r
- if (e_sector[i].Key[j] == bytes_to_num((uint8_t*)(keyBlock + v * 6), 6)) {\r
- dubl = true;\r
- break;\r
- }\r
- }\r
- \r
- // insert\r
- if (!dubl) {\r
- num_to_bytes(e_sector[i].Key[j], 6, (uint8_t*)(keyBlock + cnt * 6));\r
- cnt++;\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- // try to auth with known keys to not recognized sectors keys\r
- PrintAndLog("Testing keys. Sector count=%d known keys count:%d", SectorsCnt, cnt);\r
- for (i = 0; i < SectorsCnt; i++) {\r
- for (j = 0; j < 2; j++) {\r
- if (e_sector[i].foundKey[j]) continue;\r
-\r
- res = mfCheckKeys(FirstBlockOfSector(i), j, true, cnt, keyBlock, &key64); \r
-\r
- if (!res) {\r
- e_sector[i].Key[j] = key64;\r
- e_sector[i].foundKey[j] = 1;\r
- }\r
- }\r
- } \r
- \r
- } // if (notFoundKeys)\r
- \r