Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #93, СЕНТЯБРЬ 2006 г.

Ключ от всех дверей

Долин Сергей

Хакер, номер #093, стр. 093-020-2


Содержимое ключа DS1990A.

Прежде чем мы перейдем к изготовлению эмулятора, нам придется рассмотреть содержимое памяти таблетки. DS1990A представляет собой восьми байтовое ПЗУ с информацией, записанной лазером.

В младшем байте содержится код семейства. Для DS1990A он всегда будет равен 01H. В шести последующих байтах содержится серийный номер ключа (та самая информация, позволяющая открыть дверь). Последний байт называется CRC — это контроль четности, обеспечивающий подлинность переданных данных. Он вычисляется из семи предыдущих байт по весьма сложному алгоритму.

Физическое устройства ключа.

Наверное, все вышесказанное отбило всякое желание заниматься эмулятором ключа. Ведь считать информацию с ключа тебе может показаться весьма сложным делом. Оказывается, нет! Производители Dallas позаботились о нас, фрикерах, и всю необходимую для нас информацию разместили непосредственно на ключе, причем в шестнадцатеричной форме! Она выгравирована на корпусе таблетки, и ее вполне можно прочитать, а потом в дальнейшем зашить в наш замечательный эмулятор.

Из всей груды этой информации нас интересует следующее:

1. CC (CRC) - это байт контроля четности 7-й байт в прошивке

2. SSSSSSSSSSSS - двенадцать ниблов (полбайта) серийного номера, то есть самого ключа в HEX-кодах.

3. FF (код семейства) - в нашем случае равен 01H, нулевой байт нашего ключа.

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

Ваяем эмулятор

Вот и дошли мы до самого вкусного - эмулятора. Сначала я нашел на каком-то сайте готовый эмуль, зашил его в свой АТ89С51 — и он не заработал (что не удивительно). Но это неспортивно юзать чужие прошивки и отлавливать специально оставленные баги в коде. Поэтому я начал делать свои эмуляторы и писать под них программы. Я попробовал сделать эмуль на 6-ти различных микроконтроллерах разных архитектур, принадлежащих двум семействам AVR и i8051 производства Atmel. Поначалу мной ставились наполеоновские задачи по изготовлению универсального эмулятора с возможностью подборки ключа, но потом я оставил эту затею в силу ее геморройности и бессмысленности. Пусть ей займутся другие люди, кого заинтересует данная статья.

Принцип действия эмулятора.

Мы достаточно подробно рассмотрели принцип работы домофона, и, соответственно, нам не составит большой проблемы описать алгоритм программы эмулятора DS1990A. Смотрим на рисунок примера чтения ключа и думаем, что надо сделать. А сделать надо следующее. Висящая в воздухе нога микроконтроллера будет считаться логической единицей. После подачи питания на котроллер мы должны ждать момента, пока наша ножка не упадет на землю, а-ля в ноль. Когда мы услышали ноль, радуемся, ждем некоторое время и переводим порт из режима чтения в режим записи. Затем опять роняем шину в ноль и держим ее некоторое время: генерим импульс PRESENCE (длительности импульсов смотри в мануале на диске). Дальше снова переводим шину в режим чтения и ждем, что же нам скажет домофон. А он нам поведает команду чтения, состоящую из восьми бит. Декодировать ее не будем, так как в 99,999% случаев он нам выдаст запрос 33H на получения дампа. Мы же просто отсчитываем 8 импульсов от мастера и не паримся. Затем начинается самое сложное и интересное: надо быстро смотреть, что нам говорит домофон, и отвечать ему. Наша задача побитно выдать серийный номер, состоящий из восьми байт, о которых я говорил выше. Это выполняется следующим образом: загружается байт в какой-нибудь свободный регистр и сдвигается вправо. Далее смотрим бит переноса. И как только домофон роняет шину в ноль, я просто отмалчиваюсь на этот импульс (если, конечно, у меня флаг переноса установлен на единицу). Если же у меня во флаге переноса находится ноль, то после того, как домофон уронит шину на землю, я перевожу порт микроконтроллера в режим вывода и принудительно удерживаю шину в нуле некоторое время. Потом отпускаю и перевожу порт в режим чтения. По длительности импульса в нуле мастер понимает, что ему было передано. Если ключ совпадает, то домофон откроет нам дверь.

Назад на стр. 093-020-1  Содержание  Вперед на стр. 093-020-3