Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Nfc-телефон можно использовать как электронный пропуск

NXP Semiconductors и HID Global анонсировали свою совместную разработку – базовое решение Mobile Access для мобильных NFC-телефонов. Технология NFC обеспечивает обмен информацией между устройствами на небольших расстояниях, используя имеющиеся стандарты бесконтактной передачи данных.

Компании HID Global и NXP способствовали созданию современного рынка решений для систем физического доступа на базе карт и сегодня вместе переносят эти решения на мобильные телефоны по мере того, как NFC становится стандартной технологией.

Бесконтактные карты для доступа сотрудников в здания компаний и на территорию парковки, теперь могут быть интегрированы в NFC-телефон, в котором хранится цифровое удостоверение личности.

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

NFC-смартфоны, которые все шире используются для управления доступом, обеспечат пользователям и компаниям привычно высокий уровень безопасности в сочетании с удобством мобильного устройства.

Совместно разработанное решение позволяет также использовать преимущества технологий считывания NXP и HID Global в инфраструктуре управления физическим доступом.

Решение поддерживает существующие считывающие устройства HID Global, а также устройства на базе платформы iCLASS SIO-Enabled (iCLASS SE) этой же компании, что стимулирует миграцию технологий управления доступом за пределы традиционных карт и считывателей, и позволяет реализовать мобильный доступ с использованием цифрового удостоверения личности.

Для гарантии совместимости новое решение обратно совместимо с новыми считывающими устройствами HID Global iCLASS, а также совместимо с экосистемой Trusted Identity Platform (TIP) компании HID Global.

Чтобы обеспечить поддержку мобильных NFC-телефонов без физической замены уже установленных считывателей, пользователи продукции HID могут обновить версию ПО некоторых устройств iCLASS.

Технология NXP позволяет управлять множеством приложений, таких как прием платежей, e-government, управление доступом и продажа билетов, с помощью одного микроконтроллера, который гарантирует безопасное распознавание личности без ухудшения рабочих характеристик, снижения безопасности и проектной производительности.

Решение Mobile Access основано на маломощных ИС семейства NXP PN65 NFC, которые обеспечивают устойчивое к несанкционированному доступу хранение данных. ИС PN65 содержат NFC радиоконтроллер NXP PN544 и встроенный элемент безопасности (embedded Secure Element, eSE).

В eSE реализована технология NXP SmartMX, используемая для защиты сотен миллионов банковских карт; электронных паспортов и карт для электронной идентификации (eID), билетов на транспорте и других карт и удостоверений личности по всему миру.

ИС NXP будут поддерживать технологию защищенной идентификации объектов (Secure Identity Object, SIO) компании HID Global для настройки идентификационных данных, их хранения и управления жизненным циклом, а также платформу HID Trusted Identity Platform (TIP) для управления конечными устройствами и обеспечения их безопасности.

HID SIO представляет новую, основанную на стандартах, гибкую структуру идентификационных данных,которая вне зависимости от используемых технологий позволяет реализовать возможности смарт-карт в широком спектре портативных платформ, включая NFC телефоны.

Вместо введения

NFC расшифровывается как Near Field Communication или «ближняя бесконтактная связь», если по-русски. По своей сути это небольшой чип, который может быть встроен в смартфон с целью передачи данных на очень короткие расстояния с весьма мизерной скоростью.

NFC очень близка к технологии RFID, которая уже давным-давно используется для пометки продуктов в супермаркетах, но базируется на ее более позднем стандарте ISO/IEC 14443 (смарт-карты) и спроектирована для использования в переносной электронике (читай: смартфонах) и выполнения безопасных транзакций (читай: оплаты покупок).

Как и в случае со стандартом ISO/IEC 14443, дальность действия NFC всего 5–10 см, но разница в том, что чип NFC способен выполнять функцию тега и считывателя одновременно.

Другими словами, оснащенный NFC смартфон может быть как смарт-картой (картой метро, например), которую достаточно поднести к считывателю, чтобы расплатиться, так и самим считывателем, что можно использовать, например, для перевода средств между картами-смартфонами и превращения реальных карт с поддержкой стандарта ISO/IEC 14443 в виртуальные.

Но это только «одно из» и наиболее очевидное применение NFC. Благодаря тому, что чип NFC способен передавать данные в обе стороны и не требует аутентификации устройств, его можно использовать как простую и более удобную замену Bluetooth. С помощью NFC, например, можно делиться ссылками, паролями, контактными и другими данными между смартфонами, просто поднеся их друг к другу.

Появившаяся в Android 4.

