mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-14 02:26:59 -07:00
fix/add support for 4K (and other non 1K) card sizes in hf mf commands
- hf mf rdsc (fix): didn't account for 16 block sectors, allowed max sector 63 instead of 39 - hf mf ecfill (add): added (optional) card size parameter and support for non 1K cards - hf mf dump (add): added (optional) card size parameter and support for non 1K cards - hf mf dump (fix): Access Condition 011 not handled correctly (tried to access with key A) - hf mf restore (add): added (optional) card size parameter and support for non 1K cards - hf mf nested (fix): didn't account for 16 block sectors, allowed max sector 63 instead of 39 - hf mf nested (fix): always dumped 16 keys to dumpkeys.bin instead of correct number - hf mf chk (fix): always dumped 16 keys to dumpkeys.bin instead of correct number - hf mf eget (fix): displayed three instead of one block - hf mf eload (add): load 4K .eml files (but accepts 1K .eml files for backwards compatibility) - hf mf esave (add): always save the whole emulator memory (4K) instead of 1K only - hf mf ecfill (add): added (optional) card size parameter and support for non 1K cards
This commit is contained in:
parent
fdefed663f
commit
baeaf57950
4 changed files with 559 additions and 582 deletions
|
@ -453,6 +453,27 @@ int mifare_ultra_halt(uint32_t uid)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// Mifare Memory Structure: up to 32 Sectors with 4 blocks each (1k and 2k cards),
|
||||
// plus evtl. 8 sectors with 16 blocks each (4k cards)
|
||||
uint8_t NumBlocksPerSector(uint8_t sectorNo)
|
||||
{
|
||||
if (sectorNo < 32)
|
||||
return 4;
|
||||
else
|
||||
return 16;
|
||||
}
|
||||
|
||||
uint8_t FirstBlockOfSector(uint8_t sectorNo)
|
||||
{
|
||||
if (sectorNo < 32)
|
||||
return sectorNo * 4;
|
||||
else
|
||||
return 32*4 + (sectorNo - 32) * 16;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 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];
|
||||
uint8_t* emCARD = eml_get_bigbufptr_cardmem();
|
||||
|
||||
memcpy(key, emCARD + 3 * 16 + sectorNum * 4 * 16 + keyType * 10, 6);
|
||||
memcpy(key, emCARD + 16 * (FirstBlockOfSector(sectorNum) + NumBlocksPerSector(sectorNum) - 1) + keyType * 10, 6);
|
||||
return bytes_to_num(key, 6);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue