Делаем универсальный RFID-ключ для домофонов

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



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

1. Что это такое? Что умеет?


Устройство, которое я собирал в далёком 2017 году, есть ни что иное, как спуфер домофонного RFID-ключа, работающего на частоте 125 кГц. Слово «спуфер» в данном случае означает, что устройство, по сути ключом не являясь, выдаёт себя за него, и домофоны реагируют на это соответствующе.

Прибор умеет транслировать любые коды ключей, которые записаны в его память. Некоторые коды можно найти в Сети по запросу «ключи-вездеходы», их я вставил в прошивку в первую очередь. Но при некотором навыке и желании можно вставить в прошивку коды вообще всех RFID-ключей, которыми вы пользуетесь (если они работают на частоте 125 кГц), и, таким образом, иметь возможность заменить одним прибором связку брелков.

Я знаю, что на просторе Сети гуляет большое количество схем подобных устройств. Моей целью было создать наипростейший вариант из всех доступных. Удалось или нет — судите сами.

2. Какими навыками нужно обладать, чтобы повторить данный проект?


Прежде всего, навыки работы с Arduino: иметь установленную среду разработки, уметь заливать в плату прошивки, устанавливать библиотеки, драйверы, вот это вот всё. Далее. Имеется в проекте место, где без пайки — ну вот никак. Потому — нужны прямые руки и паяльник с расходниками. Уметь читать электрические принципиальные схемы (или их подобия). Ну и навыки программирования на C++, дабы иметь возможность кастомизации прибора. Но это уже опционально.

3. Какие запчасти нужны и как их монтировать?


Не откладывая в долгий ящик - вот схема устройства:
Простите за то, что «не по ГОСТ» — я в drawio рисую, ибо единственная бесплатная и удобная альтернатива Visio, а я сейчас только лицензионный софт использую. Но, полагаю, всё и так предельно понятно.


Как видно, BOM для базовой версии выглядит примерно так:

  1. Arduino Nano (или любая другая Дуня, которая под рукой есть);
  2. RFID-ключ формата EM4100 (вместо катушки индуктивности);
  3. n-p-n транзистор (любой какой отыщется, частоты тут не очень высокие);
  4. резистор на 10К;
  5. конденсатор на 560 пФ (лучше SMD, можно прямо в корпус от ключа припаять);
  6. литий-ионный аккумулятор — по вкусу;
  7. три сенсорных кнопки;
  8. OLED-дисплей с I2C интерфейсом;
  9. модуль зарядки для liIon;
  10. повышающий DC-DC преобразователь с выходом 5 В.

Схема питания может быть любой, лишь бы хватило Arduino чтобы стартовать. Устройства ввода/вывода — аналогично: прошивка легко может быть адаптирована под те кнопки/дисплеи, что есть в наличии (ссылка на гитхаб — чуть ниже). Текущая версия прошивки написана под OLED-дисплей и сенсорные кнопки (взяты были из соображений «бездребезговости»).

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



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



Она представляет собой катушку и микросхему памяти с двумя контактными площадками по бокам. Выводы катушки припаяны как раз к этим площадкам. Всё это залито тонким слоем эластичного термополимера (по виду и свойствам похожего на застывший клей B7000). Чтобы добыть катушку, я поступил следующим образом. Взяв канцелярский нож, я аккуратно продавил лезвием текстолит между площадками и микросхемой. Микросхему отделил от катушки и выкинул. Затем паяльником я аккуратно (чтобы не отпаять тонкие проводки катушки) сжёг термополимер над контактными площадками, сделав возможным дальнейшую прозвонку.



Прежде чем паять, следует измерить сопротивление катушки, убедившись, что она не в обрыве. Если всё в порядке, то собирать лучше так: сперва припаять SMD-конденсатор к контактным площадкам (он должен аккуратно поместиться между ними), затем — ножки транзистора и под конец — резистор к базе. Всё это можно аккуратно смонтировать в корпус ключа. Провода «земли» и базы транзистора припаивать в последнюю очередь.



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

4. Прошивка, тест и наладка


Как и обещал, ссылка на репозиторий проекта. Файлы прошивки лежат в папке My_125_kHz_spoofer_v.03.

После сборки и заливки прошивки прибор готов к использованию. Чтобы убедиться в его работоспособности, совсем не обязательно искать домофон — можно обойтись китайским модулем для чтения RFID-ключей, который называется RDM6300 и ещё одной платой Arduino (хотя кому что проще). Прошивку для модуля RDM6300, выдающую транслируемый код ключа в том же формате, в каком он внесён в прошивку спуфера, я также положил в репозиторий проекта. Схема подключения ридера — там же.

