Содержание

Порядок работы: запускаем, подключаем ключ, чей код желаем выяснить, и приобретенное значение хардкодим в массив key_to_write. Убираем помеченный коментарием return. Опять запускаем и подключаем болванку, она должна прошиться новым ключом. Естественно, что для записи уже известного кода (скажем, мастер-ключа), 1-ый шаг делать не требуется.
Делаем универсальный ключ для домофона
Заголовок вышел очень звучным — и ключ не таковой и универсальный, и домофон поддастся не хоть какой. Ну да хорошо.
Пойдет речь о домофонах, работающих с 1-wire пилюлями DS1990, вот такими:

В вебе можно отыскать множество материалов о том, как читать с них информацию. Но эти таблетки бывают не только лишь read-only. Человеку свойственно терять ключи, и сегодня ларёк с услугами по клонированию DS1990 можно найти в любом подземном переходе. Для записи они используют болванки, совместимые с оригинальными ключами, но имеющие дополнительные команды. Сейчас мы научимся их программировать.
Зачем это нужно? Если отбросить заведомо нехорошие варианты, то самое простое — это перепрограммировать скопившиеся и ставшие ненужными клонированные таблетки от старого домофона, замененного на новый, от подъезда арендованной квартиры, где больше не живете, от работы, где больше не работаете, и т.п.

Сразу оговорюсь, что в описании я опущу некоторые моменты, очевидные для большинства из числа тех, кто «в теме», но, возможно, не позволящие простому забредшему сюда из поисковика человеку повторить процедуру. Это сделано нарочно. Я хоть и за открытость информации, и считаю, что сведения обо всех уязвимостях должна доводиться до общественности как можно быстрее, но всё же не хочу, чтобы любой желающий мог беспроблемно заходить ко мне в подъезд.
Немного теории.
Как известно, DS1990 характеризуется, в общем случае, одним параметром — собственным идентификационным номером. Он состоит из 8 байт и нанесен на поверхность таблетки. И он же выдаётся в ответ на запрос по 1-wire. По сути один из этих байт — это идентификатор типа устройства, ещё один — контрольная сумма, но для нас это всё не принципиально. В памяти домофона прописаны все известные ему ключи, изменять это множество может только компания, домофоном управляющая. Но кроме ключей, явно записанных в память, домофон иногда реагирует на так называемые мастер-ключи, единые для домофонов этого производителя, этой серии, этого установщика. Коды мастер-ключей стараются держать в секрете, но иногда они утекают. За пять минут гугления можно найти порядка 20 мастер-ключей от различных домофонов. У меня стоит «Визит», поэтому выбор пал на ключ 01:BE:40:11:5A:36:00:E1.
Болванки, на которые клонируются ключи, бывают разных типов. У нас в городе самые распространенные — это TM2004. По описанию они поддерживают финализацию, после которой теряют возможность перезаписи и функционируют как самые обычные DS1990. Но по каким-то причинам умельцы, делающие копии, финализацию выполняют не всегда. Возможно так как основная масса программаторов на рынке куплена давно и не имеет такой функции, возможно так как для финализации требуется повышенное (9В) напряжение. Не знаю. Но факт остаётся фактом, из 4-х ключей, на которых я экспериментировал, финализирован был только один. Остальные легко позволяли менять свой код на какой душе угодно.
Практика.

Собирать программатор будем на Arduino Uno, которая для подобных целей макетирования и сборки одноразовых поделок подходит идеально. Схема простейшая, 1-Wire на то и 1-Wire.
Время сборки устройства на бредборде не превышает пяти минут
Код скетча. Сам алгоритм записи взят тут — domofon-master2009.narod.ru/publ/rabota_s_kljuchom_tm_2004/1-1-0-5
Там, правда, написано, что можно записывать все 8 байт подряд, но у меня так не заработало. Поэтому каждый байт пишется отдельно, через свою команду 0x3C.
#include #define pin 10 byte key_to_write[] = < 0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1 >; OneWire ds(pin); // pin 10 is 1-Wire interface pin now void setup(void) < Serial.begin(9600); >void loop(void)