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

(ou comment je vous ai préparé la meilleure clé USB pour travailler sur les puces RFID)

Hello, aujourd’hui je poste un article qui n’intéressera pas tout le monde mais devrait bien aider les concernés. Si vous utilisez un lecteur NFC/RFID modèle ACR122U et que vous essayez de l’utiliser avec la suite LibNFC des NFC Tools, vous avez peut-être rencontré l’erreur suivante : Unable to set alternate setting on USB interface (Connection timed out).

J’ai au début pensé à un problème matériel, mais si vous essayez le lecteur avec d’autres applications, vous remarquerez qu’il fonctionne correctement. Le problème semble donc bien lié à libnfc. En tombant sur cette erreur il y a plusieurs mois, je me suis senti un peu seul et j’ai ouvert un ticket sur le forum de libnfc. Mais Internet étant un endroit rempli de personnes qui vous veulent du bien, voici une synthèse de ce que de brillants esprits ont trouvé, et un petit coup de pouce de ma part pour ceux qui se sentent un peu dépassés par tout ça :)

L’origine du problème

Seuls certains lecteurs RFID ACR122U-A9 semblent provoquer le problème. Cela serait dû à un petit composant électronique qui diffère d’un lot à l’autre. Est-ce que ce sont les plus récents ? Je ne pense pas car j’en ai reçu plusieurs dizaines directement  « sortis de l’usine » de la part du fabricant ACS et aucun n’a le souci. Les unités « à problème » venaient pour ma part d’un revendeur qui ne m’a pas été d’une grande aide quand j’ai été confronté à ce souci. Depuis cette nouvelle collaboration, je n’ai pas eu à déplorer un seul ACR122U affecté par l’erreur « Unable to set alternate setting on USB Interface » et je considérais ce souci comme appartenant au passé. Il y a eu un peu de mouvement sur le sujet ces dernières semaines, alors même si ça ne concerne pas les clients de la Boutique, je me suis dit que ce serait un juste « retour des choses » que d’apporter à mon tour une petite contribution à l’Internet ;)

La version courte

L’erreur Unable to set alternate setting on USB interface (Connection timed out) est provoquée par la librairie libnfc lorsqu’elle essaie d’invoquer une fonctionnalité matérielle du ACR122U qui n’est pas disponible sur toutes les unités. A quoi sert cette fonctionnalité ? Je l’ignore, mais ce que je sais c’est qu’elle n’est pas indispensable pour l’utilisation que j’en ai (l’analyse et la copie de puces RFID et NFC). Un développeur a proposé ces derniers jours une solution qui a l’air de tenir la route. Il est très probable que les responsables de libnfc adoptent ce correctif dans la librairie libnfc à l’avenir. Ce qui signifie qu’à moyen terme, libnfc ne provoquera plus l’erreur Unable to set alternate setting on USB interface (Connection timed out). Donc si tu n’es pas pressé, tu peux juste mettre en pause ton projet NFC/RFID et y revenir dans 6 mois / 1 an pour que cela fonctionne. Si par contre tu n’as pas envie d’attendre, tu devrais continuer la lecture de cet article.

Reconnaître les lecteurs NFC RFID ACR122U « à problème » ?

On commence par la base : tous les lecteurs n’ont pas le problème mais je n’ai pas su trouver de différence ni physique ni logicielle pour les distinguer à part exécuter la commande nfc-list et constater le problème …

En terme de numéro de série, je vois que les lecteurs « sains » sont immatriculés ACR122U-A9 RR171-4* et que ceux à problème sont identifiés ACR122U-A9 RR171-2*. Je ne sais pas si on peut réellement se baser dessus, si vous avez le soucis n’hésitez pas à nous donner vos numéros de série en commentaire !

Si votre lecteur est affecté par la faille que pouvez-vous faire (à part le remplacer évidemment) ? C’est tout le sujet de cet article

Les solutions si votre lecteur ACR122U souffre de l’erreur « Unable to set alternate setting on USB interface ».