Порядок тестирования с помощью ридера RDM6300:

  1. Убедиться, что ридер работает, поднеся к антенне любой из имеющихся в наличии ключей на 125 кГц (данные будут выводиться в COM-порт);
  2. Выбрать в меню спуфера интересующий код ключа;
  3. Поднести антенну к ридеру. Если ридер прочёл тот же ключ, что указан в прошивке — всё получилось! Else — проверяем схему, ищем, где ошибка, устраняем её и начинаем с пункта 1.

5. Что в прошивке можно менять, а что — лучше не трогать


Поскольку лепилась прошивка на основе вот этого, не вполне понятного для меня кода, то жизненно-необходимые функции, которые менять нельзя вот прям совсем, я вынес в отдельную вкладку functions.ino. Остальная часть программы служит исключительно для предоставления пользователю комфортной возможности вызвать функцию EmulateCard (ну, и нескольких строчек кода перед ней).

Свои ключи можно добавлять в массив uint64_t universalID[], расположенный на 75 строке кода. Поскольку я не «задефайнил» общее количество ключей в памяти устройства, а некоторые функции завязаны на эту константу, при добавлении своего ключа следует менять также пределы, в которых находится переменная keyNumber, отвечающая за выбор ключа. Ну и не забывать свой ключ в меню добавлять. В общем, всё сыровато, но при желании, повторюсь, разобраться не трудно.

6. Что в приборе можно было бы доработать


  1. Добавить поддержку ключей iButton (хотя бы самых распространённых от Dallas).
  2. Добавить эмуляцию ключей, работающих на частоте 13,5 МГц (как я понял, либо через ношение перезаписываемой заготовки и модуль RC522, либо технически-сложно, через реальную эмуляцию).
  3. Добавить в прибор ридеры iButton, RDM6300 и RC522, чтобы сделать прибор ещё более универсальным.

У кого что получится — пишите о результатах. Сам я к разработке этой игрушки в ближайшее время возвращаться не собираюсь)

7. История создания


Была на дворе осень 2017 года. Будучи студентом второго курса магистратуры, я томился неразрешёнными вопросами самоопределения. Проще говоря, маялся бездельем и искал, чем бы заняться. В итоге решил довести до конца свои старые инженерные проекты в ущерб посещению университета.

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

Днём попасть в подъезд любой многоэтажки труда не составляет никакого — социнженерия из серии «Здравствуйте, соцопрос о качестве работы управляющей компании для название_местной_газеты» отлично работает, да и вообще, в основном жильцы не против, чтобы кто-то заходил в подъезд вместе с ними. Ночью — другое дело. А я любил вылазить на крыши либо на закате, либо ночью… Назрела проблема, которую я и решил вышеописанным способом.

Как я помню, информация о подобных устройствах нашлась не сразу. Гуглёжка по ключевикам «взломщик домофонов» не давала почти ничего. Адекватное стало находиться, когда я чуть-чуть разобрался в технологии RFID, и стал задавать уже более осмысленные вопросы, типа «RFID emulator», «RFID multykey», «RFID spoofer».

В итоге получилось отыскать две приличные англоязычные статьи по теме. В одной автор описывал, как на основе Arduino делался довольно замороченный с аппаратной точки зрения ключик, а во второй — всё то же самое, но без исходников, зато с очень простой аппаратной частью. Справедливо рассудив, что раз и та, и другая схема соединяются с антенной одним пином Arduino, я решил скрестить простое аппаратное решение и открытые исходники. Удалось, пусть и не с первого раза).

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

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

Подробнее
Реклама

