RFID-модуль RC522

Делаем RFID-замок с использованием Arduino. Подключение RFID к Arduino с помощью RC522 и RDM3600 Подключение rfid замка на ардуино

В настоящее время очень популярным становится использование технологии радиочастотной идентификации (RFID). Многие приложения внедряются в различные области нашей жизни, и используются для различных целей. RFID обеспечивает беспроводный сбор данных с помощью считывателей электронных меток, прикрепленных или внедренных в объекты для идентификации и других целей. В данной статье рассматривается способ создания простого, самодельного RFID устройства управления доступом с использованием Arduino UNO и RFID считывателя (EM-18) для управления светодиодом и реле. Электрическая схема и скетч Arduino (исходный код) представлены ниже.

При включении считыватель передает радиочастотный сигнал. Когда RFID метка помещается возле считывателя, она получает радиочастотный сигнал через антенну внутри метки. Принятый радиочастотный сигнал будет преобразовываться в электрическую энергию, которая достаточна для передачи данных от метки назад в RFID считыватель. Кроме того, считыватель будет передавать идентификатор метки во внешнее устройство по последовательному порту передачи данных. В настоящее время доступен широкий диапазон моделей считывателей. Наиболее распространенным и удобным в использовании является модуль EM-18. Данный модуль считывает RFID пассивные метки и отправляет идентификатор метки в микроконтроллер Arduino.

Считывание RFID идентификатор метки

Для начала загрузите простой программный код rfid1.ino в Arduino Uno, используя средство разработки IDE.

Теперь соберите схему, как показано ниже.

Откройте монитор Serial Monitor в Arduino IDE, удерживайте RFID метку очень близко к центральной части RFID считывателя, и зафиксируйте отображаемый идентификатор метки. Данный уникальный идентификатор понадобится в следующем скетче! (Наша метка имеет идентификатор 51005F46642C)

Управление доступом

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

Разберите существующее соединение и загрузите новый скетч rfid2.ino в микроконтроллер Arduino

Повторно соедините проводами аппаратные компоненты (с некоторыми модификациями) как показано на рисунке выше. Здесь вывод D12 микроконтроллера Arduino используется для управления стандартным 5-мм светодиодом. Вывод D13 используется для управления электромагнитным реле через управляющий транзистор. Каждый раз при совпадении метки на выводе D13 в течение 5 секунд появляется высокий управляющий сигнал. Реле может использоваться для управления внешней нагрузкой, например упором двери. Если значения метки не совпадают, тогда на выводе D13 остается низкий уровень сигнала, однако при этом на выводе D12 появляется высокий уровень для срабатывания светодиода аварии.

Технические характеристики

  • Напряжение питания: 3.3V
  • Потребляемый ток :13-26mA
  • Рабочая частота: 13.56MHz
  • Дальность считывания: до 6 см
  • Интерфейс: SPI
  • Скорость передачи: максимальная 10МБит/с
  • Размер: 40мм х 60мм

Микросхема MFRC522 поддерживает интерфейсы SPI, UART и I2C. Выбор интерфейса осуществляется установкой логических уровней на определенных выводах микросхемы. В Arduino принято использовать SPI.

RC-522

Назначение выводов интерфейса SPI:

  • SDA – выбор ведомого
  • SCK – сигнал синхронизации
  • MOSI – передача от master к slave
  • MISO – передача от slave к master
  • IRQ – вывод прерывания
  • GND – земля;
  • RST – вывод для сброса
  • Vcc –питание 3.3 В

Выводы модуля подключаются к цифровым пинам Arduino

На платах Arduino есть разъём ICSP, который можно использовать для работы с интерфейсом SPI.

RFID RC-522

2 Схема подключения RFID-RC522 к Arduino

Подключим модуль RFID-RC522 к Arduino по интерфейсу SPI по приведённой схеме.

Схема подключения RFID-RC522 к Arduino по интерфейсу SPI

Схема подключения RFID-RC522 к Arduino по интерфейсу SPI

Питание модуля обеспечивается напряжением от 2,5 до 3,3 В. Остальные выводы подключаем к Arduino так:

Пин RC522 Пин Arduino
RST D9
SDA (SS) D10
MOSI D11
MISO D12
SCK D13

Не забывайте также, что Arduino имеет специальный разъём ICSP для работы по интерфейсу SPI. Его распиновка также приведена на иллюстрации. Можно подключить выводы RST, SCK, MISO, MOSI и GND модуля RC522 к разъёму ICSP на Ардуино.

