IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Lecture/écriture carte RFID mifare console via libnfc


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut Lecture/écriture carte RFID mifare console via libnfc
    Bonjour à tous !


    je travaille sous raspberry et sous QT creator en C++, j'aurai besoin de lire et d'écrire sur des badges RFID.

    Pour cela j'ai acheté un lecteur USB RFID le ACR122, pour pouvoir l'utiliser sous linux, j'ai installé libnfc afin de pouvoir récupérer les infos sur le badge rfid en passant par de simples commandes console dans un premier temps...
    la première commande : fonctionne bien et me permet de détecter la présence d'un badge sur le lecteur.

    maintenant je configure sous windows via un logiciel des bafges rfid avec un code lecteur "6510" ainsi que qu'un montant crédit qui est censé être stocké dans le bloc numéro 4(le logiciel a été réalisé sous windev mais je n'ai pas le code source..).

    Je sais que mes badges sont formater au format mifare-classic, j'ai donc essayer d'utiliser des commandes pour lire le badge comme par exemple celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nfc-mfclassic r a foodata.mfd
    cependant une erreur me signale que la clé n'est pas renseigné, en fouillant un peu, on me demande de créer un fichier clé fookeys.mfd...

    Il faudrait apparemment écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nfc-mfclassic r a foodata.mfd  fookeys.mfd
    Cependant je n’ai aucune idée de comment créer ce fichier «fookeys » …

    Je voudrais simplement lire les données stockées sur le badge via des commandes consoles pour ensuite les traiter sous qt…


    Avez-vous une ou des idées ?

    merci
      0  0

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nfc-mfclassic r a foodata.mfd  fookeys.mfd
    La dernière commande que tu tapes semble être une confusion entre la commande de lecture et la commande d'écriture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nfc-mfclassic r a foo.mfd
    nfc-mfclassic w a foodata.mfd  fookeys.mfd
    Si tu n'as pas de clé à écrire, alors cette commande n'est pas pour toi.

    De plus, tu ne dis rien sur le fait que ce soit l'emplacement A ou l'emplacement B dans ton cas.

    Enfin, as-tu lu cette page (clic) ?
      0  0

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    merci pour ta réponse, effectivement j'ai écriture et lecture

    oui je connais c'est de la où j'ai tiré mes commandes....

    cependant j'ai essayé de lire mais celui me donne une erreur d'authentification... Je dois joindre la clé pour lire ? ou un code ?

    voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    pi@raspberrypi:~ $ sudo nfc-mfclassic r a foo.mfd
    NFC reader: ACS / ACR122U PICC Interface opened
    Found MIFARE Classic card:
    ISO/IEC 14443A (106 kbps) target:
        ATQA (SENS_RES): 00  04  
           UID (NFCID1): 67  af  0c  a0  
          SAK (SEL_RES): 08  
    Guessing size: seems to be a 1024-byte card
    Reading out 64 blocks |nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    !
    Error: authentication failed for block 0x3f
    ( désolé le protocole mifare et les commandes console sont un domaine encore récent pour moi...)

    merci d'avance !
      0  0

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Et donc ? Pour nfc-mfclassic r b foo.mfd ? As-tu une sortie similaire ?

    Quelle distribution de Linux as-tu ?
    Qu'as-tu pensé des aides correspondant à ton modèle sur internet (clic) ?
      0  0

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    justement c'est bien pour "nfc-mfclassic r b foo.mfd" que j'obtient une erreur d'authentification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Reading out 64 blocks |nfc_initiator_transceive_bytes: Mifare Authentication Failed
    nfc_initiator_transceive_bytes: Mifare Authentication Failed
    je travaille sur la Raspberry 4.0 avec la distribution linux Raspbian.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uname : Linux raspberrypi 4.19.76-v7l+ #1272 SMP Fri Oct 4 14:59:19 BST 2019 armv7l GNU/Linux

    j'ai aussi utilisé ce document la pour m'aidé

    Il m'a d'ailleurs permis de mettre au point une routine permettant de détecter la présence d'un badge avec "nfc-list" cependant je ne comprends pas quelle commande console je dois envoyé pour lire des bloc de données sur le badge rfid....

    j'ai pourtant égréné un bon nombre de site et de tutoriels....

    j'ai aussi essayé depuis QT-creator via une liaison UART (USB) mais le port de l'ACR122 n'est pas détecté.... du coup je voudrais passer par des commandes console et après je compte récupéré les réponses consoles que je spliterai....

    vous voyez le principe ?
      0  0

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    Après avoir cherché sur différents site et en m'inspirant de différentes réponse j'ai réussi à trouver ma clé et à accéder au contenu de mon badge via la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo mfoc -P 500 -O cardtocopy.dmp -k 4d4946415245

    et voila ce que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    pi@raspberrypi:~ $ sudo mfoc -P 500 -O cardtocopy.dmp -k 4d4946415245
    The custom key 0x4d4946415245 has been added to the default keys
    Found Mifare Classic 1k tag
    ISO/IEC 14443A (106 kbps) target:
        ATQA (SENS_RES): 00  04  
    * UID size: single
    * bit frame anticollision supported
           UID (NFCID1): 99  78  38  8e  
          SAK (SEL_RES): 08  
    * Not compliant with ISO/IEC 14443-4
    * Not compliant with ISO/IEC 18092
     
    Fingerprinting based on MIFARE type Identification Procedure:
    * MIFARE Classic 1K
    * MIFARE Plus (4 Byte UID or 4 Byte RID) 2K, Security level 1
    * SmartMX with MIFARE 1K emulation
    Other possible matches based on ATQA & SAK values:
     
    Try to authenticate to all sectors with default keys...
    Symbols: '.' no key found, '/' A key found, '\' B key found, 'x' both keys found
    [Key: 4d4946415245] -> [xxxxxxxxxxxxxxxx]
    [Key: ffffffffffff] -> [xxxxxxxxxxxxxxxx]
    [Key: a0a1a2a3a4a5] -> [xxxxxxxxxxxxxxxx]
    [Key: d3f7d3f7d3f7] -> [xxxxxxxxxxxxxxxx]
    [Key: 000000000000] -> [xxxxxxxxxxxxxxxx]
    [Key: b0b1b2b3b4b5] -> [xxxxxxxxxxxxxxxx]
    [Key: 4d3a99c351dd] -> [xxxxxxxxxxxxxxxx]
    [Key: 1a982c7e459a] -> [xxxxxxxxxxxxxxxx]
    [Key: aabbccddeeff] -> [xxxxxxxxxxxxxxxx]
    [Key: 714c5c886e97] -> [xxxxxxxxxxxxxxxx]
    [Key: 587ee5f9350f] -> [xxxxxxxxxxxxxxxx]
    [Key: a0478cc39091] -> [xxxxxxxxxxxxxxxx]
    [Key: 533cb6c723f6] -> [xxxxxxxxxxxxxxxx]
    [Key: 8fd0a4f256e9] -> [xxxxxxxxxxxxxxxx]
     
    Sector 00 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 01 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 02 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 03 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 04 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 05 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 06 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 07 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 08 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 09 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 10 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 11 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 12 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 13 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 14 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
    Sector 15 - Found   Key A: 4d4946415245 Found   Key B: 45524146494d
     
    We have all sectors encrypted with the default keys..
     
    Auth with all sectors succeeded, dumping keys to a file!
    Block 63, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 62, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 61, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 60, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 59, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 58, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 57, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 56, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 55, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 54, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 53, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 52, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 51, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 50, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 49, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 48, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 47, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 46, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 45, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 44, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 43, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 42, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 41, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 40, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 39, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 38, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 37, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 36, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 35, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 34, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 33, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 32, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 31, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 30, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 29, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 28, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 27, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 26, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 25, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 24, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 23, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 22, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 21, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 20, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 19, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 18, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 17, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 16, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 15, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 14, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 13, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 12, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 11, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 10, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 09, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 08, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 07, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 06, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 05, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 04, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  08  fc  
    Block 03, type A, key 4d4946415245 :00  00  00  00  00  00  ff  07  80  69  45  52  41  46  49  4d  
    Block 02, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 01, type A, key 4d4946415245 :01  19  6e  00  00  00  00  00  00  00  00  00  00  00  00  00  
    Block 00, type A, key 4d4946415245 :99  78  38  8e  57  08  04  00  62  63  64  65  66  67  68  69
    je retrouve bien les valeurs que j'ai programmé via mon application windows dans le bloc 4

    maintenant je cherche une moyen pour directement lire la valeur uniquement du bloc 4 .... et de même comment la modifier sans réécrire tout le fichier .mfd ....

    Avez-vous des solutions pour ça ?

    Merci
      1  0

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bravo.


    Arrivé à ce point là, en admettant que l'on veuille, par exemple, mettre, dans le bloc 04, l'octet be à la place de fc, je tenterais ceci :
    1. Par acquis de conscience, avant de faire des modifications, je vérifierais que ce qui sépare les octets est bien une espace et pas une tabulation (\t) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      tail cardtocopy.dmp | od -c
      Des \t apparaissent-ils ? Non ? Alors ce sont bien 2 espaces entre chaque octets.
    2. Dans une console,
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      sed '/Block 04,/s/fc/be/' cardtocopy.dmp > card_modified.dmp
    3. Puis, insertion de la carte à modifier dans le lecteur RFID.
    4. Enfin, dans la console,
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      nfc-mfclassic w a card_modified.dmp cardtocopy.dmp

    Si cela fonctionne comme tu veux, alors tous les outils texte de Linux te tendent les bras : grep, sed, awk, sort, etc...
      1  0

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    merci

    je viens tes dernières commandes ....

    quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tail cardtocopy.dmp | od -c
    je ne vois aucun \t seulement des \0 .... ça veut dire quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    pi@raspberrypi:~ $ tail cardtocopy.dmp | od -c
    0000000 231   x   8 216   W  \b 004  \0   b   c   d   e   f   g   h   i
    0000020 001 031   n  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    0000040  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    0000060   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0000100  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \b 374
    0000120  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0000160   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0000200  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0000260   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0000300  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0000360   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0000400  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0000460   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0000500  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0000560   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0000600  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0000660   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0000700  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0000760   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0001000  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0001060   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0001100  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0001160   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0001200  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0001260   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0001300  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0001360   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0001400  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0001460   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0001500  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0001560   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0001600  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0001660   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0001700  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
    *
    0001760   M   I   F   A   R   E 377  \a 200   i   E   R   A   F   I   M
    0002000
    j'ai ensuite essayer de remplacer l'octet par un autre puis de réécrire le contenu avec ta commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sudo mfoc -P 500 -O cardcontent.dmp -k 4d4946415245
    sudo sed '/Block 04,/s/e8/be/' cardcontent.dmp > card_modified.dmp
    sudo nfc-mfclassic w a card_modified.dmp cardcontent.dmp
    ( les valeurs et les noms de fichier ont été" mofifié mais le fonctionnement est le même... )

    par contre quand derrière je relance un "mfoc" pour vérifier que le contenu s'est bien modifié j'ai la même chose qu'avant modifiation...
    j'ai essayé de lire le badge depuis mon appli windows et pareil la valeur n'a pas bougé...

    une idée ?


    j'ai également essayé de modifier le fichier .dmp à la main en le passant .hex puis en .dmp avant de le renvoyer, mais cela a eu pour effet de bloquer ou corrompre la carte qui n'est plus accessible via ma clé...


    Donc si tu as d'autres idées je suis preneur
      0  0

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    La commande "sed" est t-elle compatible avec les fichiers .dmp ?

    Sachat qu'un éditeur de texte n'arrive pas à le lire ...
      0  0

  10. #10
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    OK. Tout est normal. La modification n'a rien fait car il n'a pas reconnu le texte.

    On résume.
    • Tu as trouvé la clé qui permet d'extraire les données de la carte.
    • Tu crées un fichier, par mfoc qui copie le contenu de la carte dans le fichier, donné en ligne de commande, et met sur la sortie standard, ou la sortie d'erreur, un résumé, joli pour les yeux, mais qui n'est pas vraiment le contenu brut.
    • Tu peux écrire sur la puce, un fichier *.mfd, original ou modifié, en fournissant, en deuxième fichier, le fichier original pour qu'il serve de clé.


    Si tu es capable de reconnaître tes données dans les données brutes, la technique peut être de tirer le contenu hexadécimal, modifier le contenu hexadécimal, retransformer en *.mfd et transférer vers la puce.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mfoc -P 500 -O cardcontent.dmp -k 4d4946415245
    xxd cardcontent.dmp > fichier_de_travail.txt
    Tu modifies fichier_de_travail.txt avec sed ou awk ou ton éditeur texte préféré.
    Attention, la colonne d'adresse à gauche, et le décodage à droite, sont, presque, cosmétiques. Ce qui compte, c'est la donnée hexadécimale brute au milieu. (3230 3139 code "2019". Si tu changes "32" en "33", ton fichier contiendra "3019". "0"caractère = 4810 = 3016)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xxd -r fichier_de_travail.txt >carte_modifiee.mfd
    nfc-mfclassic w a carte_modifiee.mfd cardcontent.dmp
      1  0

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    Top ça fonctionne !

    J'arrive bien à modifier ma valeur en passant par ta conversion en fichier txt puis de nouveau en .dmp :

    a la base j'avais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Block 04, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  08  fc

    puis j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pi@raspberrypi:~ $ xxd cardcontent.dmp > carddata.txt
    pi@raspberrypi:~ $ xxd -r carddata.txt > newcardcontent.dmp
    pi@raspberrypi:~ $ sudo nfc-mfclassic w a newcardcontent.dmp cardcontent.dmp
    NFC reader: ACS / ACR122U PICC Interface opened
    Found MIFARE Classic card:
    ISO/IEC 14443A (106 kbps) target:
        ATQA (SENS_RES): 00  04  
           UID (NFCID1): d9  ec  3b  8e  
          SAK (SEL_RES): 08  
    Guessing size: seems to be a 1024-byte card
    Writing 64 blocks |...............................................................|
    Done, 63 of 64 blocks written.
    pi@raspberrypi:~ $ sudo mfoc -P 500 -O cardcontent2.dmp -k 4d4946415245
    après j'ai bien eu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Block 04, type A, key 4d4946415245 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  07  be
    Cependant je suis curieux et j'ai 2 petites questions ...

    J'avais déja essayé cette meme manipulation en convertissant le fichier dmp en hex puis dmp mais cela a corrompu les données de mon badge rfid que je ne peux plus lire ...

    Pourquoi cela fonctionne t-il avec une conversion en txt ? à quoi sert le "-r" dans "xxd -r carddata.txt > newcardcontent.dmp" ?

    Je vais exécuter ces commandes depuis Qt en utilisant des parser de texte à chaque fois qu'un badge passera devant le lecteur rfid...


    Par hasard tu aurais pas une idée pour optimiser ce process ?


    Un grand merci pour ton aide !
      0  0

  12. #12
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    J'avais déja essayé cette meme manipulation en convertissant le fichier dmp en hex puis dmp mais cela a corrompu les données de mon badge rfid que je ne peux plus lire
    Il faut parler au bon endroit et au bon format. Le fait de passer par un fichier texte ne sert à rien ou plutôt de change rien. C'est juste du confort.
    Ta mésaventure doit venir d'un quiproquo.

    à quoi sert le "-r" dans "xxd -r carddata.txt > newcardcontent.dmp" ?
    r comme reverse. Sinon, il va transformer en hexadécimale la transformation en hexadécimal de ton fichier. Et si tu le fais une 3ème fois, tu auras la transformation en hexadécimale de la transformation en hexadécimale de la transformation en hexadécimale de ton fichier.
    C'est donc l'opération inverse de la première. C'est pour cela que je dis que seules les colonnes du milieu comptent. Ce sont elles qui vont être vraiment encodées.

    Par hasard tu aurais pas une idée pour optimiser ce process ?
    Je ne connais pas le but ultime. As-tu vraiment besoin de QT Creator et le C++ ? Un simple script shell peut suffire. Ou, à l'inverse, l'éditeur hexa ne sert à rien si tu écris un flux d'octets en C++.
      0  0

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    Ok je comprend mieux ces histoires de conversion !

    En réalité la lecture/écriture du badge RFID fait parti d'un projet plus grand permettant l'achat de produits et ce celui-ci est déja programmé en C++ sur Qt creator.

    Donc c'est pour cela que je compte appelé mes commandes shell via Qt en optimisant mes commandes et mes parser pour limiter le temps de traitement.
      0  0

  14. #14
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Finalement, tu n'as besoin de commandes Linux que pour passer par un fichier. Et encore, il y a peut-être une bibliothèque libnfc qui te permettrait de faire le job. Tout dépend du temps dont tu disposes.

    Après, un simple flux (>> ou <<) d'un tableau de char de/dans le fichier et c'est gagné.

    PS: Comment as-tu extrait le code -k 4d4946415245 qui manquait au départ ?
      0  0

  15. #15
    Membre averti
    Homme Profil pro
    Ingénieur conseil électronique/informatique
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur conseil électronique/informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    Bonjour,

    Encore merci pour ton aide, j'ai bien bosser tout les appels fonctionnent depuis Qt !

    cependant comme je le pensais l'appel et la réalisation de la fonction mfoc mets beaucoup de temps(environ 3-4s) ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "sudo mfoc -P 500 -O /tmp/cardcontent.dmp -k 4d4946415245"
    Or mon badge est utilisé comme moyen donc j'aimerai trouvé un système de lecture plus rapide...

    voici ma fonction complète Qt d'écriture :

    Code Qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    int read_credit_rfid()
    {
        QString repmfoc = do_console_command_get_result ("sudo mfoc -P 500 -O /tmp/cardcontent.dmp -k 4d4946415245");
        //qDebug() << "reponse nfc_list : " << repmfoc;
        QStringList repmfoclist = repmfoc.split("\n"); // on split sur \n
        //qDebug() << "repmfoclist: " << repmfoclist;
        int indexblocK4 = 0;
        // recherche de la ligne contenant le credit soit Block 04
        foreach (const QString& var, repmfoclist) {
            if ( var.contains("Block 04") ) indexblocK4 = repmfoclist.indexOf(var);
          }
        // si index valide alors on convertit le crédit :
        if (indexblocK4 != -1)
        {
            //qDebug() << repmfoclist[indexblocK4];
            QStringList BlocK4List = repmfoclist[indexblocK4].split(":");
            //qDebug() << "contenu block4 :" << BlocK4List[1];
            QString data_block4 = BlocK4List[1].replace(" ","");
            //qDebug() << "datablock4 :" << data_block4;
            bool ok;
            uint credit_hex = data_block4.toUInt(&ok,16); // si on veut hexa
            //qDebug() << "credit = " << credit_hex << "centimes d'euros";
            return (credit_hex / 100);
        }
        else return 0;
    }

    Penses-tu qu'il est possible de lire un bloc mifare sans lire tout le badge ou au moins sans stocker les données dans un fichier ?
    (Pour essayer de gagner du temps...)

    Sinon pour l'écriture, même avec plein de processus de verif, je mets 1s mais cela est moins gênant coté utilisateur...

    ps: pour la clé, je l'ai trouvé en farfouillant dans le code windows de l'application qui formate les badges...
      0  0

  16. #16
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2016
    Messages : 2
    Par défaut
    Bonsoir je viens de lire votre tuto qui est vraiment top mais ma question et de savoir comment modifier une ligne sur un dump déjà enregistrer j'ai 2 fichiers je vois les montants différent mais je n'arrive pas à comprendre comment modifié toute la ligne
      0  0

Discussions similaires

  1. Lecture écriture RFID
    Par mah00 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/02/2011, 12h15
  2. Lecture du carte à puce via la DLL MCSCM.DLL
    Par vedge2000 dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 23/06/2010, 15h59
  3. Lecture depuis un lecteur carte RFID
    Par dimainfo dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 24/03/2010, 09h58
  4. Lecture/écriture fichier binaire via structure
    Par Tenebrous dans le forum C
    Réponses: 9
    Dernier message: 07/03/2010, 00h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo