воскресенье, 29 декабря 2013 г.

Ключ Цифрал DC-2000. Разбор.

Ключи DC-2000, аналогично TM-2002, передают свой код путем изменения потребляемого тока.  Внутри у них, как мне недавно подсказали, микросхема K1233KT1. Передача идет кодовыми словами по 4 бита. В описании толком не указано как же считываются кодовые слова, от младшего бита к старшему или наоборот, из-за этого возникло несколько представлений ключей в ПЗУ. Любители копирования ключей уже придумали их называть С1-С4, только описание что как кодируется выкладывать не торопятся. Так что пишу что сам нашел.
1) Блок вызова CCD-2094. Процессор в этом домофоне не поддерживает никаких ключей кроме далласов, поэтому ключи считывает специальная плата-адаптер.

Она читает и ключи формата даллас и DC-2000, а после эмулирует ключ даллас на выходе.
Разработчики платы решили что кодовые слова передаются от младшего бита к старшему, поэтому таблицу из описания K1233KT1 нужно перевернуть вот так:
Значение слова
Код
0111
00
1011
01
1101
10
1110
11
1000
Стартовое слово

Полученный код передается в двух младших байтах, в третьем всегда 01, в остальных нули.
Пример:
0001 0111 0111 1101 0111 1110 1011 1011 1101 - двоичный код
start 00   00   10   00   11   01   01   10  = 08 D6
Код на выходе платы           = FA 00 00 00 01 08 D6 01
Что пишется в ПЗУ тут разницы нет, так как ключи даллас передаются без изменений.

2)Контроллеры ТС/ТС-01 - используются совместно с CCD-2094M,  М-10, М-20. Тут уже кодовые слова читаются от старшего бита к младшему, так что биты в таблице будут стоять так как и передаются. Зато  полубайты теперь идут от младшего к старшему, и байты в ПЗУ тоже.
Значение слова
Код
1110
00
1101
01
1011
10
0111
11
0001
Стартовое слово

Ключи в памяти занимают по 4 байта, из которых первых два - код ключа DC-2000. В 3-ем байте ПЗУ всегда 80 для DC-2000. В 4-ом байте далласовская  CRC  вычисленная из первых 3-х байт. Для наглядности вот кусок дампа одного из контроллеров:



Пример:
0001 1101 1110 1011 1110 0111 1110 1110 1101 - двоичный код
start 01   00 | 10   00 | 11   00 | 00   01  = 12 34
      L    H    L    H    L    H    L    H
Код в ПЗУ                                    = 34 12 80 B1
Код даллас                   =  F3 00 00 00 00 12 34 01
 
0001 1011 1011 0111 1011 1110 0111 1101 0111 - двоичный код
start 10   10 | 11   10 | 00   11 | 01   11  = AB CD
      L    H    L    H    L    H    L    H
Код в ПЗУ                                    = CD AB 80 02
Код даллас                   =  AB 00 00 00 80 AB CD 01


3)В CCD-40 видимо есть баг, ключи сохраняются аналогично контроллерам TC/TC-01, но первый байт ключа всегда равен нулю.

0001 1011 1011 0111 1011 1110 0111 1101 0111 - двоичный код
start 10   10 | 11   10 | 00   11 | 01   11  = AB CD
      L    H    L    H    L    H    L    H
Код в ПЗУ                                    = CD 0B 80 EC
Код даллас                   =  AB 00 00 00 80 0B CD 01

4)Возможно тут должен быть CCD-2094.1, но у меня также ни одного под рукой нет, к тому же там сейчас каждый месяц новая прошивка, кто знает как они извращаются над ключами.

В общем, во всём этом байтолюбстве без бутылки не разберешься, зато интересно.

воскресенье, 22 декабря 2013 г.

Метаком. Делаем универсальный ключ.

    Совсем заглох уже мой бложик, пришло время его немного оживить. Сегодня я расскажу о домофонных ключах, о том как они хранятся в домофоне, и что из этого получается.
    Метакомовские ключи являются дешевой альтернативой ключам стандарта Dallas iButton и сделаны на основе микросхемы К1233КТ2. Микросхема с помощью изменения тока потребления передает индивидуальный код ключа. Код состоит из 4-х байт с битом контроля четности, который дополняет бит до четного количества единиц, таким образом всего может быть 228=268 435 456 комбинаций.

    В MK-20/МК-99/МК-2003 ключи хранятся тупо как массив по 4 байта, никаких дополнительных контрольных сумм или количества ключей нигде не записано. Домофон определяет окончание массива ключей только по началу незаписанной области ПЗУ,  как обычно она заполнена 0хFF. Когда код ключа считан, домофон начинает последовательно считывать из ПЗУ четверки байт  и сравнивать с кодом ключа. Когда считывается последняя четверка FF FF FF FF надо бы домофону остановиться и признать ключ неправильным, однако с другой стороны это корректный код который может быть в одном из ключей, вот и получается баг - ключ с кодом FF FF FF FF  будет открывать любой домофон.
    Для проверки можно собрать вот такую несложную схемку:
 
Код прошивки на Си и HEX файл (F_CPU = 1,2МГц) прилагаются.
Схему можно легко поместить в корпус любой "таблетки".