Шаг 3: Код.

Arduino Leonardo / Micro с чипом ATmega32u4 имеет встроенную USB-связь. Это позволяет Leonardo / Micro отображаться на подключенном компьютере в виде мыши или клавиатуры.

Мы используем базовую библиотеку keyboard.h, чтобы заставить arduino отправлять нажатия клавиш на подключенный компьютер.

Загрузите код отсюда.

Загрузите библиотеку MFRC522.h Arduino отсюда.

Загрузите библиотеку Keyboard.h Arduino здесь.

Работа кода очень проста.

  • UID вашей карты / метки RFID и пароль / PIN-код Windows хранятся в коде.
  • Когда правильная карта будет показана считывателю RFID, arduino отправит нажатия клавиш для блокировки окон и ваш пароль для одновременной разблокировки окон.
  • Если окна находятся в заблокированном состоянии, нажатия клавиш для их блокировки не будут иметь никакого эффекта, и команда разблокирует заблокированный компьютер.
  • Или, если окна уже разблокированы, команды заблокируют его. (Код разблокировки также поступает одновременно, но, поскольку между нажатиями клавиш блокировки и разблокировки имеется лишь небольшая задержка, Windows выполняет команду блокировки и не будет читать команду кода разблокировки, поступающую в это время.)

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

  • Подключите прототип к компьютеру.
  • Запустите Arduino IDE и откройте код, который я дал здесь.
  • На панели инструментов перейдите в Инструменты -> Доска и выберите Arduino Leonardo для Arduino Pro micro и Arduino Leonardo.
  • Проверьте, выбран ли COM-порт.
  • Загрузите код в Arduino.
  • Откройте последовательный монитор (Ctrl + Shift + M).
  • Сканирование вашей карты / метки.
  • Первая строка вывода, отображаемого на последовательном мониторе, — это UID вашей карты / метки. Запишите это значение.
  • Теперь вернитесь в редактор кода и измените значение строки card1 «к UID, который вы только что отметили (в моем коде вы можете найти его в строке 41).
  • Перейдите к последней части кода, и вы найдете строку, которая говорит: Keyboard.print ( «ПАРОЛЬ»); «(Строка № 80 в коде.). Измените это значение на код разблокировки Windows.
  • Теперь загрузите измененный код в Arduino.
  • Отсканируйте карту / метку, чтобы протестировать прототип.

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

Обзор модуля RC522, RFID

Модуль RFID RC522 основан на микросхеме MFRC522 от NXP. Поставляется с двумя метками, RFID-картой и брелком с объемом памяти 1 КБ.

Модуль RFID RC522 создает электромагнитное поля с частотой 13,56 МГц, которое используется для связи с RFID метками (стандартные метки ISO 14443A). Для взаимодействия с контроллерами, модуль использует 4-х контактный интерфейс SPI. Так же, модуль поддерживает протоколы связи I2C и UART.
Дополнительно, выведен контакт прерывания IRQ, которой позволяет опрашивать модуль только тога, когда приложили карту.

Назначение контактов:
VCC — Вывод питание модуля, от 2,5 до 3,3 вольт.
RST — Вывод сброса и отключения питания. При установки вывода в низкое состояние, модуль отключается.
GND — Вывод заземления.
IRQ — Вывод прерывания.
MISO / SCL / Tx — Вывод интерфейс SPI, I2S и UART включен.
MOSI (Master Out Slave In) — Вход SPI.
SCK — Вывод тактовых импульсов.
SDA / SS / Rx — Вывод интерфейс SPI, I2S и UART включен.

Напряжение питание модуля:
Рабочее напряжение модуля составляет от 2,5 до 3,3 В , но логические выводы могут работать от 5 В , поэтому мы можем напрямую подключать его к Arduino или любому 5 В логическому микроконтроллеру без использования какого-либо преобразователя логического уровня.

Шаг 7. Разработка приложения для Android

Я покажу вам, как разработать приложение Bluetooth на Aandroid с помощью приложения MIT App Inventor. Я использую App Inventor, потому что он не требует каких-либо навыков программирования и установки программного обеспечения. Вам нужна только учетная запись google. Перейдите по адресу http://ai2.appinventor.mit.edu/ и войдите в систему, используя учетную запись google.

Войдите в приложение Inventor с помощью gmail и выполните следующие действия.