Комментарии 36

    0
    А не думали над тем, как можно увеличить мощность и дальность действия?
    p.s. а оно получается подряд шлёт id, а не один раз привязываясь к сигналу от ридера этого ключа?
      0
      Читал об этом. Это больше для ридеров актуально. Находил статью американскую о том, как дальнобойную читалку сделать, формата сумочки дамской. Но это уже подпадает под статью о негласном получении информации.

      А эта штука вчера и так удивила — ридер видел её уже в пяти сантиметрах от себя.
        0
        Ну например в авто поставить, чтобы не тянуться рукой в окно до ридера перед шлагбаумом во дворе дома. Чтоб с метра например добивало.
          0
          Я не настолько прошарен) Но, думаю, всё равно всё в передатчик упирается. И в размер антенны приёмника.
            0
            А легко. Я вот дома CB радиостанцию в AM с метровым штырем (STORM ST-08, SWR ~2) случайно включил на 10 ваттах. В аудио колонках подключенных к компьютеру все отлично слышно. Без искажений. C FM такого не проходит.

            Как вариант можно попробовать взять какой нибудь СВЧ ГУН и попробовать его раскачать с частотой 125кГц. И консервную банку как направленную антенну. ;-)
        0

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

          +1
          А здесь даже в поле попадать не надо, потому и дальнобойность выше)
        +4
        Была на дворе осень 2017 года… сидеть где-нибудь на крыше многоэтажки

        Где-то еще выходы на крышу не закрыты?

          +1
          В домах с хорошими видами их ломают-заваривают по нескольку раз в неделю.
            0
            Я в глуши живу, у нас много открытых крыш.
            0
            Вот бы еще с Факториалом разобраться… Может кто знает?
            Специально ездил в командировку проверять :D
              0
              А что на схеме Pin 2 делает?
              Подтягивает землю к земле?
                +1

                мне тож кажется, что на коллектор транзистора нужно подать 5 вольт

                  +1
                  Не нужно ничего подавать.
                  Приемник возбуждает магнитное поле на резонансной частоте контура LC. В обычном брелке так передается энергия для работы микрочипа внутри. Транзистор открываясь и закрываясь закорачивает контур, на что реагирует приемник принимая двоичный код.
                    +2
                    Нет, не нужно. Транзистор шунтирует колебательный контур. Судя по схеме — только положительные полуволны, но чтобы погасить колебания этого видимо хватает. Наш контур индуктивно связан с таким же контуром в ридере. Падает амплитуда колебаний в нашем контуре (сильно), падает амплитуда в контуре ридера (немного), ридер это чувствует. Ну а дальше — транзистор закрыт — условная «1», открыт — условный «0», для отвязки от постоянной составляющей там не чистые 0 и 1 шлются, а манчестерский код.
                    А, ну да, главного не упомянул — колебания в контуре возбуждает именно ридер, на частоте 125 кГц. В обычном брелке к этому контуру еще и выпрямитель подключен для питания самого чипа. Поэтому оно и выглядит как «странная незапитанная схема».
                      0
                      А можно ли контур как обычно запитать или специально генерировать колебания, закачивая энергию наоборот, модулированную нужным кодом?
                      Или например на sdr сэмулировать. Интересно, как должна выглядеть антенна на 125 кГц, чтоб на метр работать?
                        +3
                        Ну 125 кГц это не SDR, это же совсем низкая частота, ее можно выдавать почти любым ЦАП или ШИМом и усиливать усилителями, не особо отличающимися от звуковых. А для задачи посылать манчестер — и просто транзисторным ключом. Антенна всегда будет выглядеть именно так как на картах/брелках (чисто магнитная антенна, просто катушка). Нет, можно конечно и полуволновой вибратор построить (1.2 км длиной, вы стоите посередине :) ) — но не практично, кмк.
                        Над вопросом построения активного брелка я сам задумывался. Главный вопрос — как синхронизировать частоту и фазу излучателя с ридером. Без этого будут биения и приема нормального не будет, детектор там синхронный. Я думаю, если у ридера частота стабильная (от кварца), то можно сначала по сигналу с катушки поточнее замерить частоту ридера, а затем выплюнуть на этой же частоте в нее пакет. За счет его конечной длины (64 бита по 64 периода несущей = 4096 периодов) фаза сильно не уползет, сразу можно прикинуть требуемую точность — если фаза не должна уползти более чем на четверть за 4096 периодов (на целый период за 16000), то 1е6/16000 = 60 ppm. Лучше поточнее. Но поскольку нам эта стабильность нужна на доли секунды, думаю 50 ppm там вполне реальны. На практике, конечно, не пробовал. С активным питанием на метр должно хватить и обычной катушки из карточки, вопрос именно в синхронности, пока мы передаем — сигнал ридера мы не услышим.
                        Практически по теме 125кГц RFID я делал только простейший ридер на атмеге8. Совершенно дендрофекального вида, катушка из провода обычной сетевой витой пары, но вполне рабочий по чтению. Потом я застрял на командах записи в записываемый ключ, и забросил это дело. Но допускаю что ключ мне просто с али прислали незаписываемый.
                          0
                          Ну когда близко катушки там почти весь магнитный поток проходит, оно как большой трансформатор, а на расстоянии уже как антенна катушечка наверное плохо будет работать… Частоту и фазу подобрать не проблема вроде, если мы с расстояния в метр можем поймать эту частоту чем-нибудь…
                            +1
                            Подобрать не проблема, поймать своей же катушкой перед передачей. Проблема — удержать потом эту частоту и фазу в течение всей передачи. В обычных системах связи подстройка частоты и фазы — задача приемника. Здесь приемник свято уверен, что передача уже синхронная и ничего подстраивать не надо (для пассивных карт оно так и есть). Если у генератора питающего поля на ридере частота плавает сильно — задача неразрешима. Если общую нестабильность на наших 4096 периодах можно уложить в 20-30 ppm — то взлетит, других фундаментальных причин не работать я не вижу.
                            О, только что идея пришла: а ведь передача-то импульсная, 32 периода на каждом бите излучаем, 32 периода не излучаем — вот в эти пассивные 32 периода можно тоже подстраивать частоту и фазу. Тогда вообще должно быть все легко. Приедет с али китайский ридер — надо будет попробовать соорудить из ардуинки активную метку.
                              0

                              Да, про нестабильность передатчика не подумал…
                              А чем там нагрузить эту катушку, чтоб сигнал разумного размаха видеть?

                        0
                        По моему не так.
                        При 0 на базе транзистор превращается в диод и этот диод нагружает контур, в поле ридера появляется потребитель/нагрузка.
                        При + на базе транзистор открывается в обе стороны и замыкает контур, замкнутый контур со стороны выглядит как диамагнетик чуть чуть повышающий резонансную частоту контура ридера.
                          0
                          Уточню немного. Транзистор тут в диод никогда не превратится, т.к. Uкэ ни как не связан с Uбэ. Кроме как через h21э, с оговорками по току и частоте. Падение напряжения может стремиться к нулю, особенно если вместо биполярника будет какой-то копеечный MOSFET.

                          Но я понял, как оно работает. Преклоняюсь над мудростью разработчиков. 40 лет как «паяльник», но до такого бы не додумался.

                          Биполярный транзистор тут может открывается только при положительной полуволне. Назад он не умеет, это только дублировать pnp. Но это уже чушь, не надо ни кому, если и так хватает энергии.
                            0
                            Маломощные транзисторы почти(h21 конечно ниже) симметричны, при замыкании базы с эмиттером(0 на базе) и подаче отрицательного напряжения на коллектор транзистор откроется не полностью.
                            При подаче на базу + транзистор откроется «в обе стороны».
                      0
                      Собрана только с целью убедиться, что я никого не дезинформирую, и прошивка со схемой работают.

                      Пишет, должна работать. Какая-то магия получается)

                      0
                      А вы часом на припонтованном Marshal девайс не проверяли? А то интересный домофон с защитой от копирования ключей (правда весьма кривой, у меня всёже удалось ключ на две болванки скопировать, но пяток других эта зараза устойчиво распознавала и слала лесом), которая портит жизнь тем, что установщик хочет по 250р за доп. ключ.
                        0
                        Боже меня упаси лезть в проприетарщину всякую. Я об Элтисы убился, а Вы меня за такие вещи страшные спрашиваете))

                        Идея прибора была в том, чтобы эксплуатировать выявлять известные уязвимости, а не спермегаэмулятор сделать)) Может кто на основе этой игрушки и сделает подобное — но это не ко мне)
                          +3
                          «выявлять известные уязвимости»… чего ж их выявлять, если они известные? Эксплуатировать, батенька, эксплуатировать…
                          Чего уж *опой крутить — говорите как есть. А есть вот так: особо ни в радио, ни в крипто, ни в микроэлектронике не шарю и вникать глубоко не хочу… Сделал спуфер, пользуюсь, поделился добром с общественностью. Просто и понятно.
                            0
                            Ну, в словах о выявлении известных уязвимостей я противоречия не вижу особого — для кого-то — известные, для кого-то — нет. Жильцам может не влом будет напрячь свою управляющую компанию по поводу того, что, мол, в месяц за обслуживание домофонов платим столько-то, а зайти может любой желающий.

                            А так — перестраховываюсь, чем плохо?)
                        +1
                        Есть что то похожее на то что пилил топикстартер
                        flipperzero.one мультитул для пентестинга
                          0
                          Нельзя ли телефоном по NFC открывать домофоны?
                            0
                            Вроде как частоты другие. Мы с коллегой, помню, ставили эксперимент — NFC среагировал только на 13,5 МГц ключи.

                            Есть приложуха полезная, NFC-tools называется вроде. Рид, райт — в общем, что хочешь, то и делает.
                            0

                            Это наверное все же не спуфер, а эмулятор. По крайней мере, их так давно уже называют.
                            А для трнр, чтобы не стоять с ноутбуком у домофона, есть bluetooth-uart модули.

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

                              Да и на тот момент у меня блютусов не было, я тогда ещё был студент-нищеброд. Джаст фо фан с ноутом и компортом игрался. Ибо лица людей в такие моменты — бесценны)
                                0

                                Software serial вещь глючная, лучше использовать аппаратный UART. Причем ничего не мешает это делать даже на платах, где распаян конвертер USB-UART, например Arduino nano :)

                                  0
                                  Не мешает ничего кроме необходимости лепить джампер для отключения этого юарта при загрузке скетча. Головняк, короче, лишний аппаратный. Но так-то да, кому не влом — пожалуйста))
                              0
                              Есть интересный проект, столетней давности, как сделать эмулятор 125 кГц на AVR с паразитным питанием.

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

                              Самое читаемое