Cela faisait un petit moment que j’avais envie de m’intéresser au monde des puces RFID. Après quelques recherches, j’ai fait le choix d’un lecteur RFID chinois de type ACS / ACR122U, qui a l’avantage de son prix abordable en comparaison de certains autres lecteurs. Pour cette première entrée en matière, je me suis donné pour objectif la création d’un clone de mon badge d’immeuble. Voici les étapes qui ont permis d’y arriver.
Préparation du système
Sous ArchLinux, il est nécessaire d’installer quelques paquets pour la gestion du NFC, à savoir :
- libnfc : Platform independent Near Field Communication (NFC) library
- mfoc : MiFare Classic Universal toolKit
sudo pacman -S libnfc mfoc
Vérifications
Maintenant que les programmes nécessaires sont installés, nous pouvons connecter le lecteur à notre ordinateur, poser une puce RFID sur celui-ci et vérifier que tout est détecté.
$ nfc-listnfc-list uses libnfc 1.7.1
NFC device: ACS / ACR122U PICC Interface opened
1 ISO14443A passive target(s) found:
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 04
UID (NFCID1): 5a 7a 3f 10
SAK (SEL_RES): 08
Comme nous pouvons le voir dans le retour de la commande, le lecteur et la puce sont bien reconnus.
Extraction du contenu de la puce source
Passons maintenant à l’extraction des données de la puce source à proprement parler. La création d’un dump de la puce dans un fichier s’effectue avec la commande suivante :
mfoc -P 500 -O badge-entree.dmp
Modification de l’UID de la puce cible
Afin de créer une copie parfaite, il convient de modifier l’UID de la puce cible. Attention, pour effectuer une opération de ce type, il est bien sûr nécessaire de disposer de puce RFID inscriptible dans leur totalité. On parle notamment de puce dont le bloc 0 est modifiable.
nfc-mfsetuid 5a7a3f10
Première tentative de clonage de la puce
A ce stade, les informations que j’ai pu trouver en divers endroits sur le web préconise d’exécuter une nouvelle fois la commande ci-dessus, mais cette fois sur la puce cible afin d’obtenir un fichier badge-vierge.dmp. Il est ensuite question de procéder à l’écriture des données sur la puce vierge de la façon suivante :
nfc-mfclassic w a badge-entree.dmp badge-vierge.dmp
En particulier, pour copier également le contenu du bloc 0, on remplacera l’option w par W, ce qui aura pour effet d’écrire l’intégralité des 64 blocs sur la puce, toujours si celle-ci le permet.
Pour ma part, j’ai noté que je n’ai pas réussi à modifier l’UID de ma carte cible avec la commande nfc-mfclassic, bien que le bloc 0 de la puce rfid soit modifiable. Je me suis donc tourné vers la commande présentée plus haut afin de remplacer spécifiquement l’UID de ma puce cible par celui de ma puce RFID source.
Par ailleurs, la commande ci-dessus ne m’a pas permis pas de créer une puce identique. Les clés ne sont pas modifiés et comparer le hash des dump permet de vérifier leur différence. La clé par défaut reste utilisée sur la puce chinoise. Un petit tour du côté de l’entrée de mon immeuble et la petite lumière rouge clignotante me confirme que les puces crées ne sont pas correctes.
Création du clone
Cette première tentative s’étant révélée infructueuse, j’ai donc tenté la création du clone de la manière suivante :
nfc-mfclassic W a u badge-entree.dmp
En exécutant mfoc sur la puce ainsi créée, le résultat n’est plus immédiat, ce qui est plutôt encourageant car cela prouve que la clé par défaut n’est plus utilisée.
Vérification avec les sommes de contrôle:
$ sha256sum badge-entree.dmp
0ca740e1a69a5eb379c96e232b6c39ed70daf8072912e2950e73f91876d3ec35
badge-entree.dmp
$ sha256sum badge-cible.dmp
0ca740e1a69a5eb379c96e232b6c39ed70daf8072912e2950e73f91876d3ec35 badge-cible.dmp
Dernier point, pour afficher le contenu d’un fichier hexadécimal dans le terminal, on pourra utiliser la commande hexdump (ou xxd, bien pratique également).
Conclusion
Avec le matériel et les logiciels adéquats, il est possible en quelques minutes de créer une copie parfaite d’une puce RFID, tel qu’un badge d’entrée d’immeuble. Étant donné que certaines puces RFID se présentent sous la forme de porte-clés, nous pouvons alors envisager une manière plus pratique d’ouvrir, par exemple, la porte d’accès de son entreprise. Il serait également intéressant de pouvoir fournir le contenu extrait de la puce à l’aide de son téléphone portable; l’idéal serait alors une identification automatique du lecteur pour un choix automatique de la puce RFID à émuler.
Bonsoir et pour badges vigik je n arrive pas fail a chaque fois autres tags no problem j ai un lecteur nfc acr122. Acr122u-a9
Merci d avance pour ton aide
La FAQ de je ne sais plus quel site dit qu’il existe des lecteurs qui testent la ‘réinscriptibilité’ du bloc zéro (là où se cache l’uid) et ainsi écartent ces tags.. (mais il semble exister des possibilités de contourner cette contre-mesure ;-))
Bonnes recherches!
nfc-mfclassic ne fonctionne pas pour cloner un fichier dont la ‘Key B’ a été decodée via une clé B identifiée ‘mfoc -O carte_origine.mfd -k 415a54454b4d’
j’ai essayé plusieurs options
nfc-mfclassic W a u
nfc-mfclassic W b u
nfc-mfclassic W A B
je n’arrive pas à faire copier les block qui sont codés avec la key B..; quand le clonage des 64 block est terminé, il n’y a que les valeurs codées avecf la Key A….
Comment faire pour indiquer l’utilisation de la KEY B [415a54454b4d] ?
Merci
Bonjour jfab
meme probleme pour moi , tu as trouvé ?
cdlt