Lire une carte Mifare Ultralight avec Debian

J'ai récemment acquis un lecteur de carte nfc pour m'amuser à voir ce qui se passe dans ces cartes sans contact qui nous entourent.

Partant de zéro dans ce domaine, je me suis lancé à la recherche des informations que je pouvais trouver sur le web et après avoir passé un peu de temps à lire et a faire des tests je suis enfin arrivé à lire des données sur la carte que j'avais acheté pour l'occasion \o/

Premièrement j'ai installé le paquet pcsc-tools qui contient notamment pcsc_scan et gscriptor.

La première chose à faire est d'utiliser pcsc_scan et de passer la carte sur le lecteur. Cela permettra de récupérer l'ATR qui nous donne des informations sur la carte. Si le logiciel reconnaît la carte, il nous donne des informations en plus.

Dans mon cas voici ce que me dit pcsc_scan :

Reader 0: SpringCard Prox'N'Roll (A67F095D) 00 00

Card state: Card inserted,

ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68

ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68

  • TS = 3B --> Direct Convention
  • T0 = 8F, Y(1): 1000, K: 15 (historical bytes)

TD(1) = 80 --> Y(i+1) = 1000, Protocol T = 0

-----

TD(2) = 01 --> Y(i+1) = 0000, Protocol T = 1

-----

  • Historical bytes: 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00

Category indicator byte: 80 (compact TLV data object)

Tag: 4, len: F (initial access data)

Initial access data: 0C A0 00 00 03 06 03 00 03 00 00 00 00

  • TCK = 68 (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):

3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68

3B 8F 80 01 80 4F 0C A0 00 00 03 06 .. 00 03 00 00 00 00 ..

Mifare Ultralight (as per PCSC std part3)

3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68

3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 .. .. 00 00 00 00 ..

RFID - ISO 14443 Type A Part 3 (as per PCSC std part3)

3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68

RFID - ISO 14443 Type A - NXP Mifare Ultralight or UltralightC

Wed Jan  1 17:11:25 2014

Reader 0: SpringCard Prox'N'Roll (A67F095D) 00 00

Card state: Card removed,

Il s'agit d'une carte Mifare Ultralight, une des plus simples à priori.

Pour interagir avec la carte on devra lui envoyer directement des données binaires et elle nous renverra d'autres données.

Mais avant de nous lancer dans la lecture il faut savoir ce qu'il y a à lire.

Voici comment sont arrangé les données sur la carte (pour plus de détail, voir cette conférence) :

Address 0 1 2 3
00 SN0 SN1 SN2 CB0
01 SN3 SN4 SN5 SN6
02 CB1 internal Lock byte Lock byte
03 OTP OTP OTP OTP
04 DATA DATA DATA DATA
05 DATA DATA DATA DATA
06 DATA DATA DATA DATA
07 DATA DATA DATA DATA
08 DATA DATA DATA DATA
09 DATA DATA DATA DATA
0A DATA DATA DATA DATA
... ... ... ... ...

edit : suite à d'autres manipulations sur la carte, j'ai un doute sur l'exactitude de ce tableau. A prendre avec des pincettes.

Pour lire ces données on pourra utiliser gscriptor qui permet d'envoyer directement les commande en binaire à la carte et d'en afficher la réponse.Les données envoyées pour la lecture seront de cette forme là :

FF B0 00 XX YY avec XX l'adresse de la zone à lire et YY le nombre d'octets à lire.

La carte doit alors renvoyer les valeurs suivit de 90 00 qui indique que tout c'est bien passé.

Voici ce que j'ai obtenu :

envoyé reçu
FF B0 00 00 04 04 EA DA BC 90 00
FF B0 00 01 04 EA 97 28 80 90 00
FF B0 00 02 04 D5 48 00 00 90 00
FF B0 00 03 04 00 00 00 00 90 00
FF B0 00 04 04 FF FF FF FF 90 00
FF B0 00 05 04 00 00 00 00 90 00
FF B0 00 06 04 00 00 00 00 90 00
FF B0 00 07 04 00 00 00 00 90 00
FF B0 00 08 04 00 00 00 00 90 00
FF B0 00 09 04 00 00 00 00 90 00
FF B0 00 0A 04 00 00 00 00 90 00
FF B0 00 0B 04 00 00 00 00 90 00
FF B0 00 0C 04 00 00 00 00 90 00
FF B0 00 0D 04 00 00 00 00 90 00
FF B0 00 0E 04 00 00 00 00 90 00
FF B0 00 0F 04 00 00 00 00 90 00
FF B0 00 10 04 6F 16

Concernant la dernière valeur, 6F 16, je n'ai pas encore trouvé ce que ça voulait dire. Peut-être que j'ai dépassé la capacité de la carte, mais elle était vendue comme ayant 192 octets de mémoire...

Prochaine étape : écrire des données


Commentaires :

Pas encore de commentaires

Laisser un commentaire

social