Да, это ужасно избитая тема.
Наверное, каждый второй человек, начавший изучать микроконтроллеры, делал универсальный ключ домофона «таблетка».
В Интернете есть много статей на эту тему и готовых решений.
Однако интерес к этому не перестает угасать даже с массовым переходом на RFID. Это неудивительно, ведь многие хотят собрать устройство, которое не только выполняет очень интересную задачу, но и всегда носит с собой.
Тем более, что сделать это не так уж и сложно.
В этом посте мне бы хотелось собрать в одном месте всю необходимую информацию для тех, кто хочет сделать такой ключ.
Сейчас я попробую рассказать о том, что такое контактные домофонные ключи, как они работают, как их имитировать, какие есть подводные камни, а также рассказать о своей реализации такого устройства и о том, как можно собрать подобное самостоятельно.
Внимание! Этот ключ не позволит вам проникнуть куда-либо нелегально.
Это устройство предназначено только для ношения одного ключа вместо нескольких.
Хотя ничто не мешает записать в него универсальные коды открытия домофонов.
Виды домофонных ключей «таблетки»
На самом деле аналогичные клавиши в корпусе MicroCAN бывают разных типов, хотя внешне они практически одинаковы.
Единственное, что у них общего, это то, что ключ имеет два контакта - землю и данные, при этом используется паразитное питание, т.е.
ключ питается напрямую от линии передачи данных.
Для открытия двери используется серийный номер, указанный на заводе.
То есть не ключ программируется на открытие домофона, а в память домофона заносится список ключей, которыми можно его открыть.
Давайте посмотрим на них поближе.
iButton
Самый популярный тип домофонных ключей – iButton, а именно DS1990A от Dallas, работающий по протоколу 1-Wire. Протокол очень хитрый, он предполагает двустороннее взаимодействие — на ключ можно подавать различные команды, на которые он реагирует по-разному.Серийный номер имеет размер шесть байт, что дает 2 8*6 = 281474976710656 различных комбинаций и подразумевает, что все выдаваемые ключи должны быть уникальными.
Если вам посчастливилось иметь оригинальный iButton, то на нем следует выгравировать лазером это число в шестнадцатеричном виде:
То есть теоретически чужой ключ можно подделать, если просто записать где-нибудь эти цифры или сфотографировать их!
Для взаимодействия с iButton достаточно подключить его к микроконтроллеру и подключить линию передачи данных к питанию (2,8-5 вольт) через резистор:
Скорее всего для многих это все уже старо как мир, но все же вкратце расскажу принцип работы 1-Wire. Обмен данными происходит путем поочередного прижатия линии к земле, при этом информация кодируется длительностью таких сигналов.
Происходит это примерно так:
- Перезагрузить - мастер прижимает линию к земле не менее чем на 480 микросекунд, это свидетельствует о начале передачи данных.
- Присутствие — через некоторое время ключ отзывается импульсом около 120 микросекунд, что подтверждает его присутствие на линии.
- Команда — мастер отправляет команду из восьми бит, где логическая единица — 1-15 микросекунд, а ноль — 60-120.
Обычно это 33 часа…» ЧИТАТЬ ПЗУ ", считывание серийного номера, после чего мастер считывает 64 бита (1 байт - тип устройства, 6 байт - сам номер, 1 байт - CRC).
Чтение каждого бита инициализируется мастером, для этого он отправляет импульс 1-15 мкс.
Если после.
Если линия прижата к земле сбоку клавиши на 60-120 мкс, то считывается ноль, иначе - единица.
Как видите, прочитать ключ довольно легко.
Имитировать ключ гораздо сложнее, тем более что во многих домофонах используются разные приемы.
Вот основные подводные камни:
- Вы всегда должны реагировать на перезагрузить , даже если оно отправляется во время передачи данных.
Импульс длительностью более 480 микросекунд говорит о том, что нужно начинать все сначала.
- С его точки зрения, момент применения ключа тоже имеет значение.
перезагрузить , потому что до этого еды не было.
Поэтому теоретически домофон может не отправлять перезагрузить , и должен периодически отвечать сигналом присутствие по вашей собственной инициативе.
- Клавиши также могут реагировать на другие команды: 0Fh как альтернатива 33h, ПРОПУСТИТЬ ПЗУ (КЧ), МАТЧ ROM (55ч) и самое хитрое, о чем я расскажу отдельно ниже, это ПОИСК ПЗУ (Ф0х).
Некоторые домофоны могут отправлять различные комбинации таких команд, чтобы убедиться, что ключ настоящий.
- Бывает и обратная ситуация – домофон посылает команду, на которую ключ не должен реагировать.
Дело в том, что некоторые программируемые клавиши все равно на них реагируют, и поэтому происходит еще одна проверка.
Необходимо полностью игнорировать все, что следует за этими командами, пока оно не будет отправлено.
перезагрузить .
- Для подсчета времени лучше использовать асинхронный таймер в микроконтроллере, т.к.
счет микросекунд. Однако установка кварца будет ненужной.
Дело в том, что теоретически можно соединить множество ключей параллельно и получить список всех серийных номеров.
В действительности для iButton это не используется, потому что к домофону всегда привязан один ключ.
Однако некоторые домофоны отправляют эту команду, ожидая найти один серийный номер.
Алгоритм очень интересный.
Каждое из устройств на шине одновременно дважды отправляет бит своего серийного номера (т. е.
ведущее устройство должно прочитать два бита).
Сначала обычным способом, а потом перевернутым.
Что происходит в конце? Если серийный номер устройства содержит единицу, то отправляется «10».
Если ноль, то «01».
И всё хорошо, пока на всех устройствах одинаковые биты.
А если нет. Я выше писал, что при чтении наличие длинного сигнала - 0, а отсутствие - 1, т.е.
0 является доминирующим.
Таким образом, при возникновении конфликтов считываются два нуля.
После получения «10», «01» или «00» мастер должен отправить только что прочитанный бит в линию.
В случае «00» он таким образом выбирает, с какой группой устройств работать дальше.
В результате после N итераций получается двоичное дерево из N серийных номеров.
Ответить на такую команду несколько сложнее, чем на обычную.
ЧИТАТЬ ПЗУ .
Необходимо отправить каждый бит дважды — обычный и инвертированный, а затем проверить, соответствует ли ему полученный от мастера ответ, а если не совпадает, то игнорировать дальнейшие команды.
Цифрал
Ключ «Цифровой DC-2000А» является отечественной разработкой.С ними гораздо проще взаимодействовать, потому что.
они очень глупы - не принимают никаких команд. Просто подайте питание на ключ, и он сразу же начнет бесконечно отправлять код, меняя свое сопротивление.
Если подать на него 5 вольт, подключив через резистор сопротивлением 1 кОм, то на осциллографе можно увидеть примерно следующее:
Ключ меняет свое сопротивление примерно в пределах от 800 Ом до 400 Ом, если не ошибаюсь, а значит и ток потребления.
Можно сказать, что сигнал аналоговый, и это немного усложняет все с аппаратной точки зрения.
Хотя иногда это можно упростить.
Например, ключ можно прочитать, просто подключив его к микрофонному входу компьютера и записав аудиофайл.
И да, домофон потом можно будет открыть самым обычным MP3-плеером.
Но нас же интересуют более цивилизованные методы, верно? Кодировка немного странная.
Ключ циклически отправляет девять полубайтов (четыре бита), изменяя свое сопротивление.
Если он остается низким в течение примерно 50 микросекунд, то это логический ноль, а если он остается низким в течение 100 микросекунд, это единица.
Но данные кодируются не логическими нулями и единицами, а положением единиц среди нулей! То есть при отправке кода ключ может выдать только одну из четырех комбинаций: «1000», «0100», «0010» и «0001».
Однако в качестве стартовой последовательности также используется комбинация «0111».
В результате данные из ключа могут выглядеть примерно так: «0111 1000 0100 0010 0001 1000 0100 0010 0001», где «0111» указывает на начало.
Контрольной суммы нет — код просто считывается несколько раз для уверенности.
Всего существует восемь последовательностей, в которых возможны четыре комбинации.
Нетрудно подсчитать, что это дает нам 65536 ключевых вариантов.
Не так уж и много, они явно повторяются часто.
Теоретически, если в подъезде 50 квартир, каждой из которых дано по три ключа, выбрать одну из них можно, пройдя всего 436 комбинаций.
Но я этого не сделал.
Как лучше всего прочитать ключи Cyfral? Как я уже сказал, уровни аналоговые.
Есть два варианта: аналого-цифровой преобразователь и компаратор.
Последнее мне кажется более надежным.
Все работает нормально, если к одному из входов компаратора подключить линию передачи данных, подтянутую до Vdd резистором 650 Ом, а ко второму — ровно половину Vdd, для чего можно использовать делитель напряжения, сделанный из двух одинаковых резисторов.
После этого на выходе компаратора можно уверенно воспринимать высокое и низкое сопротивление ключа.
Как имитировать такой ключ? На первый взгляд кажется, что нужно еще и сопротивление менять, но результаты показали, что домофонам такая точность не нужна — можно безопасно замыкать линию на землю вместо низкого сопротивления и полностью отпускать ее, когда нужно высокое сопротивление.
Метаком
Еще одна отечественная разработка – домофоны «Метаком» и ключи К1233КТ2. Как и Cyfral, он просто бесконечно посылает код, меняя его сопротивление/ток потребления.
К счастью, официальная документация доступна в Интернете:
Это все, что вам нужно знать для работы с этим ключом.
Он отправляет четыре байта данных, но в каждом из них один бит тратится на проверку четности.
Всего полезных битов 28, и 2 28 = 268435456 комбинаций.
Увы, мне не удалось найти такого ключа для экспериментов.
Однако в Интернете легко найти универсальный код, открывающий 99% домофонов Метаком.
Один из них находится рядом со мной.
Я написал программу, которая отправляет этот код, основываясь только на технической документации.
Соседний вход открылся с первой попытки.
Похоже, для этого домофона точное сопротивление тоже не столь важно.
На этом этапе я оставил Метаком в покое и решил, что читать их ключи не так уж и необходимо.
Универсальные коды ключей
На самом деле универсальные ключи для домофонов – это скорее миф.Застройщики почти никогда не создают для себя какой-то специальный код для всех дверей, исключение составляет лишь «Визит».
Но существует легенда, которая гласит, что многие домофоны, прочитав код ключа, сравнивают его со всеми кодами, которые записаны в ячейках памяти.
Однако в ячейках, куда еще ничего не записано, стоят FF или нули.
Таким образом, домофон можно открыть, отправив ключ только из нулей или только из ФФок.
Звучит как полная чушь.
Каким программистом надо быть, чтобы сделать такой баг? Но.
это действительно часто срабатывает. Да, обычно это исправляется в последних прошивках, но многие домофоны остаются неизменными годами.
Невероятно, но факт. Любые другие коды ключей, выдаваемые как универсальные, обычно являются всего лишь служебными ключами для сотрудников почты, ЖКХ или самой домофонной компании и работают только в определенных населенных пунктах.
Создание мультиклавиши
Перейдем к практике! Да, я пытался совместить в одном устройстве и имитацию ключей, и их чтение (кроме Метакома), и синхронизацию с компьютером по USB. Вот схема того, что произошло (кликабельно):Компоненты и их назначение:
- IC1 — микроконтроллер ATMEGA8/ATMEGA8A/ATMEGA8L;
- U1 — USB-контроллер FT232RL, необходимый для подключения устройства к компьютеру;
- КОН1 — разъем miniUSB;
- БТ1 - аккумуляторы, обеспечивающие напряжение 3-5 вольт;
- Д1 И Д2 - диоды (желательно Шоттки), изолирующие питание аккумулятора от питания USB;
- П1 — «планшетный» iButton, используемый для подключения к домофонам;
- П2 — контакты считывателя ключей, используемые для подключения к ключам;
- Р1 — резистор, подтягивающий 1-проводную линию к VCC;
- Р2 — токопонижающий резистор для управления транзистором Q2;
- Р3 - резистор, который дополнительно подтягивает линию к VCC для чтения ключей Cyfral;
- Р4 — токоснижающий резистор, используемый для открытия Q1 и определения подключения к USB;
- Р5 — притягивает базу Q1 к земле, чтобы замкнуть ее при отсутствии подключения к USB;
- Р6 — токоснижающий резистор для светодиодов, достаточно одного, потому что они при этом не сгорают;
- Р7 И Р8 — делитель напряжения на один из входов компаратора для считывания ключей Cyfral;
- 1 квартал — транзистор для обнаружения подключения к USB;
- 2 квартал — транзистор для включения земли на ридере и эмуляторе, чтобы не разрядить аккумуляторы случайным замыканием контактов в кармане;
- С1 , С2 И С3 — конденсаторы для фильтрации питания;
- SW1 — единственная кнопка для управления устройством;
- светодиоды — семь светодиодов в форме восьмерки для отображения номера ключа.
Это было до того, как я купил 3D-принтер, когда я проектировал устройства для корпусов, а не корпуса для устройств.
В мои руки попал очень красивый экземпляр в виде брелка и с кнопкой.
Просто идеально, осталось сделать отверстия для USB и светодиодов.
Увы, я до сих пор не могу найти в продаже точно такой же корпус.
В итоге получилось примерно так:
Батарейки под платой.
Их, кстати, мне хватило на год, пока я случайно не пошла купаться и не забыла вынуть ключи.
Управление осуществляется всего одной кнопкой.
При первом нажатии на нее устройство включается.
Коротким нажатием кнопки вы выбираете клавишу, номер которой отображается светодиодами.
Когда нужный ключ выбран, просто прикрепите контакты к считывателю домофона.
Длительное нажатие на кнопку переводит устройство в режим чтения ключей, при этом мигает средний светодиод. В этот момент нужно приложить ключ к контактам считывателя ключей (поэтому у меня винт вкручен снизу).
Если считывание прошло успешно, отобразится номер, под которым ключ был сохранен в памяти.
При подключении по USB устройство отображается как виртуальный COM-порт. Для удобства работы был написан клиент под Windows:
Он позволяет считывать ключи с устройства и автоматически заносить их в базу данных.
Конечно, ключи можно записать.
Исходники прошивки здесь: github.com/ClusterM/ibutton
Исходники клиента здесь: github.com/ClusterM/ibutton_client
Заключение
Очень удобно иметь ключи от дома, родственников, работы и подъездов друзей в одном устройстве.Особенно это актуально для тех, кто не установил в своей квартире домофон.
Но создание мультикея оказалось не столько полезным, сколько интересным.
Это отличная практика для изучения микроконтроллеров.
Да, именно с этого я и начал.
Кроме того, каждый новый неоткрывшийся вход вызывал бурю интереса.
Бегать по городу и решать логические задачи, чтобы открыть какую-нибудь дверь, — это как видеоигра в реальной жизни! Чертовски интересно.
Не хватает только драк с гопниками и бабульками у подъездов в виде боссов ;) Теги: #Сделай сам или Сделай сам #avr #atmega #домофон #key #atmega8 #iButton #metakom #cyfral #multikey
-
Обзор Блога №31. Блог Чемпионатов Мира
19 Oct, 24 -
Научитесь Говорить
19 Oct, 24 -
Рейтинг Bigworld
19 Oct, 24 -
Сервисы Web 2.0 Для Выбора Домена
19 Oct, 24 -
История X-Com: Enemy Unknown (1993)
19 Oct, 24