I Принять условия Картинка 1
II Нажмите «take survey later», а затем «продолжить», чтобы закрыть экран заставки Картинка 2, 3
III Начните новый проект Картинка 4
IV Назовите проект «BluetoothControlDoorLock» (без пробелов) Картинка 5

Теперь вы находитесь в Дизайнере, где вы делаете «пользовательский интерфейс» вашего приложения (изображение 6). В окне конструктора вы найдете внешний вид вашего приложения и укажете, какие функции он должен иметь. Вы можете выбрать для пользовательского интерфейса кнопки, изображения, ярлыки, текстовые поля и функциональные возможности, такие как Text-to-Speech, Bluetooth, датчики и GPS.

Теперь, следуйте рисунку 7 и добавьте «List Picker» в программу просмотра. Переименуйте его в «Подключение к устройству Bluetooth» (рисунок 8). Добавьте одну метку, одно текстовое поле пароля и две кнопки, показанные на рисунке 10. Измените текстовые свойства компонентов как «Введите пароль», «Открыть дверь» и «Закрыть дверь» соответственно. Конечный пользовательский интерфейс должен выглядеть так, как показано на рисунке 11. Теперь добавьте клиент Bluetooth в программу просмотра. Это невидимый компонент, и он не имеет интерфейса. См. Изображение 12.

Переключитесь на редактор блоков

Пришло время сказать вашему приложению что делать! Нажмите «Блоки» (Blocks), чтобы перейти к редактору блоков (рис. 13). Подумайте о кнопках Designer и Blocks, таких как вкладки, — вы используете их для перемещения вперед и назад между двумя областями App Inventor. Редактор блоков — это программа, в которой вы программируете поведение своего приложения. Есть встроенный блок, который обрабатывает такие вещи, как математика, логика и текст. Ниже перечислены блоки, которые идут с каждым из компонентов вашего приложения. Чтобы заставить блоки для определенного компонента отображаться в редакторе блоков, сначала нужно добавить этот компонент в свое приложение через конструктор.

Давайте создадим блоки для List Picker. List Picker — это элемент пользовательского интерфейса при нажатии на него показывается список соответствующих элементов, здесь — это сопряженное устройство Bluetooth. Мы должны добавить два блока ListPicker.BeforePicking и ListPicker.AfterPicking (изображение 14). Законченные блоки показаны на рисунках 18 и 19.

Сделайте файл .apk

Наш дизайн завершен, теперь нам нужно собрать файл apk для нашего телефона Android. Нажмите, чтобы создать меню и выберите «Приложение (сохранить .apk на мой компьютер)». Подождите минуту. Файл apk загрузится в папку загрузки по умолчанию. Установите и используйте его.

Домашняя автоматизация

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

  • Пароль от домашнего Wi-Fi. Клеим тег на роутер и записываем в него пароль с помощью приложения InstaWifi. Пригодится не только тем, кто часто принимает гостей, но и любителям экспериментов с прошивками.
  • Запуск автосинхронизации или приложения для обмена данными с ПК. Тег можно приклеить на ноутбук или системник и прописать в него запуск приложения для синхронизации данных (AirDroid, WiFi ADB и другие).
  • Включение точки доступа. Опять же клеим тег на ноутбук, далее устанавливаем приложение Trigger. В нем добавляем новое задание, в качестве триггера выбираем NFC, пропускаем выбор ограничений, в качестве действия выбираем «Беспроводные и локальные сети -> Wifi-зона», пропускаем следующий экран (добавление переключателя) и на последнем экране подносим к NFC-тегу.
  • Включение режима полета на ночь. Клеим метку куда-нибудь ближе к кровати. Запускаем Trigger, новое задание -> триггер: NFC -> действие: «Экспериментальные -> Режим в самолете». Как вариант, вместо включения режима самолета можно настроить отключение передачи данных и Wi-Fi, добавив соответствующие действия в задание.

RFID модуль PN532: как я домофонный ключ скопировал

Понадобился тут еще один ключ для домофона. Казалось бы, чего проще: идем в правление, покупаем ключик… а ключиков-то и нету! И не будет. Ну может будет, но потом. Возможно, следующим летом. Но это не точно.

Ладно, мы люди не гордые, идем в ближайший «Дом быта», просим сделать копию. Там берут, прикладывают к своей шайтан-машине и возвращают. Правда без копии. Потому что копию сделать нельзя. Потому что безопасность должна быть безопасной и ключик зашифрован. Не унываем, идем в другую мастерскую… в третью… после пятой приходит понимание, что мы в жопе и спасение утопающих — дело рук самих утопающих. Беглое сканирование показало, что мы имеем дело с ключом стандарта Mifare Classic.

