Refaire badge immeuble avec un smartphone

ATTENTION aux PROTECTIONS ANTI-COPIES !

Pour rappel, vous et vous seuls êtes tenus responsables des conséquences de l’utilisation de copies faites par vos soins

  1.  Lecture du badge original et sauvegarder le dump sur votre Smartphone  
  2. Faite le test votre en ouvrant la porte de votre immeuble avec le badge original  
  3. Relecture du badge original et sauvegarder le dump sur votre Smartphone 
  4. Une fois ces  operations realiser ,sur  MTC, choisissez l’option « Tools » puis  l’option « Diff Tools ». Sélectionnez les 2 dumps que vous avez sauvegarder du badge original avant et après utilisation
  5. Si vous constatez que les  dumps sont différents, il y as un compteur est présent dans votre badge original. Ne le copiez pas ! Le badge original ainsi que la  copie seront désactivés
  6. faire appel à votre syndic.
smartphone nfc

copie badge RFID NFC MCT android 1K 13.56Mhz uid modifiable

Lire la vidéo

Cette étape est très importante !

Elle permet transférer le contenu du badge que l’ont veut copier vers un fichier de sauvegarde,que
anglais noment “dump”car l’application est en langue anglaise

Et l’aide de cette sauvegarde ou “dump” nous allons realiser une multitudes de copies.

Une étape vraiement importante et par la meme occasion vous permettre de savoir si votre badge
est copiable facilement.

Avant de commencez, il faut parametrer votre telephone qui doit etre equiper de NFC
si oui il faut Vérifiez que le NFC est activé (Paramètres > Réseaux > NFC)

Lancer l’application Mifare Classic Tool, vous arrivez face à l’écran d’accueil que voici :

Demande-badge-immeuble-smartphone-android-ecran-accueil-MCT

Plaquer le badge a copier au dos de votre smartphone en le déplaçant doucement  la détection est automatique et si tout va bien vous allez voir apparaître un message en bas de l’écran 

Cliquez sur  « Read Tag » (lecture).  Lancez la procédure de lecture 

 

 ce qui va vous afficher l’écran de sélection

Les 2 dictionnaires doivent être cochés

des clés à utiliser :Cochez case extended-std.keys et Cochez la case ex  std.keys

la deuxieme manipulation et de cliquez  sur la case en bas avec la mention START MAPPING AND READ TAG traduit en francais DÉMARRER LA CARTOGRAPHIE ET LIRE LE  BADGE

 L’application va alors tester toutes les clés et cela  une par une les différentes clés disponibles et que vous pouvez en rajouter afin de trouver la bonne clé  et pour tous  des secteurs qui composent  votre badge.il faut patienter

