]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/mifareutil.c
small updates to hf mf restore1k
[proxmark3-svn] / armsrc / mifareutil.c
index 8970813567d2a5ede69d2a43e20a5418b2771aca..c5843fd7474decf2db8adbf9c9be7345f2827fbb 100644 (file)
@@ -339,6 +339,60 @@ void emlGetMemBt(uint8_t *data, int bytePtr, int byteCount) {
        memcpy(data, emCARD + bytePtr, byteCount);\r
 }\r
 \r
+int emlCheckValBl(int blockNum) {\r
+       uint8_t* emCARD = eml_get_bigbufptr_cardmem();\r
+       uint8_t* data = emCARD + blockNum * 16;\r
+\r
+       if ((data[0] != (data[4] ^ 0xff)) || (data[0] != data[8]) ||\r
+                       (data[1] != (data[5] ^ 0xff)) || (data[1] != data[9]) ||\r
+                       (data[2] != (data[6] ^ 0xff)) || (data[2] != data[10]) ||\r
+                       (data[3] != (data[7] ^ 0xff)) || (data[3] != data[11]) ||\r
+                       (data[12] != (data[13] ^ 0xff)) || (data[12] != data[14]) ||\r
+                       (data[12] != (data[15] ^ 0xff))\r
+                ) \r
+               return 1;\r
+       return 0;\r
+}\r
+\r
+int emlGetValBl(uint32_t *blReg, uint8_t *blBlock, int blockNum) {\r
+       uint8_t* emCARD = eml_get_bigbufptr_cardmem();\r
+       uint8_t* data = emCARD + blockNum * 16;\r
+       \r
+       if (emlCheckValBl(blockNum)) {\r
+               return 1;\r
+       }\r
+       \r
+       memcpy(blReg, data, 4);\r
+       *blBlock = data[12];\r
+       \r
+       return 0;\r
+}\r
+\r
+int emlSetValBl(uint32_t blReg, uint8_t blBlock, int blockNum) {\r
+       uint8_t* emCARD = eml_get_bigbufptr_cardmem();\r
+       uint8_t* data = emCARD + blockNum * 16;\r
+       \r
+       memcpy(data + 0, &blReg, 4);\r
+       memcpy(data + 8, &blReg, 4);\r
+       blReg = blReg ^ 0xffffffff;\r
+       memcpy(data + 4, &blReg, 4);\r
+       \r
+       data[12] = blBlock;\r
+       data[13] = blBlock ^ 0xff;\r
+       data[14] = blBlock;\r
+       data[15] = blBlock ^ 0xff;\r
+       \r
+       return 0;\r
+}\r
+\r
+uint64_t emlGetKey(int sectorNum, int keyType) {\r
+       uint8_t key[6];\r
+       uint8_t* emCARD = eml_get_bigbufptr_cardmem();\r
+       \r
+       memcpy(key, emCARD + 3 * 16 + sectorNum * 4 * 16 + keyType * 10, 6);\r
+       return bytes_to_num(key, 6);\r
+}\r
+\r
 void emlClearMem(void) {\r
        int i;\r
        \r
Impressum, Datenschutz