0 технология Beam еще больше расширяет границы применения NFC, позволяя быстро переносить между устройствами целые файлы и папки, что достигается с помощью предварительной аутентификации Bluetooth-устройств по NFC и последующей установки Bluetooth-соединения и отправки файлов.

Как и в предыдущем случае, все, что требуется для передачи, — просто поднести телефоны друг к другу. В прошивках Samsung эта функция носит имя S-Beam и позволяет использовать в качестве «транспортного канала» не только синезуб, но и Wi-Fi (один из смартфонов превращается в точку доступа).

Еще одна возможность — использование пассивных NFC-тегов. Такие теги в виде небольших наклеек можно приобрести за полдоллара за штуку и перепрограммировать с помощью смартфона. Каждый из них может вмещать в себя 137 байт информации (в случае самого распространенного и дешевого тега Mifire Ultralight C), для считывания которой опять же достаточно просто поднести смартфон.

В тег можно записать пароль от домашнего Wi-Fi и приклеить на роутер. Или кодовое слово, на которое будет реагировать смартфон. Можно организовать автоматический запуск навигатора при установке смартфона в держатель в автомобиле или включение бесшумного и энергосберегающего режимов, когда телефон находится на прикроватной тумбочке.

Небольшой список покупок в 137 байт тоже вполне вместится.

В этой статье мы поговорим обо всех возможных применениях NFC на практике, но так как в нашей стране оплата покупок с его помощью внедрена примерно нигде, то речь пойдет преимущественно об автоматизации на основе меток.

Дубликатор домофонных ключей (ibutton) с мозгами из arduino nano

Добрый день! Как-то надоело платить по 150 рублей за копию ключа от домофона и решил собрать простой, бюджетный дубликатор iButton на Arduino. Цены на подобные готовые устройства «кусаются», хотя и функционал у них шире, копируют практически всё, включая беспроводные ключи. Мне достаточно простого копирования ключа iButton а-ля «кнопка». Интересно? Прошу под «cut»!

Итак, приступим! Для начала «техзадание», что должно уметь это устройство:
1) Читать содержимое ключа, интересно же что там зашито.
2) Копировать ключи, как это ни странно звучит 🙂
3) Прошивать «универсальный» ключ. Под словом «универсальный» будем понимать какой-либо свой ключ, который будет записываться по-умолчанию.

Мозгами будет Arduino Nano v3 неоднократно рассмотренная на этом ресурсе.

Корпусом для этого устройства будет служить неисправный «однобаночный повербанк», так же неоднократно обозримый и тут, и там. Из внутренностей «повербанка» останется только печатная плата с гнёздами USB и MicroUSB. Через MicroUSB будем питать устройство от 5В, так же может быть запитано от порта Mini-USB Arduino. Через USB подключим считыватель iButton. Всё остальные электронные компоненты выпаяны из платы «повербанка». Кнопка для дубликатора куплена в оффлайне, ничего особенного в ней нет, обычная, без фиксации. В корпусе проделаны отверстия для порта Mini-USB расположенного на плате Arduino и над кнопкой «Reset».
Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Считыватель iButton, взят от какого-то неведомого устройства, ничего особенного в нём нет, просто контактная площадка. К считывателю припаян USB штекер. Так как разъём используется не по назначению и чтобы ничего не «сжечь» при подключении считывателя к порту ПК, ноутбука или зарядного устройства, для подключения используются провода зелёного «Data » и белого «Data-» цвета.
Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу
Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Дубликатор со считывателем и ключами:

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Светодиоды для индикации процесса прошивки на корпус не стал выводить, корпус белый и хорошо просвечивается, всё видно.

Схема подключения:
Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу
Резистор R2 поставил 1кОм, в интернетах пишут что надо 2,2 кОм.

Программное обеспечение. Для компиляции необходима библиотека

OneWire

взять её можно

тут

.

Скетч от 27.06.2021

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу


#include <OneWire.h>

#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F

const int buttonPin = 6;
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(115200);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    readflag = 1;
    writeflag = 1;
    digitalWrite(ledPin, HIGH);
  }
  if (!ibutton.search (addr)) {
    ibutton.reset_search();
    delay(50);
    return;
  }

  digitalWrite(ledPin, HIGH);
  delay(50);

  for (byte x = 0; x < 8; x  ) {
    Serial.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    Serial.print(":");
  }

  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
  Serial.print("CRC: ");
  Serial.println(crc, HEX);
  digitalWrite(ledPin, LOW);

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
    Serial.print("  ID before write:");
    for (byte x = 0; x < 8; x  ) {
      Serial.print(' ');
      Serial.print(ibutton.read(), HEX);
    }
    // send reset
    ibutton.skip();
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    // send logical 0
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);

    Serial.print('n');
    Serial.print("  Writing iButton ID:n    ");
    byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD5);
    for (byte x = 0; x < 8; x  ) {
      writeByte(newID[x]);
      Serial.print('*');
    }
    Serial.print('n');
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    //send logical 1
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
    writeflag = 0;
    readflag = 0;
    digitalWrite(ledPin, LOW);
  }
}

