]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/mifareutil.c
1. emulator works. tested on ARC1302, NXP pegoda, touchtag, my firm's readers.
[proxmark3-svn] / armsrc / mifareutil.c
index be36e9db2a0abd5f6c5d77b6fda4a500fbed26ba..c5843fd7474decf2db8adbf9c9be7345f2827fbb 100644 (file)
@@ -339,6 +339,52 @@ 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
Impressum, Datenschutz