В прошлый раз я привёл начальные сведения о картах Mifare.
В этой статье рассмотрим некоторые практические моменты использования карт и брелков Mifare в домофонах.
Для работы возьмём карты Mifare Classic 1K, считыватель CP-Z2MF и контроллер Z5R.
Рассмотрим сначала самый простой вариант работы. Запись карт или брелков в простом режиме ( без защиты ключами ).
Немного о том как читать и писать карты Mifare.
Можно, конечно, купить сразу ACR-122U с программным обеспечением за 8500 руб. Но для первых шагов достаточно считывателя CR522 и платки Arduino Nano.
То есть всё это обойдётся не более чем в 1000 руб. Кстати, к считывателю прилагается карта и брелок, что тоже хорошо для начала работы.
В сети можно легко найти скетчи для работы. Это библиотеки RFID и MFRC522. Там есть примеры чтения и записи карт Mifare 1K.
Напомню структуру памяти карты Mifare 1K..
Память состоит из 16 секторов по 4 блока в секторе. Каждый блок содержит 16 байт.
В каждом .секторе первые три блока служат для записи информации, а последний блок содержит ключи защиты ( А и В ) и биты доступа.
Этот блок называется трейлером ( прицепом ).
Ключи защиты А и В имеют длину в 6 байт. Ключ А находится в начале блока ( 0 - 5 байт ), ключ В находится в конце блока ( 10 - 15 байт ).
Ключ А не читается. Ключ В может читаться ( или не читаться ) при определённой установке битов доступа.
Биты доступа определяют варианты работы с этим сектором ( а точнее, определяют работу с каждым блоком, включая и сам блок "трейлера" ).
То есть можно, например, установить чтение по ключу А, чтение по ключу В, чтение/запись по ключу В и т. д. ...... Главное тут не переусердствовать.
Так как можно случайно заблокировать блок или весь сектор !!!
Сейчас рассмотрим самый простой случай. Когда ключи доступа А и В заводские ( т. е. равны FF FF FF FF FF FFh ).
Отдельно рассмотрим сектор 0 и блок 0. Этот блок содержит уникальный номер карты ( 4 байта ( байты 0 - 3 блока 0 ) + байт контрольной суммы
этого номера BCC ( байт 4 ) + байт SAK ( байт 5 - идентификатор ) + два байта ATQA ( байты 6 и 7 - тип карты ).
Остальные байты блока 0 содержат служебную информацию.
Этот блок пишется на заводе и больше не переписывается.
Кстати, самое интересное - если сектор 0 защищён ключом доступа, то командой READ этот блок 0 не читается.
Нам интересны первые 4 байта - это номер карты ( UID ). Он всегда читается.
Например, при чтении 0 блока получаем: 25 79 3E D5 03 08 04 00 85 00 00 00 00 00 00 00. ( это если не включена защита блока 0 )
Если защита включена, то читается половина блока: 25 79 3E D5 ( UID ) + 03 ( BCC ) + 08 ( SAK ) + 04 00 ( ATQA ). То есть можно прочитать половину блока 0.
Обращаю внимание, что первым слева у UID идёт младший байт номера.
То есть ( на самом деле ): UID карты = D5 3E 79 25. BCC = 03 SAK = 08 ATQA = 04 00
( байты UID тут уже перевёрнуты для нормального чтения )
В результате экспериментов выяснилось, что считыватель CP-Z2MF при эмуляции создаёт код ключа DALLAS на основе 3-х старших байт
UID карты ( т. е. D5 3E 79 ). То есть младший байт UID отрезается.
В контроллер же пишется пишется 5.5 байт кода ключа DALLAS. То есть добавляются ещё нули.
В памяти контроллера тогда увидим такой код: 00 00 D5 3E 79.
Если номер содержит 7 байт ( например, "Ультралайт" ), то обрезается младший и старший байт от UID и пишется в код DALLAS только 5 байт UID.
Кстати, есть отличия и в представлении номера у считывателей с защитой и без...........
Теперь о самом главном - как создать копию ключа. Для этого нужна будет заготовка Mifare Zero ( Mifare OTP или OTP2.0 ) в которой можно перезаписывать 0-й блок.
Mifare OTP( OTP2.0 ) - тоже имеют перезаписываемый блок 0, но его можно записать только один раз !!!
Опять же в библиотеке MFRC522 есть пример для записи UID в эту заготовку. Считывается номер ( UID ) исходного ключа и записывается в нулевой блок
заготовки Mifare Zero ( OTP, OTP2/0 ). Правда этот пример копирует только сам UID + ВСС ( т. е. не весь блок 0 ).
Как выяснилось, для нормального чтения карты, нужно копировать не только UID.
То есть самое правильное - это копировать всю читаемую часть блока 0 : UID + BCC + SAK + ATQA.
Алгоритм создания копии ( если исходный ключ был без защиты ) получается такой:
1. Читаем блок 0 ( сектор 0 ) исходной карты. Если ключи не изменены, то блок 0 карты свободно читается с ключом А = FF FF FF FF FF FFh.
2. Применяем программу для копирования всего блока 0 в заготовку Mifare Zero.
3. Проверяем запись. Читаем Mifare Zero.
Остаётся проверить откроет такая копия замок или нет............
Но всё это просто пока не встретится карта с закрытыми секторами. Вот тут уже так просто копию не сделаешь !!!
Нужно сначала узнать ключи доступа к секторам.............
Тут есть разные способы:
1. Например, поиск ключей доступа к секторам. Это требует наличия считывателя карт ( ACR122U или дубликатора ТМД-5S ), компьютера, программ для взлома и времени.....
2. Второй способ - это попробовать перехватить информацию о ключе доступа в процессе общения карты со считывателем,
расшифровать её ( специальной программой ) и в результате получить ключ доступа.
Сейчас для этого есть такие устройства как Проксмарк, Хамелеон или SMKey. Но этот способ требует выезда к конкретному домофону и
даёт только ключ от того сектора, с которым происходит общение в данном домофоне. Чтобы получить все остальные ключи всё равно придётся прибегнуть
к первому способу, подставив в программу для взлома первый перехваченный ключ ......
Впрочем, сейчас со взломом ключей всё не так однозначно.
Дело в том, что уязвимость, которая была в старых картах Mifare 1K убрали, да и заготовки OTP2.0 тоже её не имеют...............
Отдельно хочу сказать немного о брелках Mifare от фирмы Визит.
Как всегда, эта фирма пошла своим путём и взяла за основу "Ультралайты".
Эти брелки представляют собой самую простую ветку Mifare и вообще не имеют защиты.
Память у них составляет 16 страниц по 4 байта на страницу.
Номер ( UID ) имеет длину 7 байт и находится он в страницах 0 и 1 и один байт на странице 2.
Копию таких брелков можно создать на основе заготовки Mifare_UL, ( UL2.0 или UL3.0 ).
При этом сначала создаётся копия страниц с UID ( 0 - 2 ), а потом уже пишутся оставшиеся страницы 4 - 15.
Последними записываются страница OTP ( страница 3 ) и биты блокировки ( последние 2 байта на странице 2) ! ! !
В начальном состоянии байты блокировки и страница OTP содержат нули.
Помните что OTP и байты блокировки устанавливаются ТОЛЬКО ОДИН РАЗ ! ! !
После того, как появились клоны ключей на заготовках Mifare_UL, в Визитах стали применять видоизменённые
брелки Ультралайт с большей памятью ( 20 страниц вместо 16 ).
Заготовки Mifare_UL уже не могли полноценно дублировать эти новые ключи !
Поэтому были выпущены новые заготовки UL 2.0 и UL3.0.
Они имеют большую память ( 24 страницы ) и возможность блокирования номера ( UID ) от перезаписи.
Правда заготовки UL2.0 имели кое-какие отличия от нормальных ключей и новые фильтры домофонов Визит стали и их отсеивать.
Поэтому для домофонов Визит с новыми фильтрами лучше использовать заготовку Mifare UL3.0 !
Время идёт вперёд, фильтры совершенствуются и вот опять новая заготовка UL-X !!!
Продолжение следует............
При перепечатке этой статьи ссылка на мой сайт обязательна !!!
.
|