Comme je vous le disais un peu plus haut, un développeur a proposé un patch pour le code source de libnfc pour ne plus rencontrer cette erreur. La bonne nouvelle, c’est que la solution est disponible pour tout le monde juste ici. La moins bonne nouvelle, c’est que pour en profiter il faut télécharger ce code source modifié, le recompiler et l’installer sur ton système pour pouvoir l’utiliser.

Alors je sais que ça fait beaucoup de mots clés barbares d’un coup, et que ça peut faire peur, mais vraiment, avec ce tuto et une bonne tasse de café, je suis sûr que tu peux le faire :) Afin de maximiser les chances de réussites de tout le monde, je suis parti d’une version récente de Kali sur laquelle il n’y a eu aucune modification préalable faite : la version 2019.3 “large”. Donc si tu pars de cette version et que tu suis le tuto ci-dessous, tout devrait bien se passer. Si tu ne t’en sors pas où que cela te paraît trop compliqué, j’ai une ultime solution pour toi au bas de l’article 🙂

Compiler libnfc avec le patch qui va bien pour se débarrasser de l’erreur Unable to set alternate setting on USB interface.

On part du principe que vous avez créé votre clé USB Kali comme expliqué dans ce tuto précédent.

Etape 1 : Passer le clavier en français et désactiver les modules parasites

root@kali:~# setxkbmap fr
root@kali:~# nano /etc/modprobe.d/blacklist-libnfc.conf


Coller à l’intérieur les 3 lignes suivantes :
blacklist nfc
blacklist pn533
blacklist pn533_usb

Ctrl+O pour valider l’écriture, ctrl + X

Etape 2 : Se connecter à internet mettre à jour le système et installer les paquets nécessaires à la compilation

root@kali:~# apt-get update
root@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

Un message de confirmation vous demandera de valider l’installation de ces paquets additionnels. Acceptez en tapant Y puis entrée.

Etape 3 : Télécharger le code source de libnfc modifier et lancer la compilation

root@kali:~# git clone https://github.com/jpwidera/libnfc.git
root@kali:~# cd libnfc/
root@kali:~/libnfc# autoreconf -is
root@kali:~/libnfc# ./configure –prefix=/usr –sysconfdir=/etc
root@kali:~/libnfc# make

Etape 4 : Installer les nouveaux binaires fraîchement compilés

root@kali:~/libnfc# make install
root@kali:~/libnfc# cd /usr/lib
root@kali:/usr/lib# cp -p libnfc.* x86_64-linux-gnu/

Voilà, à partir de ce moment, vous ne devriez plus rencontrer l’erreur Unable to set alternate setting on USB interface (Connection timed out) qui vous a amené ici ! Si vous utilisez une clé USB « Live », vous devrez recommencer la procédure à chaque fois, ce qui est plutôt fastidieux je vous l’accorde. Si par contre vous disposez d’une clé USB « avec persistance » (comme celles disponibles sur la Boutique), vous n’avez à faire cette manipulation qu’une fois en mode persistant et vous retrouverez votre version libnfc modifiée au prochain démarrage en mode persistant (et la version libnfc livrée d’origine avec Kali sera toujours disponible si vous démarrez en mode « Live »).

Je n’arrive pas à compiler libNFC, comment m’en sortir ?

J’aurais aussi pu intituler cette partie “comment avoir la meilleure suite d’outils NFC/RFID compatible avec tous les ACR122U du marché”.

Je te l’avais dis, j’ai une ultime solution pour toi ! J’ai profité du fait que les clés USB de la Boutique aient cette fameuse “persistance” pour les modifier et inclure :

  • une version modifiée de libnfc pour éviter l’erreur Unable to set alternate setting on USB interface (Connection timed out)
  • une version récente des NFC-Tools qui rend l’utilitaire nfc-mfclassic compatible avec les puces de génération 2 (celles habituellement réservées à la manipulation sur smartphone)
  • une version modifiée de mfoc pour inclure le mode “hardnested” pour venir à bout des badges les mieux protégés
  • un dictionnaire des clés les plus communes pour chiffrer les badges d’immeubles et autres badges/cartes communément répandu
  • et d’autres petites attentions :)

