|
Автор: Долин Сергей
(dlinyj@real.xakep.ru
www.openpress.ru)
(журнал Хакер, №093, стр.020-022,сентябрь 2006)
Эмулятор ключей от домофона
Ты потерял ключи от домофона и не можешь сделать
дубликат? Или хочешь ходить в гости к подруге, но железный
домофон, висящий на ее двери, тебя не пропускает? Какая
досада! Казалось бы, в такой безвыходной ситуации можно лишь
пожать плечами. Ан нет, «Хакер» в очередной раз решает
проблемы за тебя и предлагает смастерить универсальный ключ,
способный покорить любой домофон.
Как это работает?
Темные люди думают, что в таблетках от домофона находится
обычный магнит, который при контакте с замком открывает
дверь. Это самое смешное и нелепое заблуждение, которое я
когда-либо слышал. Ведь на самом деле таблетка представляет
собой ПЗУ с жестко зашитым ключом. Эта память называется
Touch Memory марки DS1990A. Таблетка «общается» с домофоном
по шине One-wire (однопроводной интерфейс). Данная шина
разработана фирмой Dallas, она позволяет общаться двум и
более устройствам всего по одному проводу. Если устройство
пассивное (как в нашем случае), то по шине передается также
и питание по единственному проводнику. Кроме памяти, в ключе
(таблетке) находится конденсатор на 60 пикофарад, который
обеспечивает кратковременное питание на момент ответа.
Ведущее устройство должно постоянно генерировать сигнал
единицы для зарядки этого конденсатора, чтобы ПЗУ в таблетке
продолжало питаться. Отбросив все умные термины, можно
сказать просто: все, что необходимо для работы устройства,
передается только по одному проводу. К слову сказать, шина
1-Wire оказалась столь удачной, что на ней организованы
промышленные сети, в том числе и в нашей стране.
Внутреннее устройство таблетки |
Схема дампа ключа |
Импульс сброса и импульс
инициализации |
Организация шины One-wire
Тебе наверняка стало интересно, как таблетка взаимодействует
с «базой», являясь пассивным устройством? Следует отметить,
что парадом правит только мастер, то есть таблетка не
способна генерировать какие-либо импульсы. Ее единственная
возможность – удерживать шину в нуле (замыкать шину на землю
через внутренний транзистор). Упрощенная схема ключа и
домофона показана на картинках.
Если взглянуть на схему, то нетрудно заметить, что по
умолчанию у домофона установлено напряжение +5 вольт, а-ля
логическая единица. Для передачи логического нуля мастер
через транзистор замыкает шину на землю, а для передачи
единицы просто размыкает. Это сделано для того, чтобы
обеспечить питание ведомого устройства.
Схема мастера |
Схема ключа |
Протокол взаимодействия
Мастер в ожидании присоединения таблетки постоянно, с
некоторой периодичностью генерирует импульс RESET (сброс).
Принимая этот сигнал, ключ дожидается его окончания и дает
импульс PRESENCE (присутствие) определенной длительности.
Если сигнал PRESENCE оказывается слишком длинным, то домофон
понимает, что это короткое замыкание, и тупо отмалчивается.
В противном случае мастер-девайс выжидает некоторое время и
выдает команду на чтение ПЗУ, обычно это код семейства, в
нашем случае 33H. Обрати внимание, как сделана передача нуля
и единицы. В любом случае импульс «роняется» на землю, но
если передается единица, то он быстро восстанавливается (это
занимает около 1 микросекунды). Если же должен быть ноль, то
импульс некоторое время «висит» на земле, затем возвращается
опять в единицу. Это нужно для того, чтобы пассивное
устройство постоянно пополняло энергию конденсатора, и на
нем было питания. Далее домофон выдерживает некоторое время
и начинает генерировать импульсы приема информации, всего 64
импульса (то есть принимает 64 бита инфы). Ключ лишь должен
правильно сопоставить длительности. Если таблетка хочет
передать ноль, то она удерживает шину некоторое время в
нуле, если же нет, то просто молчит. Все остальное за нее
выполняет домофон.
Содержимое ключа DS1990A.
Прежде чем мы перейдем к изготовлению эмулятора, нам
придется рассмотреть содержимое памяти таблетки. DS1990A
представляет собой восьми байтовое ПЗУ с информацией,
записанной лазером.
В младшем байте содержится код семейства. Для DS1990A он
всегда будет равен 01H. В шести последующих байтах
содержится серийный номер ключа (та самая информация,
позволяющая открыть дверь). Последний байт называется CRC —
это контроль четности, обеспечивающий подлинность переданных
данных. Он вычисляется из семи предыдущих байт по весьма
сложному алгоритму.
Физическое устройства
ключа.
Наверное, все вышесказанное отбило всякое желание
заниматься эмулятором ключа. Ведь считать информацию с ключа
тебе может показаться весьма сложным делом. Оказывается,
нет! Производители Dallas позаботились о нас, фрикерах, и
всю необходимую для нас информацию разместили
непосредственно на ключе, причем в шестнадцатеричной форме!
Она выгравирована на корпусе таблетки, и ее вполне можно
прочитать, а потом в дальнейшем зашить в наш замечательный
эмулятор.
Из всей груды этой информации нас интересует следующее:
CC (CRC) - это байт контроля четности 7-й байт в
прошивке
SSSSSSSSSSSS - двенадцать ниблов (полбайта) серийного
номера, то есть самого ключа в HEX-кодах.
FF (код семейства) - в нашем случае равен 01H,
нулевой байт нашего ключа.
Получается, что мы можем просто написать программу, забить
в нее ключ, скопировав дамп вручную, и в итоге получим
готовый эмулятор. Достаточно просто взять у недруга ключик и
переписать то, что на нем выгравировано. Что, я, в общем-то,
с успехом и сделал.
Ваяем эмулятор
Первый неработающий эмулятор
на базе АТ 89С51 |
Вот и дошли мы до самого вкусного - эмулятора. Сначала я
нашел на каком-то сайте готовый эмуль, зашил его в свой
АТ89С51 — и он не заработал (что не удивительно).
Но это неспортивно юзать чужие прошивки и отлавливать
специально оставленные баги в коде. Поэтому я начал делать
свои эмуляторы и писать под них программы. Я попробовал
сделать эмуль на 6-ти различных микроконтроллерах разных
архитектур, принадлежащих двум семействам AVR и i8051
производства Atmel. Поначалу мной ставились наполеоновские
задачи по изготовлению универсального эмулятора с
возможностью подборки ключа, но потом я оставил эту затею в
силу ее геморройности и бессмысленности. Пусть ей займутся
другие люди, кого заинтересует данная статья.
Принцип действия
эмулятора.
Мы достаточно подробно рассмотрели принцип работы домофона,
и, соответственно, нам не составит большой проблемы описать
алгоритм программы эмулятора DS1990A. Смотрим на рисунок
примера чтения ключа и думаем, что надо сделать. А сделать
надо следующее. Висящая в воздухе нога микроконтроллера
будет считаться логической единицей. После подачи питания на
котроллер мы должны ждать момента, пока наша ножка не упадет
на землю, а-ля в ноль. Когда мы услышали ноль, радуемся,
ждем некоторое время и переводим порт из режима чтения в
режим записи. Затем опять роняем шину в ноль и держим ее
некоторое время: генерим импульс PRESENCE (длительности
импульсов смотри в мануале на диске). Дальше снова переводим
шину в режим чтения и ждем, что же нам скажет домофон. А он
нам поведает команду чтения, состоящую из восьми бит.
Декодировать ее не будем, так как в 99,999% случаев он нам
выдаст запрос 33H на получения дампа. Мы же просто
отсчитываем 8 импульсов от мастера и не паримся. Затем
начинается самое сложное и интересное: надо быстро смотреть,
что нам говорит домофон, и отвечать ему. Наша задача побитно
выдать серийный номер, состоящий из восьми байт, о которых я
говорил выше. Это выполняется следующим образом: загружается
байт в какой-нибудь свободный регистр и сдвигается вправо.
Далее смотрим бит переноса. И как только домофон роняет шину
в ноль, я просто отмалчиваюсь на этот импульс (если,
конечно, у меня флаг переноса установлен на единицу). Если
же у меня во флаге переноса находится ноль, то после того,
как домофон уронит шину на землю, я перевожу порт
микроконтроллера в режим вывода и принудительно удерживаю
шину в нуле некоторое время. Потом отпускаю и перевожу порт
в режим чтения. По длительности импульса в нуле мастер
понимает, что ему было передано. Если ключ совпадает, то
домофон откроет нам дверь.
Практика
Настало время проверить все вышесказанное на практике. Для
отладки, чтобы не бегать к домофону, я достал плату,
читающую домофонные ключи. Устройство называется WatchDog.
WatchDog для проверки
эмуляторов |
На самом деле это универсальный комбайн, но из всего
изобилия функций мне необходима только возможность чтения
ключей. Данная платка сбрасывает дампы ключиков в USB-порт,
и любая программа, работающая с СОМ-портом (виртуальный
СОМ-порт) может получить ключ. Подобный софт можно найти на
диске.
После небольшого геморроя и войны с отладчиком получился
код. Вот пример кода вывода данных домофону на AT89C2051.
;============================================================================
; Выдача в линию серийника
; in: R0- адрес, где лежит серийник с типом таблетки и
CRC8
; USES: A,B,R0,R1,R2
;============================================================================
DEMUL_SendSer:
mov R2,#8
SS3: mov ACC,@R0
mov R1,#8
SS2: JB TouchFuck,$ ;ожидаем, когда шину уронят в ноль 1->0
RRC A ;C:=A.0; shift A;
mov TouchFuck,C ;TouchFuck:=C;
MOV B,#9
DJNZ B,$ ;Delay 20 us
setb TouchFuck
JNB TouchFuck,$ ;цикл пока
0
DJNZ R1,SS2
inc R0
DJNZ R2,SS3
ret
;============================================================================
Заключение
В результате я получил множество эмуляторов. Есть 100%
рабочие эмули, правда, некоторые из них нужно довести до
ума.
Уже работающий эму-
лятор на AT89C2051 |
Миниатюрный эмуль на
ATtiny15 |
Как видишь, домофоные ключи устроены не так просто, как
кажется. Однако эмулировать их доступно каждому, кто владеет
программированием и паяльником. На диске ты найдешь для этих
целей всю необходимую информацию. Удачи в опытах хацкер!
INFO
Автором статьи была изучена 8051 архитектура экстерном, так
как большинство кодов было написано под нее. Он зверски
замучил микроконтроллеры AT89C51, АТ89С2051 (100% рабочий
эмулятор вышел, остальные дорабатываются), ATmega8535,
ATmega8, ATtiny2313 и ATtiny15 - самый миниатюрный эмулятор.
Я готов посодействовать в создании эмулятора, прошивке
микроконтроллера и подбору нужных комплектующих. Пиши на
мыло – договоримся.
DS1990A – не единственный девайс компании Dallas. Существуют
перезаписываемые ПЗУ, на которых можно носить информацию c
поддержкой шифрования.
Себестоимость эмулятора, не считая затраченных трудов,
меньше 70-80 рублей. При желании можно даже уложиться в 30
рублей, если делать эмулятор, например, на базе ATtiny12.
DANGER
Учти, что незаконное проникновение в помещение карается
законом. Автор статьи и редакция не несут никакой
ответственности за использование данной информации в
незаконных целях.
WWW
Если тебя заинтересовала данная статья, то ты можешь следить
за новостями в сообществе по радиоэлектронике: http://community.livejournal.com/ru_radio_electr.
CD(прилагается к журналу Хакер,
номер #093 )
На компакт-диске ты найдешь рабочую прошивку для
микроконтроллера АТ89С2051, пример поиска CRC на Паскале,
AVR, i8051, код эмулятора под Х51 архитектуру, разведенную
плату в P-CADe для эмулятора на ATtiny15, а также программу
для работы с COM-портом и огромный DataSheet на всю эту
ботву. |
|