int writeByte(byte data) {
  int data_bit;
  for (data_bit = 0; data_bit < 8; data_bit  ) {
    if (data & 1) {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      delayMicroseconds(60);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    } else {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    }
    data = data >> 1;
  }
  return 0;
}

Скетч от 04.09.2021, добавлена функция восстановления ключей с неправильным family code

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу


#include <OneWire.h>

#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F

const int buttonPin = 6;
const int ledPin = 13;
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
int val = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(115200);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    readflag = 1;
    writeflag = 1;
    digitalWrite(ledPin, HIGH);
    val  ;
    if (val > 6) val = 6;
    Serial.print(val);
    delay(500);
  }
  else {
    val = 0;
  }


  if (!ibutton.search (addr)) {
    ibutton.reset_search();
    delay(50);
    if (val <= 5) return;
    val = 0;
  }

  digitalWrite(ledPin, HIGH);
  delay(50);

  for (byte x = 0; x < 8; x  ) {
    Serial.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    Serial.print(":");
  }

  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
  Serial.print("CRC: ");
  Serial.println(crc, HEX);
  digitalWrite(ledPin, LOW);

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
    Serial.print("  ID before write:");
    for (byte x = 0; x < 8; x  ) {
      Serial.print(' ');
      Serial.print(ibutton.read(), HEX);
    }
    // send reset
    ibutton.skip();
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    // send logical 0
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);

    Serial.print('n');
    Serial.print("  Writing iButton ID:n    ");
    byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD5);
    for (byte x = 0; x < 8; x  ) {
      writeByte(newID[x]);
      Serial.print('*');
    }
    Serial.print('n');
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    //send logical 1
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
    writeflag = 0;
    readflag = 0;
    digitalWrite(ledPin, LOW);
  }
}

int writeByte(byte data) {
  int data_bit;
  for (data_bit = 0; data_bit < 8; data_bit  ) {
    if (data & 1) {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      delayMicroseconds(60);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    } else {
      digitalWrite(pin, LOW); pinMode(pin, OUTPUT);
      pinMode(pin, INPUT); digitalWrite(pin, HIGH);
      delay(10);
    }
    data = data >> 1;
  }
  return 0;
}

Как это работает:

Для вывода содержимого ключа подключаем дубликатор через порт Mini-USB к компьютеру. Устанавливаем драйвер устройства.
В диспетчере устройств появится COM-порт с каким-либо номером, в моём случае 4.

Запускаем программу

Putty

, выбираем тип соединения «Serial» прописываем номер COM порта, в моём случае 4, и скорость 115200.

Нажимаем кнопку «Open» и прикладываем ключ к считывателю.

Для копирования прикладываем ключ к считывателю. Светодиод на корпусе Arduino подключенный к пину D13 начинает мигать, это говорит о том, что код ключа считался в память дубликатора. Нажимаем «зелёную» кнопку записи, светодиод начинает светиться постоянно. Прикладываем ключ который хотим записать, светодиод тухнет и примерно через 1 секунду начинает мигать, это значит что ключ записан.

Для записи «универсального» ключа включаем дубликатор и не прикладывая к считывателю ключа нажимаем «зелёную» кнопку записи, светодиод начинает светиться постоянно. Прикладываем ключ который хотим записать, светодиод тухнет и примерно через 1 секунду начинает мигать, это значит что ключ записан.

Важно! При записи «универсального» ключа, например такого 01:FF:FF:FF:FF:FF:FF:2F, нужно правильно указать контрольную сумму ключа, в данном случае 2F это и есть контрольная сумма, рассчитывается по особому алгоритму, который описывать не вижу смысла. Ключ можно записать с кривой контрольной суммой, и скорее всего считываться устройствами (домофонами, панелями) он будет, но устройства будут его игнорировать.

Например нам нужно прошить ключ 01:12:34:56:AB:CD:EF:XX. Первый байт, передаваемый из памяти ключа, является кодом типа устройства — family code, всегда 01. После него идёт гарантированно уникальный серийный номер (6 байт) 12:34:56:AB:CD:EF. Последний байт XX несёт информацию Cyclic Redundancy Check (CRC), что означает проверочный циклический избыточный код. CRC специальным образом вычисляется от первых семи байт.
Для вычисления контрольной суммы вместо XX записываем любое шестнадцатеричное число, например AA. Получаем ключ следующего вида 01:12:34:56:AB:CD:EF:AA. Заменяем в скетче строку

byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F };

на

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xAA };

прошиваем ключ и смотрим что там, а там видно что в поле CRC должно быть

E0

.

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Меняем в скетче строку

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xAA };

на

byte ReadID[8] = { 0x01, 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF, 0xE0 };

снова прошиваем ключ и смотрим что там, а там теперь ключ с правильной CRC.

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Коды ключей

тут

.

UPD. Очень важно! Если первый байт, family code, будет 00, например 00:12:34:56:AB:CD:EF:AA, то после прошивки ключ «умрёт», читаться он уже этим программатором, а возможно и другими, не будет. Выявлено опытным путём, спасибо товарищу belik1982‘у. Подробнее тут.

UPD. В скетч от 04.09.2021 добавлена функция восстановления ключей с неправильным family code, для этого необходимо приложить ключ к считывателю и удерживать кнопку в течение 6 секунд. После этого в ключ будет записан «универсальный» ключ. Спасибо за помощь товарищу krassalex‘у. Подробнее тут.

В итоге получаем полезную в хозяйстве штуку за смешные деньги, «болванки» для записи продают

тут

, хотя у нас в оффлайне можно найти по 30 рублей за штуку, у копировальщиков на рынке по 100 — 150 рублей :).

UPD.

О том какие типы ключей можно записать этим дубликатором читаем

тут

. Спасибо за помощь товарищу

biverov

‘у.

UPD.

Если ключ не пишется следуем

совету

товарища

andrey2596

.

Захват криптоключей mifare и копирование ключей домофонов ironlogic своими руками

Голыми руками захватывать криптоключи и копировать брелоки Mifare для домофонов конечно невозможно, а вот собрать прибор, который будет это делать вполне реально. Не буду здесь рассказывать о том, что такое Mifare и вдаваться в технические подробности, скажу только, что данная технология используется сейчас, например, в домофонах, и для того, чтобы скопировать домофонный брелок, необходимо знать криптоключи, которыми он был закрыт.

Внимание! Данная статья создана исключительно в образовательных целях. Напоминаем, что любое проникновение в информационные системы может преследоваться по закону.

У многих, интересующихся технологией MIfare, наверняка есть простейшее устройство для чтения-записи карт и брелоков Mifare, состоящее из модуля PN532 и USB-UART адаптера:

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Путем несложной и недорогой доработки это устройство можно заставить захватывать от
считывателя данные аутентификации, с помощью которых и рассчитываются криптоключи, так необходимые для чтения и копирования. Существуют и серийно выпускаемые приборы для этой цели — SMKey, Proxmark3, Chameleon и ещё некоторые. Это приборы с множеством функций, удобные, но недешевые.

Я предлагаю вашему вниманию более бюджетный вариант на основе подобного «малого джентльменского набора» из модуля PN532 и USB-UART адаптера, позволяющий захватывать данные от считывателя Mifare, например домофона, и рассчитывать криптоключи, с которыми считыватель обращается к метке.

Разработанное устройство в своей основе имеет недорогую, «народную» отладочную плату на основе процессора STM32F103C8T6, прозванную ещё «BluePill» c подключенными к ней модулем PN532 и USB-UART адаптером. Подключается данный агрегат через USB-OTG кабель к смартфону на Андроиде. Собирается всё это в макетном варианте без пайки, с помощью перемычек и имеет примерно такой вид, хоть и непрезентабельный, но вполне рабочий:

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Схему сборки очень проста и представлена в текстовом виде:

PN532 ___________________STM32F103C8T6

SCK_____________________PA5(SPI1_SCK)
MISO____________________PA6(SPI1_MISO)
MOSI____________________PA7(SPI1_MOSI)
SS______________________PB0(GPIO_OUTPUT)
SIGIN___________________PB11(TIM2_CH4)
SIGOUT__________________PA12(TIM1_ETR)
SIGOUT__________________PA15(TIM2_ETR)
VCC_____________________ 5V
GND_____________________GND

USB-UART________________STM32F103C8T6

RX______________________PA9(USART1_TX)
TX______________________PA10(USART1_RX)
5V_____________________ 5V
GND_____________________GND

ВАЖНО! Переключатели интерфейса PN532 должны быть установлены в режим SPI! Прошить STM32 можно с помощью утилиты FlashLoaderDemonstrator через существующий USB-UART адаптер.
Внимание для работы с новой версией прошивки необходимо изменить схему подключения вывода SIGOUT на PA12 и PA15 (Ранее было на PA0 и PA12)!

Вот демонстрация захвата криптоключа от имитатора считывателя домофона(Arduino PN532):

Так как считыватели IronLogic(IL), для работы с которыми и разрабатывалось данное устройство, пытаются прочитать метку с криптоключом, рассчитанным на основе UID данной метки, то этот UID сначала надо задать. Сделать это можно двумя способами – вручную или считать с метки. После этого производим захват и ждем расчета криптоключей.

Следующая вкладка программы «Запись на Classic» использует возможность ранних версий считывателей IL записывать копии на дешевые заготовки Mifare Classic. Этот способ основан на том, что считыватель IL после авторизации посылает домофону не оригинальный UID метки, а информацию, записанную в первом блоке (в общем случае совпадающую с UID оригинала). Для этого мы должны захватить и рассчитать криптоключ метки, которая послужит заготовкой, закрыть с его помощью нулевой сектор, а в первый блок этой метки записать четыре байта UID метки, которая служит прототипом. Для этого нам даже не надо захватывать криптоключ оригинала и снимать его дамп, достаточно узнать его UID, но это справедливо только в том случае, если оригинал — «оригинальный», а не является копией, тогда всё-таки придется читать первый блок и уже его записывать в копию. Чтобы было понятнее, рассмотрим такой пример – предположим, что мы хотим сделать копию оригинального ключа с UID 0xEBD52AC5, который записан и в первом блоке оригинала, на обычную метку Mifare Classic с UID, допустим, 0x12345678. Для этого мы с помощью представленного устройства, метко обозванного одним товарищем «Шайтан-Машиной», находим криптоключ именно для этого UID и именно для того объекта (подъезда, дома …), который нам нужен. Пусть криптоключ получился 0xABCDEF098765, тогда отредактируем нулевой сектор дампа копии следущим образом:

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

В первый блок запишем UID оригинала 0xEBD52AC5, а в третий блок шесть байт криптоключа, найденного для этой заготовки — 0xABCDEF098765. Запишем дамп в заготовку, и получим копию домофонного ключа. Примерно так прибор SMKey делает копии IronLogic на обычные Mifare Classic, и именно так поступает данная программа записи. В поле «Код» заносим вручную или считываем с оригинального ключа 4 байта UID, которые будут записаны в 1-й блок копии. Стартуем и, далее следуем подсказкам программы. Сначала считываем UID заготовки, потом подносим устройство к домофону и захватываем данные аутентификации. После окончания расчета программа предложит поднести заготовку для записи данных. Если будет найдено более одного криптоключа, то после записи первого варианта будет дана возможность проверить полученную копию. Если копия не подходит, то следует попробовать следующий рассчитанный ключ, или стереть (привести в исходное состояние) заготовку для дальнейшего использования. Копия может не работать также из-за того, что неправильно определили код, который записывается в 1-й блок копии – например если попытаетесь записать реальный UID не оригинального брелока, а его копии, сделанной по вышеописанному методу.В таком случае надо использовать не UID метки, а данные из 1-го блока, которые можно получить в разделе «Копирование сектора».

Этот способ не будет также работать для последних версий ПО считывателей IL. В таком случае копию можно сделать, скопировав полностью 0-й сектор ( 4 блока) на заготовку, позволяющую записывать 0-й блок с помощью раздела приложения «Копирование сектора». Здесь также сначала находим криптоключ оригинала, читаем его нулевой сектор и затем пишем на заготовку. Ввиду отсутствия под рукой заготовок ОТР и ОТР-2.0, эта функция пока тестировалась только на заготовках ZERO, хотя новые версии считывателей требуют использовать ОТР-2.0.

Ну и на закуску – раздел приложения «Запись UID» позволяет изменять UID, восстанавливать испорченный 0-й блок и сбрасывать на дефолт криптоключи заготовок ZERO.

Итак – коротко подытожу. Чтобы сделать такое устройство, приобретаем или ищем по своим загашникам модуль PN532, любой из USB – UART адаптеров FTDI, PL2303, CH340 или CP2102, отладочную плату STM32F103C8T6, полтора десятка перемычек, USB-OTG переходник и смартфон(планшет) на Андроиде с OTG. Собираем по вышеприведенной схеме само устройство, прошиваем *.bin файлом STM32 и устанавливаем *.apk приложение из архива
на смартфон. Для корректной работы приложение на смартфоне должно запускаться при подключении USB-UART адаптера или по умолчанию, или выбором вручную, иначе приложение не получит доступ к адаптеру.