Je suis en train de finaliser l’installation d’une petite série de clés USB que je compte mettre en vente sur la Boutique ce mardi à 18h.

La clé Kali « custom » de l Atelier du Geek

Pour conclure cet article

Voilà, bien que je ne maîtrise pas encore 100% des détails liés à ce problème, j’espère que ce résumé t’aura éclairé et tiré du pétrin si tu rencontres cette fichue erreur Unable to set alternate setting on USB interface (Connection timed out). Pour ma part cela aura été l’occasion de peaufiner ma suite d’outils en matière de RFID/NFC pour gagner un temps de dingue ! Si j’ai du nouveau, je mettrai à jour cet article ! D’ici là n’hésitez pas à me dire en commentaire si cela a marché pour vous, et je vous dis à bientôt,  probablement pour vous parler d’un nouvel appareil avec lequel je m’amuse bien en ce moment !


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

S’il y a quelques années, très peu de personnes avaient entendu parler de technologies comme le NFC et le RFID, il en est désormais tout à fait autrement ! La plupart des nouveaux smartphones milieu et haut de gamme intègrent désormais des puces NFC ce qui rend possible la lecture et l’écriture de badges et cartes sans contact, à commencer par la majorité des badges d’immeuble ! Beaucoup d’entre vous me contactent en me posant la même question : est-il possible de faire soi-même un double de son badge d’immeuble à l’aide d’un simple smartphone ? Et bien la réponse est oui, mais pas n’importe comment !

Une manipulation réservée à certains smartphones Android

Bien que les nouveaux iPhones aient une puce qui matériellement est capable de lire et écrire sur des badges à 13,56Mhz, je n’ai pas trouvé d’applications permettant de réaliser cette manœuvre. Sous Android par contre il est plus facile de trouver son bonheur : les smartphones équipés d’une puce NFC sont nombreux et il existe plusieurs applications pour cet usage, dont une gratuite assez répandue : Mifare Classic Tool, c’est d’elle que nous parlerons aujourd’hui !

Seuls les badges fonctionnant à 13,56Mhz sont copiables avec un smartphone

En effet, il existe plusieurs types de badges d’ouverture sans contact. L’immense majorité est en 13,56Mhz, mais on trouve aussi quelques badges qui fonctionnent à 125Khz. Les puces équipant les téléphones ne permettant que des échanges sur la bande de fréquence de 13,56Mhz, seuls les badges correspondant pourront être lus… et donc copiés. Si votre portier d’immeuble arbore un petit logo Vigik, il y a de grande chance que votre badge soit à la bonne fréquence !

Pourquoi on ne peut pas utiliser des badges avec UID modifiables « classiques »

Si vous suivez ce blog depuis quelques temps, vous avez peut-être déjà entendu parler de badges RFID qui ont une particularité, celle d’avoir leur identifiant unique (UID) modifiable. Cette particularité est nécessaire pour pouvoir réaliser un « clone parfait » de la puce RFID, en dupliquant son contenu mais aussi son identifiant qui est censé être unique au monde. J’ai utilisé de telles puces pendant des années. Ces puces de première génération fonctionnent à merveille avec un lecteur NFC externe comme le ACR122U, mais on ne peut pas modifier leur identifiant unique depuis un smartphone. En effet, la modification de l’UID nécessite des instructions particulières qui ne sont nativement pas possible sous Android. Je pensais donc que la réalisation d’un « clone parfait » d’un badge d’immeuble n’était possible que via un ordinateur. J’avais tort !

C’était sans compter sur les efforts de sociétés asiatiques qui ont donc créé un nouveau type de badges avec UID modifiables (on parle de badges de deuxième génération). Ces badges ont les mêmes caractéristiques que ceux de première génération, mais permettent également de modifier l’UID via des instructions standards, ce qui les rend pleinement utilisables avec un smartphone Android ! Ces badges sont nettement plus difficiles à trouver, mais sachez que j’en ai quelques uns en stock sur la boutique !

