Dupliquer le contenu d’une puce RFID (Mifare Classic)

Cet article fait partie de la série Expériences NFC / RFID (4 articles au total)

Vous êtes de plus en plus nombreux à me poser des questions sur les puces RFID. Pour ceux qui ne connaissent pas ce sigle, sachez que c’est cette techno qui se cache bien souvent derrière vos carte d’accès à votre parking/immeuble/local vélo etc… Depuis quelques années, de plus en plus de systèmes « à clés » sont remplacés par des cartes/badges RFID, sous prétexte de fournir une plus grande sécurité. Mais du coup, vous êtes vous déjà renseignés s’il était possible de se faire un double ?

Pourquoi vouloir faire une copie ?

Peut-être que comme moi, vous n’avez qu’une carte d’accès à votre parking alors que vous êtes deux à utiliser une même voiture. Et si auparavant pour obtenir un double de clé il suffisait de se déplacer chez le cordonnier du quartier, pour une carte RFID c’est une autre paire de manches ! Dans mon cas la réponse du gestionnaire du parking est simple : impossible de me fournir un double, le seul moyen d’avoir une deuxième carte est de louer une place de parking supplémentaire ! Qu’à cela ne tienne, si on ne peut pas me fournir de double, je peux peut-être m’en faire un moi-même ?

Il y a RFID et RFID

Des familles de puces RFID, il y en a quelques unes. Chacune a ses propres caractéristiques et sa fréquence de fonctionnement. Dans mon cas, la puce cachée dans ma carte de parking est une puce Mifare Classic 1K. Un type de puce très courant. En terme de caractéristiques, celle-ci fonctionne a une fréquence de 13.56Mhz, peut contenir jusqu’à 1kilo-octet de données et est protégée par plusieurs clés de chiffrement pour justement empêcher de lire tout le contenu de celle-ci (et donc d’en faire une copie).

Mifare Classic 1K et sécurité

Là où les choses deviennent intéressantes c’est qu’en 2007/2008/2009, plusieurs chercheurs européens ont mis en évidence des vulnérabilités sur la méthode de sécurisation des puces Mifare Classic et il n’aura pas fallu attendre longtemps pour que des outils exploitant ces faiblesses voient le jour. C’est le cas de toute une suite d’outils que j’aime bien et dont je vais vous parler dans cet article : les NFC-Tools.

Notez que les techniques mises en œuvre dans cet article ne sont pas les plus efficaces : cela prendra une dizaine de minutes sur un PC standard, là où les techniques les plus avancées peuvent récupérer le contenu d’une carte complète instantanément.

Dupliquer le contenu d’une puce Mifare Classic 1K

La liste des courses

Pas d’inquiétudes ici, la liste est courte ! Pour dupliquer le contenu de la puce (nos fameux 1 kilo-octets de données) on va avoir besoin d’un PC sous Linux et de 2 éléments qu’il faudra bien choisir :

    • un lecteur RFID compatible avec les NFC Tools
  • une puce RFID vierge (du type Mifare 1K)

Pour le lecteur RFID, il n’y a pas 50 modèles de lecteurs compatibles avec les nfc-tools, et je vous avoue que j’ai un peu galéré à dénicher le mien ! J’en ai 2 différents, qui marchent aussi bien l’un que l’autre : un Identive SCL3711 et un ACR122U. Si vous souhaitez en acheter un, cliquez sur sa photo ci-dessous.

identive-scm-scl3711
Acheter le lecteur RFID USB Identive SCL3711 sur Amazon
Acheter le lecteur ACR122U sur la boutique de l’Atelier du Geek

Pour la puce RFID vierge, il faut très logiquement en choisir une du même type que celle à dupliquer, en l’occurrence nous avons donc besoin du puce Mifare Classic 1K vierge. La forme importe peu, qu’il s’agisse d’une carte, d’un badge ou d’un autocollant, tant que la puce est du bon type. Choisissez le plus pratique pour vous !