Disclaimer

Товарищ майор, данная статья носит исключительно образовательный характер и не преследует целей по взлому транспортных карт и иных устройств, основанных на Mifare Classic. Автор не поддерживает и осуждает любые киберпреступления.

1. Железо

Из оборудования понадобится купить только RFID-модуль PN532 (я использовал версию V3). На июнь 2021 года стоит платка менее 500 рублей. Остальное скорее всего у вас есть: компьютер и usb-uart преобразователь. В качестве последнего я использовал многострадальный Pinboard с ft232 на борту, вы можете использовать любой другой, но народ жаловался, что модуль на cp2102 почему-то работает не всегда корректно.

Работать будем по UART — и тут есть подвох. На некоторых платах RX- и TX-выводы не обозначены. В таком случае, поступаем просто: смотрим на 4-пиновый разъем: после пина VCC идет TXD (на месте SDA), а следом — RXD. Подключаемся к компу, запускаем свой любимый терминал, выставляем скорость 115200, открываем нужный порт и посылаем следующую HEX-последовательность:

Модуль должен ответить:

На скриншоте ниже представлен вывод на примере программы Terminal v1.9b.

Если все прошло успешно, отключаемся, идем дальше. Если нет — проверяем питание модуля, пробуем менять местами RX и TX, перезагружаем компьютер, переустанавливаем винду, протираем экран тряпочкой… Ну и так далее, пока не заработает.

2. Ставим Linux на виртуалку

КЭП, но если у вас уже линух, то эту часть можно пропустить. С остальными продолжим. Ставить будем Ubuntu Server 16.04. Описывать установку на VirtualBox я не буду — там все стандартно:

  • качаем торрент-файл по официальной ссылке
  • скачиваем образ
  • создаем виртуалку (гигов 10 диска, гига 4 ОЗУ), в сетевых настройках виртуалки выставляем «сетевой мост»
  • подцепляем образ в качестве загрузочного диска
  • запускаем виртуалку
  • выбираем английский язык
  • нажимаем Install Ubuntu

Еще раз введите пароль. Теперь, когда вы под рутом, установите ssh (если не сделали этого на этапе установки системы):

Далее узнайте свой ip:

Если вы не забыли указать сетевой мост в начальных настройках, и ваш роутер поддерживает DHCP, то будет назначен ip из подсети вашего роутера.

Сворачиваем окно виртуалки, открываем putty, вбиваем адрес, который только что узнали, попадаем в консоль:

Все, теперь удобно копипастить команды из браузера на сервер 🙂

Сворачиваем виртуалку, идем в putty, дальше работаем уже там.

3. Внутри Linux

Итак, мы сделали проброс usb-порта из винды в убунту. Если же у вас изначально Linux, то просто вытащите-воткните usb-uart переходник. Набираем в консоли команду:

В моем случае обнаружилось два rs232 порта: ttyUSB0 и ttyUSB1. Пробуем подключиться. Отключаем UART-переходник от PN532, на переходнике закорачиваем RX и TX, в консоли заходим под рута:

Вместо «/dev/ttyUSB0» должен быть ваш порт. Экран очистится и на нем будет отображаться только курсор. Пробуем набирать любой текст с клавиатуры.

Если текст набирается успешно, значит выбран правильный rs232-интерфейс и он работает корректно. Если же терминал молчит, то попробуйте выбрать другой порт (например, /dev/ttyUSB1). Должно заработать — ведь как-то у вы прошли тест из первой главы? Получилось? Отлично, продолжаем.

Нажмите Ctrl+A, затем Shift + K, затем Y — так вы выйдете из терминала.

Небольшое (но полезное) дополнение, которое можно пропустить
Наберите (находясь все так же под рутом) команду:

Выходим из putty и подключаемся заново. Теперь набираем

Далее нажмите Enter и войдите под рутом:

Выполните, например, команду:

Получите список файлов и директорий:

Теперь закройте окно putty, подключитесь заново и наберите:

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

Теперь вы можете перемещаться выше-ниже по предыдущему экрану (курсором, либо PgUP/PgDown). Для выхода из этого режима нажмите еще два раза Esc. Можно и просто записать все что выводилось на экран в файл (разумеется, в пределах размера буфера, который указывается через переменную defscrollback в файле /etc/screenrc):