Le badge contient 16 secteurs, sur la majorité des badges d’immeuble (ils renferment des puces de la famille des Mifare Classic 1K  la plupart du temps).

 Au bout de quelques secondes et pouvant aller a plusiers dizaine de minutes pour que l’application MCT puisse décoder  tous les secteurs et parvienne à un extraire les données qui vont vous servir.( std.key

 

Hack-badge-immeuble-smartphone-android-ecran-accueil-MCT

Si tous les secteurs sont lisibles, bravo, vous avez fait le plus dur

. Une fois la lecture terminée, sauvegardez le contenu

Nommez votre fichier puis enregistrez

  cliquant sur l’icône en forme de disquette en haut de l’écran, et de choisir un nom. Dans ce cas, je l’ai appelé badge-test.

 

Ce fichier est une image de votre badge original (« Dump »)  dont vous aurez besoin pour créer autant de copies de votre badge que nécessaire. 

En cas d’échec

Si jamais vous avez un écran où plusieurs secteurs sont affichés avec des tirets ou des X rouges, c’est que l’application ne possède pas les clés pour les lire.  Tout n’est pas perdu mais vous ne pourrez probablement pas aller plus loin avec votre smartphone. Il faudra dans ce cas passer par une méthode un peu plus évoluée où vous aurez besoin d’utilitaires comme mfoc ou mfcuk pour trouver les clés manquantes. N’hésitez pas à relire cet article qui vous mettra sur la piste 🙂

  

Reproduction-badge-immeuble-smartphone-android-ecran-accueil-MCT
Dupliquer-badge-immeuble-smartphone-android-ecran-accueil-MCT

Positionnez votre badge vierge au dos de votre smartphone jusqu’à obtenir
le message « New tag found » en bas de l’écran. Choisissez « Write Tag »  puis « Write Dump » 

Copier-badge-immeuble-smartphone-android-ecran-accueil-MCT

A partir de ce moment, il va falloir scrupuleusement suivre les instructions :

  • Commencer par cocher la case Show Options ce qui va rendre accessible deux nouvelles case à cocher : Use these Access Conditions for all sectors et Advanced: Enable writing to the manufacturer block
  • Cocher également ces deux nouvelles cases. La première case permettra de réécrire sur le badge plus tard (au risque d’avoir quelques différences avec le badge d’origine). La seconde case est capitale : elle va autoriser l’application à écrire le fameux secteur 0 (aussi appelé “Block 0” ou “Manufacturer Block“). Notez que si vous souhaitez un badge 100% identique au risque de ne pas pouvoir le réécrire, vous pouvez vous contenter de cocher uniquement la seconde case.
  • Cliquer ensuite sur le bouton SELECT DUMP ce qui va afficher la liste de toutes les sauvegardes de badges disponibles sur votre téléphone.
Double-badge-immeuble-smartphone-android-ecran-accueil-MCT

bbbb

Cloner-badge-immeuble-smartphone-android-ecran-accueil-MCT
Refaire-badge-immeuble-smartphone-android-ecran-accueil-MCT
Copie-badge-immeuble-smartphone-android-ecran-accueil-MCT

Vous obtiendrez le message d’erreur « Error: Some error occurred while writing.This could be really bad » en bas de l’écran 

Ce message est normal. Les contrôleurs NFC présents dans les Smartphones étant peu performants,les échanges de données

lors de l’écriture sont parfois difficiles. Il vous faudra recommencer la procédure

 jusqu’à obtenir le message de réussite « Data successfully written » en bas de l’écran 

Copie-badge-immeuble-smartphone-android-ecran-accueil-MCT

ffffff

Obtenir-badge-immeuble-smartphone-android-ecran-accueil-MCT

ddddd

 aaaa

Pass-badge-immeuble-smartphone-android-ecran-accueil-MCT

 

Pour aller plus loin

Comment fonctionne la RFID

Un système RFID se compose de deux composants principaux, un transpondeur ou une étiquette qui se trouve sur l’objet que l’on souhaite identifier, et un émetteur-récepteur ou un lecteur.
universel-badge-immeuble-uce-badge-RFID

Le lecteur RFID se compose d’un module de radiofréquence, d’une unité de commande et d’une bobine d’antenne qui génère un champ électromagnétique haute fréquence. D’autre part, l’étiquette est généralement un composant passif, qui consiste simplement en une antenne et une micropuce électronique, donc quand elle se rapproche du champ électromagnétique de l’émetteur-récepteur, en raison de l’induction, une tension est générée dans sa bobine d’antenne et ce la tension sert de puissance pour la micropuce.

pass-badge-immeuble-SCHEMA-rfid-NFC

Maintenant que la balise est alimentée, elle peut extraire le message transmis du lecteur, et pour renvoyer le message au lecteur, elle utilise une technique appelée manipulation de charge. L’activation et la désactivation d’une charge au niveau de l’antenne de l’étiquette affectera la consommation d’énergie de l’antenne du lecteur qui peut être mesurée comme une chute de tension. Ces changements de tension seront capturés sous forme de uns et de zéros et c’est ainsi que les données sont transférées de l’étiquette au lecteur.

Il existe également un autre moyen de transfert de données entre le lecteur et l’étiquette, appelé couplage rétrodiffusé. Dans ce cas, l’étiquette utilise une partie de la puissance reçue pour générer un autre champ électromagnétique qui sera capté par l’antenne du lecteur.

 

 

 

RFID et Arduino

C’est donc le principe de fonctionnement de base et voyons maintenant comment nous pouvons utiliser la RFID avec Arduino et construire notre propre serrure de porte RFID. Nous utiliserons des balises basées sur le protocole MIFARE et le lecteur RFID MFRC522, qui ne coûtent que quelques euros

Copie-badge-immeuble-SCHEMA-rfid-NFC

Ces balises ont 1 Ko de mémoire et ont une puce qui peut effectuer des opérations arithmétiques. Leur fréquence de fonctionnement est de 13,56 MHz et leur distance de fonctionnement peut atteindre 10 cm selon la géométrie de l’antenne. Si nous apportons l’une de ces balises devant une source de lumière, nous pouvons remarquer l’antenne et la puce dont nous avons parlé précédemment.

Copie-badge-immeuble-carte-puce--rfid-NFC

Quant au module lecteur RFID, il utilise le protocole SPI pour la communication avec la carte Arduino et voici comment nous devons les connecter. Veuillez noter que nous devons connecter le VCC du module à 3,3V et que pour les autres broches, nous n’avons pas à nous inquiéter car elles sont tolérantes à 5V. 

Double-badge-immeuble-rfid-NFC

Une fois que nous avons connecté le module, nous devons télécharger la bibliothèque MFRC522 à  partir de GitHub. La bibliothèque est livrée avec plusieurs bons exemples à partir desquels nous pouvons apprendre à utiliser le module.

Tout d’abord, nous pouvons télécharger l’exemple «DumpInfo» et tester si notre système fonctionne correctement. Maintenant, si nous exécutons le moniteur et amenons l’étiquette près du module, le lecteur commencera à lire l’étiquette et toutes les informations de l’étiquette seront affichées sur le moniteur .

Copie-badge-immeuble-DUMP-rfid-NFC

Ici, on peut remarquer le numéro UID de la balise ainsi que 1 Ko de mémoire qui est en fait divisé en 16 secteurs, chaque secteur en 4 blocs et chaque bloc peut stocker 2 octets de données. Pour ce tutoriel, nous n’utiliserons aucune mémoire de la balise, nous utiliserons simplement le numéro UID de la balise.

Projet de contrôle d’accès de serrure de porte RFID

Avant de passer en revue le code de notre projet de serrure de porte RFID, examinons les composants et les schémas de circuit de ce projet.

 

Copie-badge-immeuble-lecteur-rfid-NFC

En plus du module RFID, nous utiliserons un capteur de proximité pour vérifier si la porte est fermée ou ouverte, un servomoteur pour le mécanisme de verrouillage et un affichage de caractères.

Le projet a le flux de travail suivant: Nous devons d’abord définir une balise principale, puis le système passe en mode normal. Si nous analysons une balise inconnue, l’accès sera refusé, mais si nous analysons le maître, nous entrerons dans un mode programme à partir duquel nous pouvons ajouter et autoriser la balise inconnue. Donc maintenant, si nous scannons à nouveau l’étiquette, l’accès sera accordé afin que nous puissions ouvrir la porte.

La porte se verrouille automatiquement après la fermeture de la porte. Si nous voulons supprimer une balise du système, nous devons simplement retourner en mode programme, scanner la balise connue et elle sera supprimée.

Code source

Jetons maintenant un œil au code.  Nous devons donc d’abord inclure les bibliothèques pour le module RFID, l’affichage et le servomoteur, définir certaines variables nécessaires pour le programme ci-dessous ainsi que créer les instances des bibliothèques.

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
#include <Servo.h>

#define RST_PIN   9
#define SS_PIN    10

byte readCard[4];
char* myTags[100] = {};
int tagsCount = 0;
String tagID = "";
boolean successRead = false;
boolean correctTag = false;
int proximitySensor;
boolean doorOpened = false;

// Create instances
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Parameters: (rs, enable, d4, d5, d6, d7)
Servo myServo; // Servo motor

Dans la section de configuration, nous initialisons d’abord les modules et définissons la valeur initiale du servomoteur en position verrouillée. Ensuite, nous imprimons le message initial à l’écran et avec la boucle «while» suivante, nous attendons qu’une étiquette principale soit scannée. La fonction personnalisée getID () obtient le tag UID et nous le plaçons dans le premier emplacement du tableau myTags [0].

void setup() {
  // Initiating
  SPI.begin();        // SPI bus
  mfrc522.PCD_Init(); //  MFRC522
  lcd.begin(16, 2);   // LCD screen
  myServo.attach(8);  // Servo motor

  myServo.write(10); // Initial lock position of the servo motor
  // Prints the initial message
  lcd.print("-No Master Tag!-");
  lcd.setCursor(0, 1);
  lcd.print("    SCAN NOW");
  // Waits until a master card is scanned
  while (!successRead) {
    successRead = getID();
    if ( successRead == true) {
      myTags[tagsCount] = strdup(tagID.c_str()); // Sets the master tag into position 0 in the array
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Master Tag Set!");
      tagsCount++;
    }
  }
  successRead = false;
  printNormalModeMessage();
}

Jetons un coup d’œil à la fonction personnalisée getID (). Tout d’abord, il vérifie s’il y a une nouvelle balise placée près du lecteur et si c’est le cas, nous continuerons à la boucle «for» qui obtiendra l’UID de la balise. Les balises que nous utilisons ont un numéro UID de 4 octets, c’est pourquoi nous devons faire 4 itérations avec cette boucle, et en utilisant la fonction concat (), nous ajoutons les 4 octets dans une seule variable String. Nous définissons également tous les caractères de la chaîne en majuscules et à la fin, nous arrêtons la lecture.

uint8_t getID() {
  // Getting ready for Reading PICCs
  if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
    return 0;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) {   //Since a PICC placed get Serial and continue
    return 0;
  }
  tagID = "";
  for ( uint8_t i = 0; i < 4; i++) {  // The MIFARE PICCs that we use have 4 byte UID
    readCard[i] = mfrc522.uid.uidByte[i];
    tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
  }
  tagID.toUpperCase();
  mfrc522.PICC_HaltA(); // Stop reading
  return 1;
}