Pour la suite de ce tuto, j’utilise une distribution Linux dérivée de Debian, Linux Mint. Cela devrait donc fonctionner sur toutes les distributions avec la même base (Ubuntu, Linux Mint, Kali, Debian…).

Installation des outils logiciels

Pour jouer avec les puces RFID et notamment les puces Mifare, on va avoir besoin de 2 outils du projet NFC-Tools : libnfc et mfoc. Je n’ai pas trouvé de paquets « prêt à l’emploi » et il faut donc récupérer les sources de ces outils pour les compiler avant de les installer. Pour cela, il va falloir jouer de la ligne de commande :

Installation de libnfc

sudo apt-get install libusb-dev
wget http://libnfc.googlecode.com/files/libnfc-1.7.0.tar.bz2
tar -xjvf libnfc-1.7.0.tar.bz2
cd libnfc-1.7.0/
./configure --with-drivers=all
make
sudo make install

Installation de mfoc

wget https://github.com/nfc-tools/mfoc/archive/mfoc-0.10.7.tar.gz
unzip mfoc-0.10.7.zip
cd mfoc-0.10.7
./configure LDFLAGS=-L/usr/local/lib PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
make
make install

Maintenant que nos outils logiciels sont installés, on branche le lecteur SCL3711, on pose notre carte RFID dessus et on entre la commande suivante :

nfc-list

Et si tout est correctement installé, votre console devrait afficher quelque chose de ce genre là :

NFC device: SCM Micro / SCL3711-NFC&RW opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 03
UID (NFCID1): 21 ad 3b 1a
SAK (SEL_RES): 09

Ok, maintenant on est prêt à passer aux choses sérieuses.

Copie des données de la puce mifare : la cinématique

Pour faire une copie des données de la puce mifare, il va falloir procéder en 3 étapes :

    1. Trouver les clés de chiffrement de la puce vierge
    1. Sauvegarder le contenu de la puce mifare dans un fichier
  1. Transférer le contenu du fichier de sauvegarde sur la puce vierge

L’opération prend environ une quinzaine de minutes et demandera là aussi de saisir des commandes dans le terminal.

Etape 1/3 : Trouver les clés de chiffrement de la puce vierge

Placer la puce vierge sur votre lecteur RFID et entrez la commande suivante :

mfoc -P 500 -O carte-vierge.dmp

Le contenu , et les clés de chiffrement de votre carte vierge est désormais sauvegardé dans le fichier carte-vierge.dmp

Etape 2/3 : Sauvegarder le contenu de la puce mifare à copier dans un fichier

Placer la puce mifare à copier sur votre lecteur RFID et entrez la commande suivante :

mfoc -P 500 -O carte-originale.dmp

Le contenu de la carte originale est sauvegardé dans le fichier carte-originale.dmp. Je vous conseille de garder de côté ce fichier : en cas de perte de la carte originale, il vous permettra d’en créer de nouvelle.

Etape 3/3 : Transférer le contenu du fichier de sauvegarde sur la puce vierge

A nouveau, placez la puce RFID vierge sur votre lecteur RFID et entrez la commande suivante :

nfc-mfclassic w a carte-originale.dmp carte-vierge.dmp

Un message devrait vous informer du succès de l’opération. Et voilà, vous avez désormais 2 puces RFID avec le même contenu !

Ces cartes sont-elles vraiment identiques ?

Hélas pas vraiment ! Si dans mon cas je peux désormais accéder à ma place de parking avec mon badge original ou mon badge copié, il n’en va pas forcément de même avec tous les lecteurs d’accès RFID. La faute à l’identifiant unique de la puce (dans le jargon on appelle ça l’UID pour Unique IDentifier). Cet identifiant est gravé en usine et chaque puce possède un UID unique au monde. Si produire un clone parfait de votre carte vous intéresse n’ayez crainte, il existe des solutions ! J’en parlerai dans un prochain article ;)

Tous les articles de la série Expériences NFC / RFID

Dupliquer le contenu d’une puce RFID (Mifare Classic)

