Comment nous avons perdu 230 euros chez CJ Affiliate (Conversant)

[accueil]  [menu]  [marions-nous !]  [chercher]


2012-05-07 00:00

Faites parler votre Moneo !


Même réputé « anonyme », un porte-monnaie électronique Moneo conserve dans sa puce un historique des dernières transactions effectuées. Plus détaillé que celui d'une carte bancaire, il est expurgé de ses données les plus indiscrètes lors de sa consultation par les moyens couramment mis à la disposition du public. Voici deux petits logiciels permettant de pousser bien plus loin l'exploration, non sans quelques trouvailles...

On se savait déjà plus ou moins « suivis à la trace » par les cartes SIM des téléphones portables, les passes de transports en commun, les cartes bancaires, etc. Tout « anonyme » qu'il soit (dans certaines limites...), le porte-monnaie électronique Moneo n'échappe évidemment pas à cette tendance de fond. Un simple lecteur PC/SC et deux petits programmes ZCBasic suffiront pour se faire une idée précise de ce qui s'enregistre réellement dans sa puce (et qui est sans doute « remonté » vers un serveur centralisé) lors de chaque transaction, qu'il s'agisse d'un paiement ou d'un rechargement. Même s'il n'y a généralement pas de quoi fouetter un chat, cela mérite une surveillance attentive car nous n'avons sans doute pas encore tout vu...
L'historique d'un Moneo peut être consulté de bien des façons : dans la borne de rechargement d'un bureau de Poste, dans un lecteur de poche, ou même en ligne sur un site de rechargement. Même si tout le monde se réclame d'une parfaite conformité aux spécifications de BMS (Billettique Monétique Services), force est de constater que les résultats obtenus ici ou là diffèrent très sensiblement. Pas quand tout est « normal », mais plutôt lorsque des opérations un peu particulières sont intervenues.
Utilisons par exemple un Moneo pour appeler, depuis un publiphone, un numéro de téléphone qui ne répond pas : aucun débit ne sera évidemment effectué, mais une transaction « à zéro » s'enregistrera tout de même, horodatée à la seconde près ! Celle-ci s'affichera lors d'une consultation de l'historique dans un bureau de Poste, mais restera cachée si la lecture se fait en ligne ou sur un lecteur de poche (Lexibook).
Une autre expérience édifiante consiste à aller sur un site de rechargement par code à 14 chiffres, en entrant « par erreur » un code erroné (par exemple celui d'une recharge de téléphonie mobile). Là encore, la transaction avortée va s'enregistrer dans la puce, mais cette fois pour son montant nominal (10, 20 ou 30 €). On la verra alors apparaître lors d'une consultation en ligne, mais pas sur une borne de bureau de Poste ou un lecteur de poche !
Les spécifications Moneo étant confidentielles, on ne peut que supposer qu'elles doivent laisser un degré de liberté aux développeurs pour afficher ou filtrer tout ou partie de ce qu'ils auront récupéré lors d'une lecture effectuée selon des règles strictes.
Tous les moyens sont évidemment bons pour « deviner » les commandes qu'il faut envoyer à la puce pour lire les enregistrements qui nous intéressent (et bien d'autres !) : interception du dialogue entre la carte et un lecteur de poche, analyse du script que tel ou tel service de consultation en ligne incorpore dans sa page web, ou bricolage de vieux logiciels allemands servant à lire la version 1 (aujourd'hui obsolète) de la GeldKarte dont Moneo dérive manifestement.
Dès lors, il n'est guère compliqué de se servir des résultats de ce reverse engineering pour développer de courts programmes en ZCBasic, dont les possibilités ne feront évidemment pas l'objet des mêmes limitations !

Suivre les rechargements
Le premier, baptisé CHAMONEO.BAS, est destiné à afficher le détail des derniers chargements effectués. Pour ce faire, il suffit d'insérer le Moneo dans un simple lecteur PC/SC installé sur le PC et d'exécuter le fichier CHAMONEO.EXE obtenu par compilation de ce code-source avec le kit BasicCard, totalement gratuit.

#Include CARDUTIL.DEF
#Include COMMERR.DEF
Declare Command &H00 &HA4 SEL(S$,Disable Le)
Declare Command &H00 &HB2 RREC(Lc=0,P$)
ComPort=101
CLS:Print "CHAMONEO (c)2011 Patrick GUEULLE":Print
Call WaitForCard
ResetCard:Call CheckSW1SW2
S$=Chr$(&HA0)+Chr$(0)+Chr$(0)+Chr$(0)+Chr$(&H69)+Chr$(&H00)
Call SEL(P1P2=&H0400,S$)
Print "------ Derniers chargements enregistres ------"
Print "(Barre d'espace pour avancer Esc pour quitter)"
PRINT
L=0:P=1
Call RREC(P1=P,P2=&HE4,P$,Le=L):L=SW2
suite:
Call RREC(P1=P,P2=&HE4,P$,Le=L)
If SW1SW2<>&H9000 Then Goto vide
FOR F=1 TO Len(P$)
M=ASC(MID$(P$,F,1))
M$=HEX$(M):IF Len(M$)=1 Then M$="0"+M$
PRINT M$;" ";
IF F=13 OR F=25 Then PRINT
NEXT F
PRINT:PRINT
attente:
Z$=Inkey$
If Z$="" Then Goto attente
If Z$=Chr$(27) Then Goto vide
P=P+1:Goto suite
vide:
PRINT
Call WaitForNoCard

Le dernier rechargement en date s'affiche en premier, et il est possible de faire défiler les précédents en appuyant autant de fois que nécessaire sur la barre d'espace du clavier. Le processus s'arrêtera de lui-même dès que tous les enregistrements auront été lus, ou bien si l'on appuie sur la touche Esc ou Echap.

05 00 03 03 00 10 00 00 00 18 00 00 00
00 00 00 00 70 01 06 84 00 00 33 20
11 10 11 11 19 34 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

11 00 02 01 xx xx xx 00 02 97 25 00 01
70 00 96 44 00 00 00 00 00 00 12 20
10 04 28 11 43 38 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

11 00 01 01 00 05 00 00 05 00 25 00 01
37 88 26 47 00 00 00 00 00 00 25 20
09 11 18 12 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

11 00 00 01 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Sur cette recopie, l'enregistrement du bas est identique à ce que l'on trouve dans un Moneo neuf, n'ayant jamais encore été chargé. Les trois autres portent un numéro d'ordre différent de zéro et sont horodatés à la seconde près, selon le format AA MM JJ HH MM SS. Ainsi, le n° 1 retrace une transaction intervenue le 18 novembre 2009 à 12 heures 08, autrement dit en plein salon Cartes 2009, puisque c'est là que nous a été généreusement offert ce porte-monnaie chargé de 5,00 €.

Même structure pour l'enregistrement n° 2, qui rend compte d'un rechargement effectué quelques mois plus tard à domicile par carte bancaire, c'est-à-dire en ligne. Son montant réel a été pudiquement remplacé par des xx car il n'était, dirons-nous, « pas très orthodoxe »...



Huit chiffres que les applications officielles de lecture se gardent bien d'afficher reproduisent la « référence de transaction » figurant sur le ticket imprimé ou reçu par e-mail à l'issue du rechargement. Toujours utile en cas de contestation !
L'enregistrement n° 3 correspond pour sa part à un cas très particulier, et pour tout dire anormal : une tentative avortée de rechargement en ligne au moyen d'un code de 14 chiffres... erroné. Même refusée, cette transaction figure bel et bien dans l'historique pour son montant nominal, mais le premier octet de l'enregistrement (05 au lieu de 11) indique très vraisemblablement l'échec de l'opération. Il n'empêche qu'elle est tout de même horodatée, et assortie d'une référence de transaction plus détaillée (14 chiffres) que l'on retrouve là encore sur le ticket justificatif.
Beaucoup d'octets demeurant cependant à 00 dans tous ces enregistrements, il est permis de se demander s'il ne seraient pas là « en réserve » pour héberger un jour des champs de données à caractère encore plus indiscret. A surveiller, donc, et même très régulièrement car la capacité de l'historique étant assez limitée, les transactions les plus anciennes ne tardent pas à s'effacer pour faire de la place aux nouvelles (principe du fichier cyclique).

Retracer les paiements
Un peu plus longs (51 octets) que ceux des rechargements (48 octets), les enregistrements des paiements effectués avec Moneo en sont très voisins par leur structure. Le programme permettant d'en prendre connaissance (ACHMONEO.BAS) est donc fort peu différent du précédent, bien que la mise en page ait été adaptée pour tenir compte des positions un peu décalées de certains champs.

#Include CARDUTIL.DEF
#Include COMMERR.DEF
Declare Command &H00 &HA4 SEL(S$,Disable Le)
Declare Command &H00 &HB2 RREC(Lc=0,P$)
ComPort=101
CLS:Print "ACHMONEO (c)2011 Patrick GUEULLE":Print
Call WaitForCard
ResetCard:Call CheckSW1SW2
S$=Chr$(&HA0)+Chr$(0)+Chr$(0)+Chr$(0)+Chr$(&H69)+Chr$(&H00)
Call SEL(P1P2=&H0400,S$)
Print "------- Derniers paiements enregistres -------"
Print "(Barre d'espace pour avancer Esc pour quitter)"
PRINT
L=0:P=1
Call RREC(P1=P,P2=&HEC,P$,Le=L):L=SW2
suite:
Call RREC(P1=P,P2=&HEC,P$,Le=L)
If SW1SW2<>&H9000 Then Goto vide
FOR F=1 TO Len(P$)
M=ASC(MID$(P$,F,1))
M$=HEX$(M):IF Len(M$)=1 Then M$="0"+M$
PRINT M$;" ";
IF F=11 OR F=30 Then PRINT
NEXT F
PRINT:PRINT
attente:
Z$=Inkey$
If Z$="" Then Goto attente
If Z$=Chr$(27) Then Goto vide
P=P+1:Goto suite
vide:
PRINT
Call WaitForNoCard

Compilé en ACHMONEO.EXE, ce logiciel révèlera bien vite que les achats effectués sont toujours numérotés chronologiquement et horodatés, mais une différence importante apparaîtra bien vite au niveau de la référence de la transaction, qui semble cette fois identifier le terminal utilisé.

D9 00 05 00 02 00 00 00 00 11 75
01 50 01 00 00 30 7D 00 05 B8 A6 00 00 07 0B 00 00 18 20 11 04 13 11 36 38 00 00 00 00 00 00 00 00 38 00 00 00 00 00 00

D9 00 04 00 02 00 00 00 00 11 75
01 50 01 00 00 30 7D 00 05 B8 6A 00 00 07 0B 00 00 18 20 11 04 13 10 17 04 00 00 00 00 00 00 00 00 3C 00 00 00 00 00 00

51 00 03 00 02 00 00 75 05 01 02
76 13 01 00 00 12 9D 00 00 00 05 00 00 00 89 00 00 18 20 11 01 05 09 06 07 00 00 00 00 00 00 00 00 0B 00 00 75 00 00 00

51 00 02 00 02 00 02 04 05 01 02
76 13 01 00 00 12 9D 00 00 00 02 00 00 00 5E 00 00 93 20 10 04 28 14 32 26 00 00 00 00 00 00 00 00 0B 00 02 04 00 00 00

51 00 01 00 01 00 02 04 05 01 02
76 13 01 00 00 12 9D 00 00 00 01 00 00 00 57 00 02 96 20 10 03 17 17 05 25 00 00 00 00 00 00 00 00 0B 00 02 04 00 00 00

Comment avons-nous donc découvert le pot aux roses ? Tout simplement en achetant quelques timbres dans un bureau de Poste, pour des montants de 2,04 € (n° 1 et n° 2) puis de 0,75 € (n° 3) ! En effet, le code de six chiffres enregistré dans la puce du Moneo est le même que celui qui s'imprime sur les tickets du distributeur de billets dont l'établissement est équipé... Pas même besoin d'effectuer un retrait pour en prendre connaissance, une simple consultation de solde avec une carte 24/24 ou Postépargne suffira. Ajoutons que les deux premiers chiffres de cet identifiant indiquent apparemment le département dans lequel se trouve le bureau, ce qui est parfaitement cohérent avec l'organisation (héritée des chèques postaux) des centres financiers de la Banque Postale. Les transactions n° 4 et n° 5, pour leur part, ont été initiées dans deux publiphones différents (mais dépendant d'une même unité de raccordement), et leur montant de 0,00 € s'explique par le fait que le numéro appelé n'a pas répondu. Tout comme dans le cas d'un rechargement avorté, le premier octet de l'enregistrement est alors différent (D9) de celui d'un paiement ayant abouti à un débit du Moneo (51). C'est fort probablement cela qui est exploité par les applications de consultation de l'historique, à des fins de « filtrage »... Il n'empêche que grâce à des outils logiciels comme les nôtres, un investigateur ayant de bonnes (ou mauvaises) raisons de géolocaliser les utilisations successives d'un Moneo à des instants donnés devrait être en mesure de le faire. C'est très exactement ce que nous nous proposions de mettre en évidence, car nous nous en doutions un peu !

Un lecteur PC/SC + un Moneo pour... 7 € !

Annoncé comme une riposte à la hausse du montant des amendes, le Pack stationnement proposé à 17 € (frais de port offerts) depuis octobre 2011 est une aubaine pour s'équiper d'un lecteur PC/SC à un prix symbolique. Pour une dépense équivalente au coût d'un seul PV, on reçoit en effet une carte Moneo pré-chargée de 10 € et un lecteur Porteo de Xiring faisant même office d'étui. Certes, il s'agit d'une « édition limitée » (carte Moneo Stationnement tirée à seulement 10 000 exemplaires), mais en cas de succès elle pourrait bien faire école. Un premier pas en direction de la gratuité pure et simple de la carte porte-monnaie en somme, condition sine qua non de son acceptation massive par le consommateur. Rappelons tout de même que dans près de 70 villes françaises, Moneo est le seul moyen légal permettant de régler son stationnement dans les horodateurs : une façon comme une autre de nous forcer la main...

Patrick Gueulle

Tous les ouvrages de l'auteur





Vous aimez cette page ? Partagez-en le lien !

Facebook
Twitter
Google+
LinkedIn
Reddit


[homepage] [RSS] [archives] [legal & cookies] [since 1997]