]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/mifareutil.c
fix/add support for 4K (and other non 1K) card sizes in hf mf commands
[proxmark3-svn] / armsrc / mifareutil.c
index b847043bbd8a00237e54a77a4080ac383f9705fb..0b93db8f7e195f925c808010dedebfe2cbdf9c1b 100644 (file)
@@ -453,6 +453,27 @@ int mifare_ultra_halt(uint32_t uid)
        return 0;
 }
 
+\r
+// Mifare Memory Structure: up to 32 Sectors with 4 blocks each (1k and 2k cards),\r
+// plus evtl. 8 sectors with 16 blocks each (4k cards)\r
+uint8_t NumBlocksPerSector(uint8_t sectorNo) \r
+{\r
+       if (sectorNo < 32) \r
+               return 4;\r
+       else\r
+               return 16;\r
+}\r
+\r
+uint8_t FirstBlockOfSector(uint8_t sectorNo) \r
+{\r
+       if (sectorNo < 32)\r
+               return sectorNo * 4;\r
+       else\r
+               return 32*4 + (sectorNo - 32) * 16;\r
+               \r
+}\r
+\r
+\r
 // work with emulator memory
 void emlSetMem(uint8_t *data, int blockNum, int blocksCount) {
        uint8_t* emCARD = eml_get_bigbufptr_cardmem();
@@ -522,7 +543,7 @@ uint64_t emlGetKey(int sectorNum, int keyType) {
        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
+       memcpy(key, emCARD + 16 * (FirstBlockOfSector(sectorNum) + NumBlocksPerSector(sectorNum) - 1) + keyType * 10, 6);\r
        return bytes_to_num(key, 6);\r
 }\r
 \r
Impressum, Datenschutz