explaingit

ikarus23/mifareclassictool

5,978JavaAudience · developerComplexity · 2/5LicenseSetup · easy

TLDR

Android app for reading, writing, and cloning MIFARE Classic RFID tags, the contactless chips inside keycards and transit passes, using a file of known sector keys.

Mindmap

mindmap
  root((MCT))
    Core actions
      Read tags
      Write tags
      Clone tags
      Inspect data
    Key handling
      Dictionary file
      Sector-by-sector
      No brute force
    Utility tools
      Diff viewer
      Access condition decoder
      Value block decoder
      BCC calculator
    Distribution
      Google Play
      F-Droid
      Direct APK
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Read and dump the contents of a MIFARE Classic keycard or transit pass using a dictionary of known sector keys.

USE CASE 2

Clone one MIFARE Classic tag onto a blank compatible card.

USE CASE 3

Use the built-in diff viewer to compare two tag dumps and see exactly what data changed between reads.

USE CASE 4

Connect an external ACR 122U USB NFC reader to inspect tags that the phone's built-in NFC antenna cannot reach.

Tech stack

JavaAndroid

Getting it running

Difficulty · easy Time to first run · 5min

Requires an Android device with NFC support and a file of known sector keys to unlock protected tag sectors.

Free and open source, check the repository for the exact license terms.

In plain English

MIFARE Classic Tool (MCT) is an Android app for working with MIFARE Classic RFID tags. MIFARE Classic is a type of contactless chip found in many keycards, transit cards, and access badges. The app lets you read the data stored on these tags, write new data to them, clone one tag's contents onto another, and inspect or edit the raw data. The core workflow involves keys: MIFARE Classic tags are divided into sectors, and each sector is protected by one or two keys. The app includes a dictionary-based approach where you supply a file of keys you already know, and the app tries each one against each sector to read as much of the tag as it can unlock. It does not crack or brute-force keys it does not already have, and the README is explicit that no key-cracking capability exists or will be added. Beyond reading and writing, the app includes several utility tools: a diff viewer to compare two tag dumps, a decoder for the access condition bytes that control what operations each sector allows, a value block decoder, a BCC calculator, and a display mode that shows raw tag data as readable ASCII alongside the standard hex view. There is also support for external USB NFC readers like the ACR 122U, for cases where the phone's built-in NFC hardware cannot reach a tag. The app is available on Google Play, F-Droid (the open-source Android app store), and as a direct APK download. It is free and open source. The README notes that users need at least basic familiarity with MIFARE Classic technology and should be comfortable reading hexadecimal data, since all input and output is in hex.

Copy-paste prompts

Prompt 1
I have a MIFARE Classic keycard and a list of known sector keys. Using MIFARE Classic Tool on Android, how do I attempt to read all sectors and save the resulting dump file?
Prompt 2
Walk me through cloning a MIFARE Classic tag to a blank card step by step using MIFARE Classic Tool.
Prompt 3
How do I decode the access condition bytes of a MIFARE Classic sector in MCT to understand which operations are allowed on that sector?
Prompt 4
Using MCT's diff viewer, how can I compare two dump files from the same card taken at different times to see which bytes changed?
Prompt 5
I want to edit raw hex data in a MIFARE Classic dump file and write it back to a card using MCT, what is the workflow?
Open on GitHub → Explain another repo

← ikarus23 on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.