EMV Reader

Présentation
Beaucoup d'encre a coulé sur les cartes bancaires EMV (avec puce RFID pour les profannes) et sur leurs possibles Failles/Lacunes
Etant très curieux de ce que ma carte Bleu pouvez contenir comme information sur moi, j'ai fait un petit programme pour dialogue avec elle via un lecteur ACR122-U (le moins chère qui existe ;-) )

Ce qu'il vous faut pour tester ce code:
- un lecteur NFC
- la librairie SpringCardPCSC (http://files.springcard.com/pub/pcsc-sdk_2-21.zip)
- une carte bancaire EMV à vous (emprunter celle d'un amis est assez difficile)

Comment tester rapidement:
- brancher le lecteur
- lancer le programme
- poser la carte EMV sur le lecteur (ca bip et ca devient vert normalement)
- se connecter au lecteur
- lancer une analyse complete (onglet Analyse carte)

ATTENTION, les plus paranos penseront que j'ai caché des choses dans le codes pour voler leur nuémro de carte... Alors tout d'abord, je ne vois pas d'interet a voler, et de toute façon il n'ya pas assez d'infos pour ce que soit utile. Apres libre a vous d'utiliser un autre code ;-)

ATTENTION BIS, le programme est livré tel que.
Si vous cramé votre carte, c'est que vous lui avez posé les mauvaises questions
Si vous pensez pirater une carte avec ce programme... et bien bonne chance, moi je l'ai pas fait pour ça
Nos ressources disponibles
Avant Propos
Lorsque l'on recherche sur le net, on trouve pléthore de documents incomplets:
  • liste de tags NFC non complète ou non adaptée aux EMV
    (le mieux c'est https://www.eftlab.co.uk/index.php/site-map/knowledge-base/145-emv-nfc-tags=
  • définition du dialogue avec les EMV incomplet ou restreint au système American Express
    (faut prendre la doc de référence http://www.emvco.com/specifications.aspx?id=223 le book 3 étant le plus important)


Commentaire du code
D'abord tout est commentez, en franglish (parfois en francais, parfois en anglais, mais souvent avec des fautes d'orthographes).
Si vous cherchez des commentaires propres et bien écris, il vaut mieux vous tourner vers d'autres codeurs...

NB: Code source
Lorsque vous ouvrirais la solution Visual studio, il faudra remettre la référence à SpringCardPcsc.dll... C'est triste mais on n'a pas tous la même arborescence
Pour cela: Double clic sur My Project puis Référence , puis Ajouter ... Référence, Parcourir, selectionner la Dll)

Les fichiers
EMV_Tags_xml.vb La classe qui permet de gérer simplement les tags emv depuis un xml, ça simplifie grandement la vie
Fonctions.vb Un module contenant les fonctions necessaires, et les appels aux API System
Principal.vb La Form Principal du programme
AffiTexte.vb Une simple form pour afficher du texte riche (les couleurs aident à repérer un tag de 2 octets dans 1024 bit de réponse je vous l'assure...

.
Pour approfondir
Il y a
  • les books (400 pages de pure bonheur à déguster lentement)
  • le programmes (plus on va à droite dans les onglets plus on parle binaire)
  • et pour finir le code source bien sure...


Principe de base
on pose une question à la carte, et elle y répond (et oui c'est très polie une carte bleue...)
  • On a 3 questions de base
    • 00 A4 04 00 > SELECT (un fichier ou un AID)
    • 00 B2 00 00 > READ RECORD (SFI / Record)
    • 80 A8 00 00 > GET PROCESSING OPTIONS (en gros, pour les EMV, c'est demander une transaction...)
    • Pour plus de détail, je vous conseille book 3 pages 43
  • elle répond une liste de Tag les un à la suite des autres (et certains les uns dans les autres). Et termine par 2 octets de code retour (SW1 et SW2)
  • la méthodologie d'analyse précise des tags est assez simple un tag c'est [code sur 1 ou 2 octets] [longueur sur un octet] [les données]


Détails d'une question
On ne va utiliser que 3 commande (READ SELECT GPO)
Les 4 premiers octets étant très détails dans le book 2 on va juste se rappeler leur nom...
  • CLA : 1 octet : pour plus de détails voir le book 2
  • INS : 1 octet : pour plus de détails voir le book 2
  • P1 : 1 octet : pour plus de détails voir le book 2
  • P2 : 1 octet : pour plus de détails voir le book 2
  • Lc : 1 octet : Longueur de DATA (nb d'octets)
  • DATA : Lc octet : Les données envoyée (peut être vide : LC = 00)
  • Le : 1 octet : longueur retour attendu (00 = on ne sait pas)

Si vous voulez plus de commande lisez le book 3 pages 43 (mais attention, c'est la norme de dialogue avec une carte à puces, pas une carte bleue, votre carte ne supportera peut être pas la commande ou réagira peut etre très mal...)

Le plus complexe pour les VISA
Dans notre cas la question la plus complexe et la GPO (get Processing Option) les autres sont simples puisque standart pour tous.
On doit faire un GPO PDOL (pour Processing Options Data Object List).
Pour faire simple, le tag PDOL qu'elle retourne lors d'un SELECT AID. C'est la façon dont on doit lui parler. Elle définit dans ce tag [9F38] le squelette de la transaction GPO
(Si on prend une carte EMV Visa, on va retrouver montant, monaie, pays, type de transaction, date...)
Et dès qu'on lui envoie une GPO PDOL correcte elle répond avec ces infos "sensibles" pour préparer la facture (en théorie)...
Cela n'est valable que pour les VISA, les AMERICAN EXPRESS ne demande pas de PDOL, elle envois directe le numéro de la carte, et la date d'expiration

Mais simplement comment lit-on une carte EMV
  • On commence par lire les fichiers 1PAY.SYS.DDF01, 2PAY.SYS.DDF01 et ainsi de suite temps qu'ils existent
    • Pour cela on fait un SELECT 1PAY.SYS.DDF01 qui se traduit par 00 A4 04 00 0E 31 50 41 59 2e 53 59 53 2e 44 44 46 30 31 00 (voir section détails d'une question pour des explications)
    • Pour cela on fait un SELECT 1PAY.SYS.DDF02 qui se traduit par 00 A4 04 00 0E 3250 41 59 2e 53 59 53 2e 44 44 46 30 31 00
  • À défaut, on peut aussi lire les records / SFIs 0, 1, 2... Et ainsi de suite temps qu'ils existent (SFI de 1 à 31 et Record de 1 à 3)
    • Pour cela on fait un read SFI 1 Record 1 qui se traduit par 00 B2 01 0C 00
    • Pour cela on fait un read SFI 1 Record 2 qui se traduit par 00 B2 02 0C 00
    • Pour cela on fait un read SFI 1 Record 3 qui se traduit par 00 B2 03 0C 00
    • Pour cela on fait un read SFI 1 Record 1 qui se traduit par 00 B2 03 0C 00
    • Pour cela on fait un read SFI 2 Record 1 qui se traduit par 00 B2 03 14 00
  • Durant la lecture des Fichiers/Record on recherche les Application ID (tag 4F) (par exmple A0000000421010 pour CB, et A0000000031010 pour VISA.DEBIT)
  • On fait alors un SELECT des AID, et dans le retour on cherche le tag [9F 38] qui est celui du PDOL
    • Par exemple pour VISA.DEBIT c'est 00 A4 04 00 07 A0 00 00 00 03 10 10 00
    • Par exemple pour CB c'est 00 A4 04 00 07 A0 00 00 00 42 10 10 00
  • On créer un PDOL correspondant à ce que demande la carte. Les champs important sont:
    • [9F66] Terminal Transaction Qualifiers (VISA)
    • [9F02] Amount, Authorised (Numeric)
    • [9F03] Amount, Other (Numeric)
    • [9F1A] Terminal country code
    • [5F2A] Transaction currency code
    • [9F37] Unpredictable Number
    • [9A] Transaction date
    • [9C] Transaction Type
    • [95] Terminal Verification Result
    • Le reste on mettra des 00 (on sait combien fait chaque TAG vue que la carte a donné le squelette)
  • On lance un GPO PDOL et on analyse la réponse. C'est là qu'on trouve le plus d'infos possible
  • Parfois, les infos ne sont pas directement renvoyé, mais si le GPO PDOL retourne Ok (ou 90 00). Cela dévérouille l'accès à de nouveau SFI/Record ou l'on retourve toute les infos... En gros faut refaire l'étape 2

Et bien sûr, on s'aperçoit que la CNIL a bien fait son boulot, et aucune info personnelle du porteur n'apparait.
Seul N° de carte et Date d'expiration sont présent...
Détails
Éditeur : Physaphaé   +
Licence : GPL
Date de mise en ligne : 14 septembre 2014




Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Contacter le responsable de la rubrique Windows