Avant d’entrer dans la boucle principale, à la fin de la section de configuration, nous appelons également la fonction personnalisée printNormalModeMessage () qui imprime le message «Contrôle d’accès» sur l’écran.

void printNormalModeMessage() {
  delay(1500);
  lcd.clear();
  lcd.print("-Access Control-");
  lcd.setCursor(0, 1);
  lcd.print(" Scan Your Tag!");
}

 

Dans la boucle principale, nous commençons par lire la valeur du capteur de proximité, qui nous indique si la porte est fermée ou non.

int proximitéSensor = analogRead ( A0 ) ;

Donc, si la porte est fermée, en utilisant les mêmes lignes que celles décrites dans la fonction personnalisée getID (), nous scannerons et obtiendrons l’UID de la nouvelle balise. Nous pouvons remarquer ici que le code ne continuera pas tant que nous n’aurons pas scanné une balise à cause des lignes «return» dans les instructions «if».

 

Une fois que nous avons scanné l’étiquette, nous vérifions si cette étiquette est le maître que nous avons précédemment enregistré, et si c’est vrai, nous entrerons en mode programme. Dans ce mode, si nous numérisons une balise déjà autorisée, elle sera supprimée du système, ou si la balise est inconnue, elle sera ajoutée au système comme autorisée.