De quoi avez-vous besoin pour dupliquer votre badge d’immeuble ?

C’est pour moi la meilleure partie 🙂 En fait si vous avez déjà un smartphone sous Android compatible NFC, vous n’avez besoin de rien d’autre ! Evidemment il vous faudra des badges vierges adéquats, mais vous pouvez déjà diagnostiquer si votre badge est au bon format sans dépenser le moindre euro !

Donc si on récapitule, pour mener l’opération de bout en bout, il vous faudra :

Comment copier votre badge d’immeuble avec votre smartphone pas à pas

Etape 1 : Créer une sauvegarde (dump) de votre badge d’origine

Le but de cette étape est de transférer le contenu du badge vers un fichier de sauvegarde, un « dump » en anglais. Cela permettra de créer ensuite autant de copies que vous le souhaitez ! Cette étape est cruciale et peut déjà vous permettre de savoir si votre badge est copiable facilement.

Vérifiez que le NFC est activé sur votre appareil (Paramètres > Réseaux > NFC)

Ouvrez l’app Mifare Classic Tool, vous arrivez face à l’écran d’accueil que voici :

L’écran d’accueil de l’application MCT. Ici c’est la partie lecture (Read Tag) qui nous intéresse

Cliquer sur READ TAG, ce qui va vous afficher l’écran de sélection des clés à utiliser :


L’écran de sélection des clés. Le plus sûr est de sélectionner les 2 fichiers de clés.

Cochez les cases extended-std.keys et std.keys

Coller le badge sur l’arrière, un message va apparaître brièvement sur le bas de l’écran avec l’identifiant (UID) du tag détecté

Cliquer sur START MAPPING AND READ TAG. L’application va alors tenter une à une les différentes clés disponibles pour décoder chacun des secteurs qui composent le badge.

Il y a en tout 16 secteurs, sur la majorité des badges d’immeuble (ils renferment des puces de la famille des Mifare Classic 1K la plupart du temps). Il faut compter de quelques secondes à une dizaine de minutes pour que l’application MCT décode tous les secteurs et parvienne à un extraire les données.

Si vous voyez cet écran, c’est bon signe, c’est que l’application MCT a pu décoder le contenu de votre badge ! Félicitations :)

Si tous les secteurs sont lisibles, bravo, vous avez fait le plus dur. Je vous conseille alors d’enregistrer le dump en cliquant sur l’icône en forme de disquette en haut de l’écran, et de choisir un nom parlant. Dans notre exemple, je l’ai appelé badge-original. Ce fichier est la seule chose dont vous aurez besoin pour créer autant de copies de votre badge que nécessaire. Aussi je vous conseille de le stocker en lieu sûr, cela pourra vous être utile en cas de perte de votre badge d’origine par exemple.

En cas d’échec

Si jamais vous avez un écran où plusieurs secteurs sont affichés en rouge, c’est que l’application ne possède pas les clés pour les lire.  Tout n’est pas perdu mais vous ne pourrez probablement pas aller plus loin avec votre smartphone. Il faudra dans ce cas passer par une méthode un peu plus évoluée où vous aurez besoin d’utilitaires comme mfoc ou mfcuk pour trouver les clés manquantes. N’hésitez pas à relire cet article qui vous mettra sur la piste :)

Etape 2 : Transférer le contenu de votre sauvegarde vers un badge vierge

Comme annoncé en introduction, il va vous falloir pour cette étape des badges un peu spéciaux. Il s’agit de badges RFID contenant également 16 secteurs comme notre badge d’origine, mais avec une petite particularité : le secteur 0, habituellement accessible uniquement en lecture, doit également être accessible en écriture à l’aide d’instructions que votre smartphone peut gérer. Je reconnais qu’ils peuvent être un peu compliqués à dénicher, mais vous  trouverez ces badges compatibles smartphone sur la boutique, testés et approuvés !

Toujours depuis l’application MCT, il va falloir se rendre dans la section WRITE TAG disponible sur l’écran d’accueil de l’application Mifare Classic Tool en haut à droite :