Несколько слов хочу сказать по поводу модуля PN532 – не все эти модули «одинаково полезны»! Из трёх модулей(таких как на фото выше), приобретенных мной, один плохо читал и записывал метки, особенно ZERO и ОТР-2.0, но нормально работал в пассивном режиме со считывателями домофонов, другой вел себя с точностью до наоборот и только третий более-менее справлялся и с метками и с домофонами(правда хуже чем первые два). Возможно мне не повезло и именно эта партия модулей оказалась не лучшего качества, но жалуются на них и другие люди. Впрочем – кому как повезет. Это я к чему говорю? В продаже появились модули PN532 немного другой компоновки, которые дороже, но, по отзывам не имеют таких проблем:

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

Если же кому-нибудь попадется PN532, который плохо пишет-читает метки, то могу посоветовать добавить к устройству модуль RC522, стоящий сущие копейки, но прекрасно выполняющий свои функции, по следующей схеме:

RC522____________________STM32F103C8T6

RST______________________PB12(GPIO_OUTPUT)
SCK______________________PB13(SPI2_SCK)
MISO_____________________PB14(SPI2_MISO)
MOSI_____________________PB15(SPI2_MOSI)
SDA______________________PA8(GPIO_OUTPUT)
VCC______________________ 3.3V
GND______________________GND
В этом случае PN532 будет работать только при захвате данных от считывателя, а вся тяжесть работы с метками ляжет на плечи RC522. Обратите особое внимание — RC522 необходимо подключать на напряжение только 3.3В!

P.S. Обновил ПО устройства — добавилась возможность эмуляции Mifare Classic 1K и создания базы данных меток для нескольких объектов старых домофонов IronLogic. В эмулятор можно загрузить бинарный файл дампа размером 1К, а на вкладке «База меток» можно ввести сколько надо UID-ов пустых заготовок, затем захватить для них криптоключи на различных адресах и потом уже записывать их не выходя к объекту. UID и криптоключ А 0-го сектора записанной метки сохраняется в базе данных, что позволяет при необходимости просто стереть метку, которая была записана на этом устройстве.

UPD. Очередное обновление устройства. Основное — сейчас устройство научилось производить захват и расчет криптоключей от последних версий считывателей IL, вплоть до новых 4-полосных считывателей с последней актуальной прошивкой 7.20 выложенной на сайте!
Еще раз обращаю внимание! Схема подключения модуля PN532 для новой прошивки KeyToolsSTM.bin немного изменена: теперь SIGOUT подключен на PA12 и PA15 контролера STM32, а не на PA12 и PA0, как раньше!

Вместо дорогого и капризного модуля PN532 можно сделать несложную антенну с модулем сопряжения. Схема приведена на рисунке:

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу

За основу взята статья Простой Mifare-сниффер. Конструкция самой антенны хорошо описана в статье, у меня же неплохо работает бескаркасная катушка диаметром 30мм из 9 витков одножильного изолированного провода, взятого от витой пары интернет кабеля. Прошивка для этой схемы требуется уже другая — KeyTools_WPN.bin. Обратите внимание — такая антенна работает только в пассивном режиме, т.е. только для захвата данных от считки и эмуляции метки. Чтобы читать-записывать метки необходимо дополнить устройство модулем RC522, схема подключения которого приведена выше.
Важное дополнение — вывод PA12 отладочной платы уже подтянут к 3.3В резистором 10кОм, именно исходя из этого выбран номинал R3 = 4к7, но на некоторых платах STM подтягивающий резистор имеет другое сопротивление! Рекомендую замерить сопротивление между РА12 и 3.3В на плате и если оно отличается от 10кОм, то перепаять резистор!

Появилась так же возможность подключения устройства к смартфонам без OTG — для этого вместо USB — UART адаптера подключается Bluetooth модуль типа HC-05, HC-06, а на смартфоне устанавливается приложения KeyToolsBT. Предварительно на Bluetooth модуле с помощью АТ команд необходимо установить скорость обмена 115200! Питание можно организовать от аккумулятора через повышающий преобразователь 5В.

Устройство обсуждается на форуме: Kazus. По всем вопросам обращайтесь туда.

Архив
GitHub

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

Мы подключим клавиатуру для отображения номеров на ЖК-дисплее для Arduino и скопируем ключ, который вводим с клавиатуры.

Keypad.h – это библиотека, которая позволяет Arduino читать клавиатуру с матричным типом.

В этом проекте используется клавиатура 4 × 4.

В таблице показано соединение между платой Arduino и клавиатурой. Штыри клавиатуры подключены к цифровым выходным выводам Arduino. Pin D6 использовался для зуммера, потому что это был штырь ШИМ.

Вывод клавиатурыКонтакт Arduino
1D2
2D3
3D4
4D5
5A0
6D7
7D8
Соединение между Arduino, LCD и клавиатурой
Соединение между Arduino, LCD и клавиатурой