// Checks whether the scanned tag is the master tag
    if (tagID == myTags[0]) {
      lcd.clear();
      lcd.print("Program mode:");
      lcd.setCursor(0, 1);
      lcd.print("Add/Remove Tag");
      while (!successRead) {
        successRead = getID();
        if ( successRead == true) {
          for (int i = 0; i < 100; i++) {
            if (tagID == myTags[i]) {
              myTags[i] = "";
              lcd.clear();
              lcd.setCursor(0, 0);
              lcd.print("  Tag Removed!");
              printNormalModeMessage();
              return;
            }
          }
          myTags[tagsCount] = strdup(tagID.c_str());
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("   Tag Added!");
          printNormalModeMessage();
          tagsCount++;
          return;
        }
      }
    }

 

 

En dehors du mode programme, avec la prochaine boucle «for», nous vérifions si l’étiquette scannée est égale à l’une des étiquettes enregistrées et nous déverrouillons la porte ou gardons l’accès refusé. À la fin de l’instruction «else», nous attendons que la porte soit fermée, puis nous verrouillons la porte et imprimons à nouveau le message de mode normal.

 

// Checks whether the scanned tag is authorized
    for (int i = 0; i < 100; i++) {
      if (tagID == myTags[i]) {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print(" Access Granted!");
        myServo.write(170); // Unlocks the door
        printNormalModeMessage();
        correctTag = true;
      }
    }
    if (correctTag == false) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(" Access Denied!");
      printNormalModeMessage();
    }
  }
  // If door is open...
  else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(" Door Opened!");
    while (!doorOpened) {
      proximitySensor = analogRead(A0);
      if (proximitySensor > 200) {
        doorOpened = true;
      }
    }
    doorOpened = false;
    delay(500);
    myServo.write(10); // Locks the door
    printNormalModeMessage();
  }

 

 

 