93 réflexions au sujet de « Dupliquer le contenu d’une puce RFID (Mifare Classic) »

  1. Bonjour Alex,
    As-tu eu le temps d’avancer sur le clone parfait ?

    Merci pour ta réponse,
    Yassin

  2. Bonjour Alex,
    Déjà merci pour ton tuto.
    Je suis sur Debian 7 en VM sur Vmware Workstation
    Je suis bloqué à l’étape du téléchargement du paquet car le lien est mort.
    « wget http://libnfc.googlecode.com/files/libnfc-1.7.0.tar.bz2 »

    Du coup j’ai trouvé ce paquet « libnfc-bin 1.7.1-4 » : http://http.debian.net/debian/pool/main/libn/libnfc/libnfc_1.7.1.orig.tar.gz
    Mais je n’arrive pas à l’installer.
    J’ai essayé ./configure ou ./libnfc5.install mais sans succès, ca me retourne : « Permission non accordée ». Pourtant je suis en ROOT.
    Merci d’avance pour ton aide.

  3. Bonjour, superbe tutoriel, j’ai également le soucis de « distance » il me fait tourner en boucle mon secteur avec des tenta allant jusque 4000, pourrais tu nous éclairer (j’ai pas vu de réponse sur un autre commentaire ^^) merci d’avance !

  4. Merci pour ce tuto ! Une question : pourquoi trouve-t-on toutes tailles et formes de tags MIFARE, du carré au rectangulaire jusqu’aux circulaires de tous diamètres ; mais TOUS les tags MIFARE avec UI modifiable sont des cercles de diamètre 25 mm (ceux des badges VIGIK) ? Pourquoi ne trouve-t-on pas de tags à UID modifiable disons de 8 ou 10 mm de diamètre, ou rectangulaires ?

    Alternativement est-il possible de cloner un badge VIGIK MIFARE sur un NTAG (203, 213, etc…) ?

  5. Bonjour Alex,

    Je trouve ton article très intéressant, mais avant de me lancer dans la réalisation d’une copie j’aimerais connaitre le type de puce de mon badge. Faut-t-il désosser son badge pour voir la puce NFC ? Ou existe-t-il une autre solution ?

    Merci pour ta réponse

  6. Bonjour @Esteban,

    je sais que le post est vieux mais ca peut aider qq un d’autre.

    as tu essayé de rajouter un fichier de clé pour accélérer la recherche ?
    mfoc -P 500 -F key.file -O badge.dump

    On peut trouver des fichiers tout fait sur github et cela permet de trouver les clés en quelques minutes au lieu de plusieurs heures pour moi.

  7. Comment connaitre la liste des badges / marques compatibles avec :
    1. le logiciel NFC Tools ?
    2. le lecteur de carte Identive ?

    Par exemple, une marque assez répandue en France est Comelit Immotec

  8. Tout fonctionne à merveille, sauf que l’ID de la puce « chinoise » (destination de la copie) ne change pas et, donc, ne prend pas l’ID de la puce que je cherche à copier.
    L’écriture des 64 blocs se fait pourtant sans erreur.
    Une idée à me suggérer ??

  9. Bonjour, désolé je ne suis pas spécialiste mais j’ai un digicode qui utilise des badges (tags) RFID 125 mhz EM 4100 ou 4200 (je ne sais pas) . Et je m’inquiete car je confie ces badges à divers utilisateurs. Peux t’on copier ces badges facilement, sans mon autorisation?

  10. Bonjour,
    cette manipulation ne fonctionne que sur des cartes chinoises ou la modification de l’UID est authorisé, est-ce bien cela ?

    De mon coté j’ai un message: « unlock failure! » sur la commande nfc-mfclassic W a original.dmp new.dmp, est-ce bien du au block 0 qui ne peut pas être réécrit ?

    Pour ceux qui comme moi, n’ont pas besoin d’un clone parfait, cad d’avoir le même UID que la carte d’origine mais seulement une copie de tous les autres blocs, comment peut-on copier la carte d’origine dans la nouvelle carte ?

    Dernière question, connaissez-vous un logiciel sous Windows(GUI) permettant de gérer une carte Mifare (lecture, ecriture des blocs) une fois que l’on connait la valeur des clés ?

    D’avance merci de votre aide.
    Cordialement.

  11. Bonjour Vincent,
    Tout à fait, cette commande ne fonctionnera que pour les cartes où l’UID est modifiable et c’est la raison de votre message. Vous pouvez ré-essayer la même commande avec un « w » minuscule, cela copiera les 63 blocs, en évitant l’UID. Enfin, je ne connais pas de logiciel Windows qui va bien, mais je pense que celui fourni avec le ACR122U doit faire le job !

    Alexandre

  12. Bonjour à tous,
    Et, Bonjour en particulier à Vincent et Alex.
    A supposer que je dispose d’un badge fonctionnel pendant une journée (24h) seulement. Est-ce qu’ en en copiant le contenu, qui devient original.dmp , je pourrai par la suite faire des modifications de façon à le rendre fonctionnel un autre jour.
    En d’autres termes le programmer pour d’autres 24 h ? Si oui, sur quel bouquin se documenter ? Quel programmer ou langage apprendre ? merci d’avance !

  13. bonjour
    pour ma part j’ai suivi scrupuleusement le tuto et arrive au resultat suivant: unlock failure.
    en utilisant le w minuscule j’arrive à copier les 63 blocks. et la carte à copier est bien une chinoise avec block 0 reinscriptible.
    question: comment savoir si le block 0 est bien reinscriptible?
    comment savoir si le block 0 de la carte d’origine est protéger ou pas?
    vu que les 63 autres blocks sur la carte chinoise se sont copiés correctement, est-t il possible de modifier son UID sur le block 0 manuellement ?
    merci pour votre éclairage.

  14. Bonjour j ai suivi le tuto mais je n ai pas la copie identique à l original qui a le même uid j ai essayé une commande elle ne fonctionne pas nfc-mfsetuid je précise qui je me suis me servi de la carte chinoise pour faire plusieurs test est elle plus reinscritible

  15. Bonjour,
    Même en compilant les nfc tools sur kali … j accède à la commande nfc-mfsetuid xxxxxxx afin de modifier l’uid chinois à l’identique de mon original vigik …
    Un Dump dzns Hexeditor me montre bien que tous les secteurs sont identiques …. mais mon badge Intratone copié n est meme pas reconnu par la centrale Vigik .
    Aucun voyant rouge ou vert ne s allume !!!
    Je n ai pas d’incrémentation non plus sur mon original … les dumps restent inchangés apres différents passages….
    Mon badge chinois est de generation 2 …
    Que me manque t il?
    Gravure du numero sur le badge Intratone doit t il être modifié quqpart?
    Faut til un badhe chinois spécial ?avec secteur zéro modifiable mais 1 seule fois ?
    Comment proceder svp … des idées ?
    Merci pour des idées svp ….

  16. Bonjour, le lecteur peut-il lire une puce rfid d’identification sous cutanée ? Type animal domestique ? J’ai essayé mais le lecteur ne réagit pas le témoin reste rouge.
    Merci pour votre réponse.

  17. Hello Ferrand,

    Si la centrale ne réagit pas, c’est généralement quand elle détecte que le badge présenté est un badge « suspect » (généralement un badge avec UID modifiable de première génération). C’est commun chez les lecteurs de cette marque. Avec des badges de deuxième génération vous ne devriez pas avoir le problème ! Tenez nous au courant :) Alexandre

  18. Hello Pierus,
    Malheureusement, les puces des animaux fonctionnent sur une fréquence différente, donc pas possible de les lire avec un lecteur comme le ACR122U.
    Alexandre

  19. Salut tout le monde!
    J’ai un badge qui n’est pas lu pas mon acr122. C’est comme si il n’y avait rien sur l’appareil (cela fonctionne correctement avec mes autres badges).
    Du coup, pensez vois que ce soit ce dont j’ai peur, c’est à dire du 125khz?
    Et si oui, pour faire un dump de ces badges, si je me procure un proxmark3, faut il des badges vierges spécifiquement 125khz?

    Merci d’avance :)

  20. Bonjour,
    Je suis le tuto approximativement puisque les versions des logiciels ont changés,a l’installation de libnfc,la 1ere ligne de commande (sudo apt-get install libusb-dev) lance une pseudo installation qui ne ressemble en rien au tuto et du coup pour mfoc,404 error

  21. Bonsoir,

    Vous pensez que c’est possible de ce faire griller ?
    Genre la machine enregistre que un UID chinois qui est toujours alimenté?

    Merci

  22. Bonjour Alex,

    J’ai une question d’ordre général, mais à laquelle je ne trouve aucune réponse sur internet…
    Suite à ton article, imaginons que je décide de faire évoluer mon système de contrôle d’accès basé sur Mifare Classic à Mifare DESFire EV2, histoire que mes badges d’accès résistent au clonage.
    Oui mais… N’est-ce pas exactement le même problème ? Peut importe les algorithmes de chiffrement utilisés (AES dans le cas d’EV2 quand même…), tant que je trouve des cartes chinoises vierges et sans UID, il me suffit de faire un « simple » copier/coller de mes nouvelles cartes DESFire EV2 non ? Ce que je veux dire, c’est que peu importe à quel point les données sont chiffrées sur ma cartes, si bêtement je copie/colle tout ..?

    Merci de tes lumières sur ce point, je ne comprend pas où est l’erreur dans mon raisonnement…

  23. Hello Jeaneot,
    Le tru c’est que les puces Mifare Classic souffrent d’une faille de sécurité qui fait que l’on peut facilement lire le contenu, pour le transférer sur une autre puce. Les Desfire n’ayant pas se problème, il sera beaucoup plus compliqué de lire la puce. Enfin, à ma connaissance, il n’existe pas de carte DESFire où on peut modifier l’UID librement et copier des données dessus. En espérant que cela t’aide dans ta réflexion ;) Alexandre

  24. Salut Alex,
    Super tes articles, clairs et bien documentés.
    Ca fait quelques jours que j’essaie et que je prends des murs. J’ai fini par installer Kali sur une partition à part, recompiler libnfc selon tes indications et trouvé les clefs de mon MIFARE 1k (badge d’immeuble) avec mfcuk puis avec le fichier standard que j’ai découvert après.
    J’obtiens donc un dump de mon badge original, que je copie sur un badge « chinois ».
    Là, plusieurs problèmes :
    – en suivant tes instructions à la lettre, le block 0 (avec l’UID) ne se copie pas. la preuve est que nfc-list me donne l’ancien UID du badge => j’ai rajouté un « u » dans les instructions et ca a marché (qu’en penses tu ? )
    – lorsque je redumpe le badge chinois modifié, pour voir si la copie s’est faite, surprise ! les 4 premiers blocks sont copiés (les blocs 0x00/1/2/3), puis à partir du block 4 j’ai des clefs fffffffff et on dirait que la copie ne s’est pas faite
    J’ai lu un millier de tutos, notamment sur l’utilisation du w ou du W, du A et du B pour les keys, mais là je suis échec.
    Est ce que tu as des pistes pour me sortir de là ?

    A+

  25. Bonjour tout le monde, j’ai une question…. J’ai acheté des badges rfid / nfc 13.56mhz 1k « CUID » sur aliexpress , afin d’en faire plus pour toute la famille, car dans le magasin il en coûte de 50 à 60 euros pour produire une telle clé. Le problème est que j’ai pu cloner à 100% à l’identique, mais si je veux ouvrir la porte, je dois avoir 2 badges qui se croisent l’un à côté de l’autre pour qu’ils s’ouvrent la porte. Quand je touche avec un, il ne détecte pas jusqu’à ce que je touche avec les 2 ensemble..

    Ps: Les badges 13.56mhz 1k « CUID » fonctionnent mais j’ai essayé avec « UID » il ne la porte détecte même pas 3. Une idée ?

    Merci beaucoup pour votre aide .. Marc

  26. bonjour,
    un grand merci pour ce tuto mais jai besoin de votre aide
    je bloque des le debut avec ca

    root@pc-37-kali:~# apt-get install git binutils make csh g++ sed gawk autoconf automake autotools-dev libglib2.0-dev libnfc-dev liblzma-dev libnfc-bin libtool
    Lecture des listes de paquets… Fait
    Construction de l’arbre des dépendances
    Lecture des informations d’état… Fait
    autoconf est déjà la version la plus récente (2.69-11.1).
    automake est déjà la version la plus récente (1:1.16.2-3).
    automake passé en « installé manuellement ».
    autotools-dev est déjà la version la plus récente (20180224.1).
    autotools-dev passé en « installé manuellement ».
    g++ est déjà la version la plus récente (4:9.2.1-3.1).
    g++ passé en « installé manuellement ».
    gawk est déjà la version la plus récente (1:5.0.1+dfsg-1).
    gawk passé en « installé manuellement ».
    sed est déjà la version la plus récente (4.7-1).
    Certains paquets ne peuvent être installés. Ceci peut signifier
    que vous avez demandé l’impossible, ou bien, si vous utilisez
    la distribution unstable, que certains paquets n’ont pas encore
    été créés ou ne sont pas sortis d’Incoming.
    L’information suivante devrait vous aider à résoudre la situation :

    Les paquets suivants contiennent des dépendances non satisfaites :
    g++ : Dépend: g++-9 (>= 9.2.1-1~) mais ne sera pas installé
    libglib2.0-dev : Dépend: libmount-dev (>= 2.28) mais ne sera pas installé
    Dépend: libpcre3-dev (>= 1:8.31) mais ne sera pas installé
    Dépend: libselinux1-dev mais ne sera pas installé
    Dépend: zlib1g-dev mais ne sera pas installé
    libnfc-dev : Dépend: libusb-dev mais ne sera pas installé
    libtool : Dépend: libc6-dev mais ne sera pas installé ou
    libc-dev
    E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l’état ».

    merci d’avance pour votre aide

  27. Bonjour,
    à mon travail, je dois utiliser un badge pour rentrer dans un bâtiment. Vu que je dois constamment demander ce badge, je me suis dit que je pouvais peut être le copier et donc j’ai voulu savoir si mon portable pouvais lire ce badge avec l’application NFC Tools. Je n’ai pas du tout réussi à lire le badge, comme si sa ne détecté rien.

    Le problème est que mon badge ne fonctionne plus depuis. Après avoir lu votre article et surtout le moment du « système anti-copie » je me pose deux question:
    – est ce que ma tentative de lecture du badge la « bloqué »?
    – est ce possible qu’on puisse savoir si j’ai essayé de la lire?

    Je vous remercie par avance

  28. bonjour,
    j’ai acheté chez vous 3 badges deuxième génération et suivi vos informations avec l’appli Mifare classic tool,
    une petite question :
    le badge que je copie doit avoir une date de durée (5 jours), comment modifier cette date dans la nouvelle copie ?
    merci beaucoup pour votre aide ou conseils…
    Paul

  29. bonjour svp j’ai un problème et je ne sais comment faire!
    En fait je veux programmer la plage horaire pour sur les badges de tel sorte que après le laps de temps que j’aurai progammer que la centrale n’accepte plus la carte en question!
    Merci

  30. Bonjour Abdouaye BEISSALAH,
    Pour faire cela il faut le programmateur original et le logiciel original que possède l’installateur de la platine ou le syndic. Sans ça je ne connais pas de solution…
    Alexandre

  31. Bonjour,

    Nous venons de changer de vigik au bureau, lorsque j’essaie de lire le badge sur le téléphone, l’appli écrit « there is no mifare classic tag ». J’ignore, j’essaie de faire une copie avec les badges de 2e génération et impossible de faire un clone parfait.
    Auriez-vous une idée?

    En vous remerciant,

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *