mercredi 17 décembre 2014

Les clefs zip comment ca marche

Bonjour, voila un article pour résumer un peu ce qui se sait en matière de clef zip.

 Le transmetteur utilisé dans la clef zip est un PCF7931AS, un transpondeur contactless qui date un peu puisqu'il a été mis au point en 1994.

Ici vous trouverez le Datasheet du PCF7930/31/35 : Datasheet
Ici l'organisation simplifiée mais bien faite de la mémoire du PCF7931 : Organisation Mémoire
Et ici toute la documentation relative aux machines et les logiciels utilisés par les gérants : ZIP/MIZIP

Pour être capable de lire et d’écrire sur ce transpondeur, il faut se procurer un GAMBIT
Les drivers du Gambit pour windows et linux se téléchargent ici : Drivers
Le logiciel de lecture/écriture est fournit avec le Gambit sur un CD. Sinon on le trouve ici : Lociciel

Ensuite pour se procurer une clef le seul moyen est d'en acheter une dans une machine ou de la demander au responsable des machines quand il vient recharger, ou au auprès de votre CE... Elle coute 4€ en moyenne, sans crédit.

1) A propos du PCF9731 :

-Il communique à une fréquence de 125 KHz

-Il s'organise en 8 blocks comportant chacun 16 octets

-Il possède une fonction mot de passe de 7 octets qui permet de le protéger en écriture, mais pas en lecture

-Il possède une fonction qui permet de protéger un block en écriture à jamais même avec le bon mot de passe


2) Contenu et organisation : 

Il contient :

-Un mot de passe de 7 octets définit par le propriétaire, que la machine envoie à la clef pour avoir le droit d'écrire dessus

-Les informations ou identifiants du propriétaire, de la clef, et d’éventuels codes de réduction.
Ces informations sont vérifiées par la machine dès l'introduction de la clef, si l'identifiant du propriétaire n'est pas le même ou si la clef n'existe pas dans le répertoire de la machine, la clef est refusée.

-Le crédit disponible dans la clef, et le crédit avant le dernier achat

Plus imagée voila l'organisation du transpondeur : (Certain octets sont volontairement masqués par "..")


3) Comment ça marche??

Avec ça à coté de vous vous devriez comprendre rapidement : Organisation Mémoire

Le bloc 0 (donc la première ligne) contient :

 - De 0 à 6 l'emplacement du mot de passe remplacé par des 0 car PAC est activé (nous y reviendrons)

 - L'octet 7 correspond au PAC c'est a dire active ou désactive la fonction mot de passe selon que sa valeur soit respectivement de 01 ou 00, ici la valeur est 01 donc la fonction mot de passe est activée.

 - L'octet 8 correspond à la protection définitive d'un ou plusieurs blocs (BWP). pour comprendre il faut  passer en binaire :
  Il est constitué de 8 bits : 0000 0000 et chaque bit représente un bloc mais dans le sens inverse {0000 0000 correspond au numéros de bloc 7654 3210} si celui ci vaut 0000 1000 alors le bloc 3 est  protégé en écriture par exemple.
  Ici l'octet 8 vaut 04 (en hexadécimal) donc en binaire : 0000 0100 donc le bloc 2 est protégé en écriture.

 - les autres octets de ce bloc ne sont pas utilisés.

Le bloc 1 : (deuxième ligne) contient en théorie le nombre d'utilisations de la clef et s’incrémente à chaque  passage.
Et ses octets 15 et 16 qui servent à indiquer le premier et le dernier bloc lu, RFB (pour read first block) et RLB (read last block). Ici RFB = 00 donc block 0, et RLB = 03 donc block 3 (le reste des blocs n'est donc pas lu)

Le bloc 2 contient des informations relatives au propriétaire, l'identifiant de la clef, et les codes de réduction.

Le bloc 3 contient le crédit disponible sur la clef :
 L'ancien crédit est écrit deux fois de suite en commençant par un octet 55 et séparé par un octet AA du crédit actuel qui se répète une fois lui aussi.
 Dans l'exemple on identifie facilement ces deux valeurs :
    Ancien crédit : 00 B4 (en hexadécimal) soit en décimal : 180 donc 1,80€
    Crédit actuel : 00 8C , soit en décimal : 140 donc 1,40 €
 J'ai donc prit en dernier un café a 40 centimes...

Les blocs 4, 5, 6, et 7 ne sont que la répétition de ces 4 premiers blocs.

4) Oui mais comment ça marche?

Sur une clef normale :

Lorsqu'elle est insérée dans la machine, celle-ci va d'abord être lue a ce moment la le transpondeur est à l'état basal : en READ MODE. D'abord elle vérifie les informations d'identification de la clef (block 2), pour voir si elle la connait, si elle ne reconnait pas les identifiants la clef n'est pas reconnue.
Ensuite elle va lire le Block 3 pour voire le crédit et l'afficher sur l'écran.
Ensuite seulement, la machine va vouloir faire passer la puce en PROGRAM MODE pour pouvoir écrire le nouveau crédit dans le block 3, pour ce faire elle envoie un signal spécial qui lui demande de passer en PROGRAM MODE suivit du mot de passe, si la clef reconnait ce mot de passe alors elle accepte de passer en PROGRAM MODE et entre dans un cycle qui se répète en attendant soit d'être écrite soit que la machine lui envoie un signal spécial qui la remet en READ MODE.
Toutes ces opérations se passent en quelques secondes et si tout se passe correctement, alors la machine vous délivre le produit.

5) Possibilités de crackage de la clef :

Il y a deux techniques à ma connaissance pour modifier le crédit dans la clef, la première à été testée et approuvée (mais un poil compliquée :p), et la deuxième que j'ai imaginée est en cours de réalisation mais n'a pas encore fait ses preuves.

Rappelons qu'écrire sur une clef d'origine est impossible, a moins d'avoir le fameux mot de passe (qui fait 56 bits donc 2^56 possibilités je vous laisse faire le calcul...), la première technique consiste donc a se procurer le mot de passe.
Pour cela il faut sniffer ce mot de passe directement à  la source c'est a dire sur la machine.
La technique consiste à prendre une clef d'origine, a limer le bout pour pouvoir entourer du fil de cuivre autour et relier les deux bornes à un oscilloscope réglé sur 125KHz, ainsi la machine va lire la clef, puis envoyer le mot de passe qui s'affichera sous la forme d'une onde à l'oscillo:


Ainsi on peut lire en binaire les 56 bits du password.
Remarque : cette technique marche mais je ne l'ai pas essayée et si quelqu'un de plus érudit veut corriger certaines choses, ou même écrire un article entier sur comment la mettre en œuvre, ne pas hésiter à le faire je le publierai.


La deuxième technique je suis en train de la tester, ce n'est pas sur que ça marche mais la théorie m'a l'air assez carrée. voila le début de la réflexion, je compléterai si ça fonctionne...
Tout d'abord la machine ne peut pas vérifier que la clef a le bon password, car sur les clefs, le PAC est activé, donc dans tout les cas quand la machine lit la clef les 7 premiers octets sont remplacés par des 0.
Ensuite si un transpondeur a un PAC désactivé et aucun password et que la machine lui demande d'entrer en PROGRAM MODE et envoi son password, celui ci est ignoré et le transpondeur entre en PROGRAM MODE (comme si de rien était) :


 Donc en prenant un transpondeur vierge, en désactivant le PAC en mettant le password a 0 et en recopiant les données d'identification du block 2, (sans le protéger tant qu'a faire BWP=00) et en mettant le crédit désiré en hexadécimal, la clef devrait agir comme une vrai clef.
Le seul problème me direz vous c'est si la machine vérifie que le PAC est bien activé, or ce n'est écrit nul-part qu'elle s'en préoccupe :


Par "code of the key" ils sous-entendent le contenu du Block 2 (cf. le document complet Mizip)

Voila, cet article sera complété régulièrement en fonction des avancés (et les fautes d'orthographe corrigées), et vous permettra d'avoir tout les outils nécessaires pour trouver des failles un peu partout et pourquoi pas de développer de nouvelles techniques.

Have fun!

RogPi.



01/02/2018 

Je rajoute un exemple de sniffer que j'avait réalisé a l'époque et qui fonctionnait bien (fil de cuivre et mine de stylo bic à insérer dans la clef avec la puce) ainsi que la façon de déchiffrer le password dans Audacity ;) :





Si vous en voulez plus allez voir le site de David : http://maxofun.monsite-orange.fr qui veut carrément brutforcer la clef et qui imprime sa clef en 3D!

Pour info c'est dit en commentaire mais la technique 2 avec le PAC désactivé ne fonctionne pas effectivement je ne sais pas pourquoi!

Have fun !

RogPi.