L’écran d’accueil de l’application MCT. maintenant c’est la partie écriture (Write Tag) dont on va avoir besoin

Quatre possibilités s’offrent alors à vous, mais c’est la deuxième qui vous intéresse : Write Dump (Clone)

L’écran permettant de transférer le contenu d’un fichier vers un badge vierge

A partir de ce moment, il va falloir scrupuleusement suivre les instructions :

  • Commencer par cocher la case Show Options ce qui va rendre accessible deux nouvelles case à cocher : Use these Access Conditions for all sectors et Advanced: Enable writing to the manufacturer block
  • Cocher également ces deux nouvelles cases. J’avoue ne pas maîtriser complètement l’impact de la première, mais la seconde est capitale : elle va autoriser l’application à écrire le fameux secteur 0 (aussi appelé « Block 0 » ou « Manufacturer Block« )
  • Cliquer ensuite sur le bouton SELECT DUMP ce qui va afficher la liste de toutes les sauvegardes de badges disponibles sur votre téléphone.
Liste des dumps disponibles sur le téléphone
  • Sélectionner badge-original si vous l’avez bien nommé comme moi.
  • Un nouvel écran apparaît vous demandant de sélectionner les secteurs que vous voulez écraser en utilisant ceux du dump. Tout est coché par défaut… et c’est bien comme ça.
Ecran de sélection des secteurs à transférer sur le badge vierge
  • Placer à ce moment le badge vierge contre l’arrière de votre smartphone. Un petit message va apparaître en surimpression avec l’UID de votre badge vierge.
  • Cliquer sur OK, ce qui va lancer le processus d’écriture. L’opération ne prend que quelques secondes.

L’application va ensuite revenir à son écran de démarrage. Il m’arrive parfois d’avoir un message d’erreur qui s’affiche, sans que cela ne pose réellement de problème sur les données que contiennent le badge.

Félicitations, à ce moment là vous être normalement en possession d’une copie parfaite de votre badge d’immeuble ! Notez que si vous souhaitez faire d’autres exemplaires du même badge, il suffit de répéter l’étape 2 autant de fois que nécessaire. Vous comprenez donc que conserver le dump de votre badge d’origine est vital pour ne jamais être bloqué à l’avenir :)

Comment vérifier que la copie est parfaite ?

Evidemment vous allez me dire, le plus simple est de l’essayer ! Ce n’est pas faux mais ce n’est pas toujours possible ! Sachez que MCT intègre d’autres outils bien pratiques quand on travaille sur les puces RFID. Par exemple, si vous faites désormais une sauvegarde de votre clone de badge (en déroulant l’étape 1 avec votre clone), vous obtiendrez un nouveau dump (ici je l’ai appelé badge-copie). Et bien dans la section Tools de l’application Mifare Classic Tool, vous pourrez trouver un utilitaire appelé Diff Tool qui vous permettra de comparer les deux sauvegardes/dumps comme vous le voyez ci-dessous. Secteur par secteur, l’application vous montre si la copie et l’original sont identiques.

Voici la liste des outils disponibles dans l’application MCT pour manipuler les dumps. L’outil « Diff Tool » en 4ème position est très utile pour comparer 2 dumps.
Le résultat de la comparaison entre 2 dumps : secteur par secteur, ligne par ligne, l’outil nous indique les correspondances et les différences (s’il y en a). Ici on est bon, tout est identique !

Pour aller plus loin

Avec ce nouvel article, j’espère avoir rendu encore plus accessible ce domaine des badges et puces RFID qui me passionne. Ce ne sera vraisemblablement pas le dernier et l’intérêt que vous manifestez chaque jour via les autres articles sur le sujet et la boutique en dit long sur votre soif de connaissances ! N’hésitez pas à poser vos questions en bas de l’article, et surtout dites moi ce que vous souhaitez que j’aborde comme sujet autour de cette thématique ! Comme toujours j’essaie d’y répondre dès que je peux, et je vous encourage vivement à scanner tout ce qui se trouve autour de vous !