Затем добавим RFID. В этом случае плата RFID использует протокол связи SPI, где Arduino будет действовать, как ведущий и считыватель RFID в качестве подчиненного. Считыватель карт и теги предназначены для связи с частотой, равной 13,56 МГц.

Это важный шаг, поскольку он помогает нам считывать данные с карты, и он будет решать, соответствует ли идентификатор информации, хранящейся в EEPROM. Если он соответствует, он даст нам доступ и отобразит «Unlocked». В противном случае на ЖК-дисплее отобразится «Заблокировано».

Соединение между Arduino, LCD и RFID
Соединение между Arduino, LCD и RFID

Следующий шаг – добавить зуммер и 2 светодиода для имитации системы контролируемого доступа. Ознакомьтесь с приведенной ниже диаграммой. Зуммер установлен так, что он гудит всякий раз, когда мы получаем доступ (разблокирован). Красный светодиод всегда горит, когда он заблокирован, но зеленый светодиод загорается, когда он разблокирован.

Чтобы защитить модули, нужно использовать 3D-печать корпуса. Если у вас нет 3D-принтера, вы можете просто использовать пластиковый корпус, который позволяет вам вставлять все компоненты внутрь. Это очень полезно, потому что модули будут размещены внутри, а единственными частями вне коробки будут светодиоды, клавиатура и ЖК-дисплей.

Схема соединений, показывающая соединение между Nano, LCD, клавиатурой, RFID и звуковым сигналом
Схема соединений, показывающая соединение между Nano, LCD, клавиатурой, RFID и звуковым сигналом

Код для загрузки на микропроцессор доступен по ссылке:

Смотрим на 1-wire через осциллограф

Захват сигнала осциллографом в момент чтения ключа Dallas

Линия передачи устроена по принципу «монтажного И» и может иметь одно из двух состояний: логический “0” и логическая “1”.Устройства (ключи и домофон) имеют внутренние транзисторы, которые в нужное время подтягивают линию к нулю. Вся линия передачи переходит в состояние логического “0”, если любое из устройств перевело ее в нуль, т.е. если домофон перетянул линию в нуль — ключ об этом узнает, и наоборот.

С помощью перетяжек напряжения и удержания уровней 1-wire имеет 4 примитива для работы на шине:

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | ПикабуЧтение ключа Dallas на Flipper. Состоит из команд Search ROM и Read ROM. Каждая команда имеет Reset sequence.

Чтение ключа на Flipper Zero устроено так: командой поиска проверяется наличие ключа, а затем происходит чтение ID. Это сделано, чтобы избежать случайных совпадений с другими ключами Cyfral/Metakom, тайминги которых могут случайно совпасть с требуемыми.

На осциллограмме виден длинный сигнал из 2 команд, где каждая состоит из:

Разберем более детально каждый из пунктов.

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу
Reset sequence — инициализация команды. Состоит из Импульса Сброса и Импульса Присутствия. Импульс Сброса — уровень опускает Master. Импульс Присутствия — уровень опускает Slave.

Инициализация (reset sequence) состоит из двух импульсов:

  1. Импульс Сброса (Reset pulse)
  2. Импульса Присутствия (Presence pulse)


Для Импульса Сброса — линию к земле подтягивает Master (домофон).

Для Импульса Присутствия — линию к земле подтягивает Slave (ключ).

Некоторые домофоны не подают импульс сброса, так как отсутствие контакта между ключом и домофоном и есть сигнал сброса.

Продолжение поста «Копируем ключ от домофона MIIFARE телефоном MCT» | Пикабу
Команда чтения ID с ответом. Тайм-слот бита информации состоит из 2 участков: синхронизации и значения бита. В КОМАНДАХ за уровни напряжения на обоих участках отвечает Master. В ОТВЕТЕ на команду чтения за синхронизацию отвечает Master, за значение бита отвечает Slave.

После инициализации команды происходит обмен информацией:


Обмен информацией ведется тайм-слотами: один тайм-слот для обмена одним битом информации. Данные передаются бит за битом, начиная с младшего бита младшего байта.

Синхронизация Master и Slave происходит в одно действие: Master (домофон) подтягивает линию к низкому уровню. Далее через конкретное время, Master или Slave измеряет напряжение на линии и записывает бит информации (Master — при чтении ключа, Slave — при записи ключа).

Важно, что все сигналы имеют конкретные временные ограничения, которые обязательно должны быть соблюдены! Бывает, что производители домофонов упарываются, и соблюдают какие-то свои временные задержки.Еще у iButton есть режим Overdrive, в котором временные задержки сокращены, из-за чего передача информации происходит быстрее. Есть вероятность, что в дикой природе существуют домофоны, работающие в этом режиме… Но на практике они не встречались.

Телефон как пропуск