C’est donc à peu près tout et voici le code complet du projet:

 

/*
* Arduino Door Lock Access Control Project
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: MFRC522, https://github.com/miguelbalboa/rfid
*/

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
#include <Servo.h>

#define RST_PIN   9
#define SS_PIN    10

byte readCard[4];
char* myTags[100] = {};
int tagsCount = 0;
String tagID = "";
boolean successRead = false;
boolean correctTag = false;
int proximitySensor;
boolean doorOpened = false;

// Create instances
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Parameters: (rs, enable, d4, d5, d6, d7)
Servo myServo; // Servo motor

void setup() {
  // Initiating
  SPI.begin();        // SPI bus
  mfrc522.PCD_Init(); //  MFRC522
  lcd.begin(16, 2);   // LCD screen
  myServo.attach(8);  // Servo motor

  myServo.write(10); // Initial lock position of the servo motor
  // Prints the initial message
  lcd.print("-No Master Tag!-");
  lcd.setCursor(0, 1);
  lcd.print("    SCAN NOW");
  // Waits until a master card is scanned
  while (!successRead) {
    successRead = getID();
    if ( successRead == true) {
      myTags[tagsCount] = strdup(tagID.c_str()); // Sets the master tag into position 0 in the array
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Master Tag Set!");
      tagsCount++;
    }
  }
  successRead = false;
  printNormalModeMessage();
}

void loop() {
  int proximitySensor = analogRead(A0);
  // If door is closed...
  if (proximitySensor > 200) {
    if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
      return;
    }
    if ( ! mfrc522.PICC_ReadCardSerial()) {   //Since a PICC placed get Serial and continue
      return;
    }
    tagID = "";
    // The MIFARE PICCs that we use have 4 byte UID
    for ( uint8_t i = 0; i < 4; i++) {  //
      readCard[i] = mfrc522.uid.uidByte[i];
      tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
    }
    tagID.toUpperCase();
    mfrc522.PICC_HaltA(); // Stop reading

    correctTag = false;
    // Checks whether the scanned tag is the master tag
    if (tagID == myTags[0]) {
      lcd.clear();
      lcd.print("Program mode:");
      lcd.setCursor(0, 1);
      lcd.print("Add/Remove Tag");
      while (!successRead) {
        successRead = getID();
        if ( successRead == true) {
          for (int i = 0; i < 100; i++) {
            if (tagID == myTags[i]) {
              myTags[i] = "";
              lcd.clear();
              lcd.setCursor(0, 0);
              lcd.print("  Tag Removed!");
              printNormalModeMessage();
              return;
            }
          }
          myTags[tagsCount] = strdup(tagID.c_str());
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("   Tag Added!");
          printNormalModeMessage();
          tagsCount++;
          return;
        }
      }
    }
    successRead = false;
    // Checks whether the scanned tag is authorized
    for (int i = 0; i < 100; i++) {
      if (tagID == myTags[i]) {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print(" Access Granted!");
        myServo.write(170); // Unlocks the door
        printNormalModeMessage();
        correctTag = true;
      }
    }
    if (correctTag == false) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(" Access Denied!");
      printNormalModeMessage();
    }
  }
  // If door is open...
  else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(" Door Opened!");
    while (!doorOpened) {
      proximitySensor = analogRead(A0);
      if (proximitySensor > 200) {
        doorOpened = true;
      }
    }
    doorOpened = false;
    delay(500);
    myServo.write(10); // Locks the door
    printNormalModeMessage();
  }
}

uint8_t getID() {
  // Getting ready for Reading PICCs
  if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
    return 0;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) {   //Since a PICC placed get Serial and continue
    return 0;
  }
  tagID = "";
  for ( uint8_t i = 0; i < 4; i++) {  // The MIFARE PICCs that we use have 4 byte UID
    readCard[i] = mfrc522.uid.uidByte[i];
    tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
  }
  tagID.toUpperCase();
  mfrc522.PICC_HaltA(); // Stop reading
  return 1;
}

void printNormalModeMessage() {
  delay(1500);
  lcd.clear();
  lcd.print("-Access Control-");
  lcd.setCursor(0, 1);
  lcd.print(" Scan Your Tag!");

 

J’espère que vous avez apprécié ce tutoriel et n’hésitez pas à poser n’importe quelle question dans la section commentaires ci-dessous.

 

error: Protection !!