Все это очень удобно, если у вас прервалась putty-сессия во время какого-то процесса (например, ребутнулся роутер во время подбора ключей) и нужно подключиться в состояние «как было».

4. Установка nfc-tools

Подключаем обратно PN532. Дальше все довольно стандартно. Находясь под рутом, набираем:

Создаем файл конфигурации:

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

  • log_level — уровень логирования (если не работает, увеличьте до 3, будет более подробный вывод команды)
  • device.connstring — тут после двоеточия указываем путь до порта, полученный на этапе dmesg.

Если ошибок не появилось (скрин ниже), ключик успешно считан, можно продолжать.

Иногда модуль может подвисать (причем подвисание сохраняется и при перезагрузке):

В этом случае отключаем проброс USB (убираем галку).

Далее выполняем тест через терминал из п.1 статьи и делаем проброс USB обратно. Должно заработать.

5. Установка подборщика криптоключей mfoc

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

Для теста приложите болванку из комплекта PN532 к модулю и выполните:

Чтение ключа должно пройти без ошибок, а на выходе получится дамп. Теперь попробуйте приложить свой домофонный ключ и запустить заново. Программа будет долго пытаться использовать стандартные криптоключи, но в итоге у нее ничего не получится и она выдаст ошибку: «No sector encrypted with the default key has been found, exiting..»

Значит, придется где-то взять хотя бы один криптоключ. Начинаем ломать!

6. Darkside Attack: установка mfcuk

Mfcuk является реализацией атаки Mifare Classic «Dark Side» Key Recovery, основанной на статье Nicolas T. Courtois The dark side of security by obscurity, которая использует уязвимости ГПСЧ и ответов об ошибках Mifare карт. Для нас это лишь означает, что эта тулза может выломать криптоключ опорного (как правило, нулевого) сектора, а остальные ключи уже можно будет получить через подборщик mfoc. Ликбез окончен, начинаем установку!

Сначала все стандартно:

А дальше нужно применить небольшой патч. Дело в том, что согласно вот этой статье, существуют «weaker» ключи, а в mfcuk не существует логики по данному типу. В результате тулза крутится сутками, а результата нет. Впрочем, статья 2016 года и может уже починили (последний коммит mfcuk от 2018 года), но мы рисковать не будем и сделаем проще: скопируем пропатченные исходники с гитхаба автора статьи:

И если вы подумали, что это все, то нет. Автор упомянутой статьи, поправив один баг, наплодил другой. Хорошо, что есть комменты 🙂 Цитата: «В авторском фиксе файлов crapto1.c/mfcuk.c есть нюанс — там sleepmillis заменено на sleep. На win* системах оно работает корректно, а в unix-like — нет, в 1000 раз медленнее». Ну что же, исправим это досадное недоразумение:

Должно выдать ОК. Теперь можно и компилировать:

Далее прикладываем домофонный ключик к плате (желательно приклеить скотчем, чтобы не сполз), переходим в папку src и набираем команду:

Через некоторое время (примерно через час) начинают вылезать первые результаты. На строчки ERROR не обращайте внимание. Ваша задача — дождаться, пока пара ключей maxhii/maxloi начнут от вывода к выводу повторяться. Однако, не спешите прерывать сканирование. На скрине выше показан пример ложного срабатывания. Далее можно видеть пример правильного ключа, обычно он начинает появляться на maxhi/maxlo равным 5-6.

В конце скриншота можно наблюдать ошибку: «Segmentation fault (core dumped)». Причину ошибки выяснить так и не удалось, а возникать она может уже на первых итерациях, когда ключ еще не найден, тогда приходится начинать все заново. После того, как я заменил металлическую подставку под платой на картонную коробку, ошибка стала вылетать гораздо реже. Возможно, возникали какие-то наводки и программе сносило крышу.

Если вы прождали пару часов, а программа так ничего и не выводит, то шансов уже меньше, некоторые ключи просто не поддаются копированию. Например, у меня получилось натравить эту тулзу только на оригинальный ключик. На копию не было никакой реакции. Как вариант, оставьте сканироваться на ночь. Не помогло? Попробуйте собрать оригинальный mfcuk, может он у вас сработает.

Получилось? Теперь нужно собрать криптоключик. Берем последние 6 цифр maxhii (включая начальные нули, если они есть), аналогично 6 цифр maxloi, в нашем случае получается: be33fef612ae. Теперь можно начинать подбор остальных ключей.