На самом деле, несмотря на очевидные риски, я был бы очень рад этому, так как это сэкономило бы кучу времени.

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

В интернете можно найти много инструкций о том, как карту для метро освободить от внешней оболочки, а потом сделать из нее, например, кольцо, с помощью которого можно будет проходить турникет в метро. Мне не близка тема колец, а в моем городе нет метро, однако и меня не обошла стороной необходимость часто пользоваться бесконтактной картой – пропуском на работу.

Каждый раз, приходя на работу, необходимо доставать пропуск, чтобы просканировать его в турникете на входе. Учитывая, что мой любимый кошелек защищен от сканирования (о чем производитель кошелька даже предупреждает специальным знаком), приложить кошелек к считывателю не выйдет.

Доставать пропуск из кошелька каждый раз при проходе турникета неудобно, поэтому приходится хранить заветную карточку по карманам, а значит, есть шанс забыть при смене одежды.

А вот телефон у меня всегда с собой. Выход найден – необходимо интегрировать пропуск в телефон. Увы, программно это сделать не получится – чип на пропуске защищен от копирования, и перенести его в телефон не выйдет. Значит, пойдем по пути модернизаторов проездных для метро.

Для начала необходимо понимать, что внутри карты запаяна катушка с микрочипом, на который и записан идентификатор, считываемый приемником на турникете. Смотрите, катушку видно на просвет.

Наша задача – извлечь эту катушку, не повредив ее. Основная сложность состоит в том, что чип соединен с катушкой двумя тоненькими проводками, которые очень легко порвать.

Значит, вместо механики нам поможет химия. Мы будем размягчать и расслаивать карту с помощью агрессивных веществ.

В сети для этой цели рекомендуют использовать ацетон, который растворит материал корпуса. Я не стал использовать ацетон, так как не хочу потом отмывать катушку от остатков пластика. Вместо ацетона я взял средство для удаления ультрафиолетового клея (LOCA). Оно должно действовать менее агрессивно.

Берем металлическую или стеклянную посуду и заливаем карту так, чтобы вся поверхность оказалась под слоем жидкости. Не используйте пластиковые емкости – ацетон их расплавит, а еще замачивайте карту в герметичной посуде, чтобы не надышаться парами. Оставляем это все на три-четыре часа. Поначалу кажется, что ничего не происходит. Не нужно спешить – все будет.

Спустя четыре часа видим, что карточка расслоилась и деформировалась из-за того, что разные слои размягчались с разной скоростью. Отлично, это нам и нужно.

Достаем карту из жидкости и начинаем процесс расслоения. Не спешите, риск порвать проволоку высок. Постепенно извлекаем катушку из пластика, периодически проверяя на просвет положение микрочипа.

Если сделать все не спеша и аккуратно, в итоге мы получим вот такую конструкцию, свободную от пластика. Большая часть дела сделана.

Теперь укрепим скотчем место соединения катушки с микрочипом. Я просто обклеил с двух сторон это место скотчем. На толщине это почти не сказалось, зато теперь катушку можно брать в руки, не боясь повредить контакты.

Дело за малым – установить полученный девайс в телефон. В моем случае это уже знакомый вам Samsung Galaxy S7 Active, который со дня на день ждет новую камеру и поэтому еще не проклеен.

Учитывая, что после замены камеры телефон будет продан,  катушка там будет находиться временно, до момента продажи.

Перед окончательной сборкой я уберу из телефона пропуск и переставлю его в следующий аппарат.

Ищем удобное место для размещения. Я разместил пропуск так, чтобы микрочип оказался в одном из углублений демпфирующего слоя и не помешал остальным элементам при сборке.

Вышло отлично. Чип в углублении, катушка на месте. Осталось собрать все воедино.

Собираем, предварительно убедившись, что новый элемент не повлиял на толщину и не стал помехой. Все отлично, рама встала на место без проблем. Окончательно собираем и включаем аппарат.

Телефон работает, это уже успех! Увы, учитывая, что пропуск работает на частотах, отличных от тех, что используются в телефонных чипах NFC, проверить работоспособность катушки прямо в телефоне не выйдет – телефон просто не видит пропуск и не видел до этого.

Так что проверку боем полученный гибрид пройдет завтра утром, когда я поеду на работу и попробую пройти турникет с помощью телефона, а статья будет дополнена гифкой, подтверждающей работоспособность метода (или не подтверждающей) :).

UPD: А вот и обещанная GIF. Всё работает как надо.

Данный метод работает и для проездных метро, с которыми, учитывая их меньшую толщину и плотность пластика, все оказывается еще проще.

Эмуляция ключа от домофона с помощью телефона (nfc)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *