Mf_classic_dict.nfc

hello if I place an updated mf_classic_dict.NFC in nfc/assets on my sd card will the flipper utilize the keys in the file

Yes

Is there some specific procedure for this? What I did:

  • downloaded the mf_classic_dict.NFC file to my PC
  • added a bunch of known keys for card I own and read with my ACR
  • uploaded the file with same name
  • Used the Read Card NFC function, got NFC-a Mifare classic
  • Additional reading scripts
  • Read Mifare classic

I expected the card to be read but it seems it tries to crack it (keys found 0/32), even if the keys are in in the updated dict file.
Also, what about writing an existing dump from mfc classic tools?

Also, it would be useful to have a custom key file that is used with the original one, so you can have your version and the distributed one together. Order should be custom => distro.
Thanks

The cracking process is the reading. It tries every key in the dictionary and checks if it works. You can create a user dictionary in the NFC app now and add keys to it, it has higher priority than the default one and your card will be read more quickly, but even in the current state the card will eventually be read, it’ll just take some time (up to 30-50 minutes depending on the card)

Writing dumps is not yet supported but planned in the future

1 Like

I don’t completely get the terms probably. I “crack” the Mifare keys using specific tools not on the Zero, like mfoc +hardnested patch. Once I have the keys, and this is my case, you don’t need to “crack” anything, just read the sectors from the card. If you have a specific dictionary you do not have to even try the keys, they are the right ones. It takes a couple of second to read a complete Mifare having keys. Am I missing something?
Also I cannot find the way to add a custom dict in the NFC app, I have Read, Run special action, Saved, Add Manually. The last one allows me to create a card, not a key dictionary. Is there some doc about it? I was looking for a way to do it and found this thread but it says to patch the dict, not to create a new one.
Thanks

You need to switch to the RC branch for custom dictionaries, it’s not yet in the Release branch

The flipper currently doesn’t have an explicit “Read card with known keys” option. Every read of the card is the flipper first running a dictionary attack (and even if you have the correct keys, if there placed at the end of the dictionary file it’ll check them last), and because our key dictionary doesn’t have a “Sector:KeyA:KeyB” structure and instead is just a list of keys without any indication to what sector they belong, we can’t just read the card without creating a key map (via a dictionary attack) first.

The user dictionary makes this easier by allowing you to create a user dictionary which will be checked first, which can speed up the reading (though if you just add your keys to the beginning of our key file, the behavior will be the same) of the card. You still have to try the keys, because you don’t know which sector each one of them belongs to.

However, after the first read, the key map is saved in the key cache on the SD card, and the subsequent reads will be almost instant (due to us now knowing what sector uses which key).

Thank you for the explanation. Will stay on release and move my keys to the head of the current dictionary. My use case also requires writing captured dumps so I need to wait in any case.
Any ETA for any of the two features in stable?
Thanks

The user dictionary will be added in about a week, and writing Mifare Classic will be implemented in the coming few months

Got it in the today’s update. Have no Idea how to use the Flipper interface (it seems to always add/edit the last key) but since it is more handy to upload the file from the PC I did that way.
One thing I noted. I added a custom dict with 5 keys, flipper said there were 4 keys in my dict. I needed to add an extra Newline after the last key to have Flipper read it. This should be fixed in the parser or documented, you risk to skip keys in reading.
Thanks

I can also confirm that reading the card this way is a lot faster, about 5 seconds for full 16 sectors.

Adding to my message above: the standard dict contains 1242 keys, the Flipper interface says 1241. Last is not read because of the missing newline.
Should I open an issue or will you open it?
Running 0.63.3

Yes, please open the issue, that’s an oversight on our part

Last line of NFC keys dictionaries may be skipped · Issue #1521 · flipperdevices/flipperzero-firmware (github.com)

2 Likes