7. И снова mfoc

Заходим в папку /dist и запускаем переборщик с нашим криптоключом (сразу укажем количество попыток -P 20000).

Если вместо скрина ниже будет ошибка «No sector encrypted. », то это означает, что вы поспешили остановить работу mfcuk и следует повторить последние действия из предыдущей главы.

На скрине можно видеть, что для нулевого сектора ключ подошел и mfoc начинает подбор остальных ключей. Это может занять довольно продолжительное время. Причем, иногда один ключ подбирается несколько часов (особенно, первый), а иногда за час может прилететь два-три ключа. У меня на подбор оставшихся 15 ключей ушло где-то часов 8. Кроме того, эта тулза так же может выдавать ошибку «Segmentation fault (core dumped)». После чего ее нужно запускать снова, указывая последовательно все найденные ключи:

Лучше всего это автоматизировать. Я для этого заюзал два простейших скрипта. Скрипт перебора: mloop.sh

И скрипт добавления найденных ключей в файл key.log, а также оповещения в телеграм: mtest.sh

Вместо «bot12345678:ANYTOKEN» следует вставить токен своего телеграм-бота, а вместо «-123456654321» — ID чата, куда будет отправляться сообщение.

Эти скрипты следует создать в папке /dist/mfoc/src/. В той же папке нужно создать файл key.log, куда прописать найденные ключи (как минимум, один) в следующем формате

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

Вывод mfoc можно мониторить командой:

Этот лог затирается после каждого найденного ключа. В результате вам будет периодически капать сообщение:

Кроме того, автоматом будет пополняться файл key.log, а так же в консоль будут выводиться сообщения:

Так что найденные ключи не потеряются, даже если у вас нет телеграм бота. Когда будет найден 16-й ключ, работу скриптов следует прекратить:

Проверьте, что скрипты больше не выполняются:

Если по какой-то причине они еще висят, то их следует убить командой kill. Теперь можете попробовать сделать дамп:

В результате должно получиться следующее:

И вот у вас на руках дамп dump.mfd, который вы можете теперь при наличии ключей заливать куда угодно и использовать. Так что же, победа?! Как бы не так…

8. Заливка дампа и несколько последних рывков

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

Запускаем само копирование:

Успешно! Теперь идем к домофону, дрожащей рукой прикладываем ключик и… Облом! Домофон даже не пискнул. В чем же дело?

Возвращаемся обратно, прикладываем этот ключ к PN532, делаем отдельный дамп:

Теперь сравниваем два дампа:

А вот и косяк! Первый (нулевой) сектор ключа оказался не перезаписан! А он чуть ли не самый главный, ведь там хранится ID, который вносится в память домофона. Пробуем записать еще раз. Форматируем китовый ключ:

Теперь запишем дамп, но с ключом -W, который указывает, что нужно писать в нулевой сектор тоже.

Так что же делать? Где взять подходящий ключ? Самый простой вариант — купить ключ Mifare Zero, стоит рублей 30-40 и у него нулевой сектор можно записать сколько угодно раз. Что же, пробуем:

Теперь бежим и… хотя нет, мы теперь умные, сначала сравниваем дампы:

Успешно! Ни одного выпавшего байта, для верности сделаем даже сравнение md5-сумм:

Идеальное совпадение с оригинальным ключом. Идем теперь к домофону, прикладываем наш новый ключ и… слышим в ответ презрительное молчание. Да в чем теперь-то дело?! Ключи ведь идентичны!

Успокоившись, мы узнаем, что хотя содержимое ключей и совпадает, почти все современные домофоны научились фильтровать Mifare Zero. На смену им пришли One-Time Programmable (OTP) ключи, у которых нулевой сектор можно записать только один раз, но они гораздо лучше маскируются под оригинал. Большинство домофонов (в том числе и мой) спокойно проглатывают MF OTP-2.0, но для более привередливых существуют MF OTP-3.0. Стоят они обычно раза в полтора дороже, но они работают!

Покупаем такой ключик, делаем дамп, записываем…

Уже без особого энтузиазма идем к домофону и… Бинго. Оно заработало! =)

Статья, на которую опирался в этом нелегком пути:

Во вложении пропатченные mfcuk файлы — на случай недоступности (не забудьте заменить sleep на sleepmillis, как описано в статье).
Так же добавил архивы с оригинальными nfc-tools, mfcuk, mfoc — на случай, если их на гите забанят.

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector