Разблокировка компьютера с помощью NFC

Печатать логин и пароль для разблокировки компьютера может быть утомительным занятием, особенно если вводимые данные длинные. Упростить сию задачу можно с помощью Arduino Leonardo и шилда NFC.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/113-razblokirovka-kompyutera-s-pomoschyu-nfc/images/razblokirovka-kompyutera-s-pomoschyu-nfc-1.jpg

В данном случае Arduino считывает уникальный идентификатор карты NFC и после получения верного номера использует эмулятор клавиатуры для ввода пароля.

Шаг 1:что потребуется

  • Arduino Leonardo

  • шилд NFC от Adafruit

  • NFC-метка (должна поставляться с шилдом), при желании можно приобрести несколько меток

  • Монтажный провод

В качестве инструментов следует взять:

  • Острый нож

  • Олово для пайки

  • Кусачки для проводов

  • Компьютер

  • Кабель microUSB

Шаг 2: аппаратная часть

Вам нужно припаять выводы к шилду и поменять джампер для этого проекта. Для удобства пайки можно выводы вставить в разъем Arduino и затем вставить в них шилд. С помощью острого ножа следует перерезать джампер, связывающий вывод IRQ с выводом 2. Нам нужно это сделать, потому что NFC-шилд не связывается с Arduino по выводу 2. Используйте мультиметр, чтобы проверить наличие или отсутствие контакта. Затем отрежьте небольшой кусок провода и запаяйте его между шестым выводом и выводом IRQ.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/113-razblokirovka-kompyutera-s-pomoschyu-nfc/images/razblokirovka-kompyutera-s-pomoschyu-nfc-2.jpg https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/113-razblokirovka-kompyutera-s-pomoschyu-nfc/images/razblokirovka-kompyutera-s-pomoschyu-nfc-3.jpg https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/113-razblokirovka-kompyutera-s-pomoschyu-nfc/images/razblokirovka-kompyutera-s-pomoschyu-nfc-4.jpg https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/113-razblokirovka-kompyutera-s-pomoschyu-nfc/images/razblokirovka-kompyutera-s-pomoschyu-nfc-5.jpg

Шаг 3: Программная часть

Программа, которую нужно загрузить в Arduino, представлена ниже. Следует заметить, что при этом у вас уже должна быть установлена библиотека Adafruit NFC Library.

#include <Wire.h>
#include <Adafruit_NFCShield_I2C.h>

#define IRQ 6 // this trace must be cut and rewired!
#define RESET 8

Adafruit_NFCShield_I2C nfc(IRQ, RESET);

//////////////////////////////////// SETUP

void setup() {
  // set up Serial library at 9600 bps
  Serial.begin(9600);

  // find Adafruit RFID/NFC shield
  nfc.begin();

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }
  // Got ok data, print it out!
  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);

  // configure board to read RFID tags
  nfc.SAMConfig();
Keyboard.begin(); //initiate the Keyboard
}

/////////////////////////////////// LOOP

unsigned digit = 0;

void loop() {
  uint8_t success;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
  uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)

  // wait for RFID card to show up!
  Serial.println("Waiting for an ISO14443A Card ...");


  // Wait for an ISO14443A type cards (Mifare, etc.). When one is found
  // 'uid' will be populated with the UID, and uidLength will indicate
  // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);

  uint32_t cardidentifier = 0;

  if (success) {
    // Found a card!

    Serial.print("Card detected #");
    // turn the four byte UID of a mifare classic into a single variable #
    cardidentifier = uid[3];
    cardidentifier <<= 8; cardidentifier |= uid[2];
    cardidentifier <<= 8; cardidentifier |= uid[1];
    cardidentifier <<= 8; cardidentifier |= uid[0];
    Serial.println(cardidentifier);


    if (cardidentifier == 606061173) {
      Keyboard.write('m');
      Keyboard.write('y');
       Keyboard.write('p');
        Keyboard.write('a');
         Keyboard.write('s');
          Keyboard.write('s');
           Keyboard.write('w');
            Keyboard.write('o');
             Keyboard.write('r');
              Keyboard.write('d');
              delay(5000); //makes sure the password isn't repeated
    }
  }
}

После загрузки кода откройте монитор последовательного соединения на скорости 9600 бод. Поместите на секунду NFC-метку на шилд, а затем уберите ее. Монитор должен показать «Card detected #card number.». Здесь вам нужно скопировать номер карты (#card number) в выражение cardidentifier == 606061173 (вставить свой код). Затем измените строчки с keyboard.write на те, которые определят ваш собственный код. После этого перезалейте код.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/113-razblokirovka-kompyutera-s-pomoschyu-nfc/images/razblokirovka-kompyutera-s-pomoschyu-nfc-6.jpg

Шаг 4: корпус

При желании для такого девайса на 3D принтере можно распечатать корпус, благодаря которому устройство можно смонтировать на внутренней стороне крышки стола.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/113-razblokirovka-kompyutera-s-pomoschyu-nfc/images/razblokirovka-kompyutera-s-pomoschyu-nfc-7.jpg

STL-файл корпуса

Примечание

Оригинальное видео работы было удалено автором (видео помечено как приватное).