Одна из самых распространенных кодировок – встречается на форуме в таких изделиях как ИМИТАТОР от CodePerfect на железе Олега, МЕГА-АНАЛИЗАТОР от RUSSO_TURISTO, в прошивке Joker для железа Олега, в прошивках для ZX940.
В большинстве изделий представляет собой или случайный выброс шифрованной части (hop) (имитацию) сигнала или просто определение типа кодировки.
Вопрос – возможно ли воспроизвести сигнал открытия автоматике nice flor-s обычными средствами – т.е. без обращения к китайцам для распила проца чтобы узнать хитрый алгоритм?
Посмотрев различные ветки форума было выяснено что якобы пользователь Dolero производил анализ безопасности nice — у него была прошивка и он сделал некие выводы — всё элементарно. также было выяснено что он считал eeprom приёмника и именно из этого сделал такие заключения. Прошивку он прочитал из проца моторола, так самые первые flors были на процах motorola и пина защиты там нет. Бери программатор и читай, однако всё оказалось непросто.
Физические параметры сигнала nice flor-s
Преамбула 1500 HI 1500 LOW
Логический 0 – 500 HI 1000 LOW
Логическая 1 – 1000 HI 500 LOW
Важным моментом данной кодировки является соблюдение правильных пауз между динамическими сериями сигнала – пауза 18500 мкс
Не посмотрев правильно сколько длится пауза я долго не понимал почему сигнал везде правильный а приёмник или сбивается или вообще его не воспринимает.
Логические параметры сигнала nice flor-s
52 бита
Данные по кнопкам были найдены на форуме у CodePerfect
“Кодирование кнопок.
Первый полубайт — собственно номер кнопки, задается одним битом:
0001 — 1 кнопка
0010 — 2 кнопка
0100 — 3 кнопка
1000 — 4 кнопка
Второй полубайт формируется из <1111> XOR <номер кнопки> XOR <номер посылки по порядку, начиная с 0001>.
Для первой кнопки второй полубайт будет:
<1110> XOR <0001> = F
<1110> XOR <0010> = C
<1110> XOR <0011> = D
<1110> XOR <0100> = A
<1110> XOR <0101> = B
<1110> XOR <0110> = 8
и т.д.
Для второй кнопки второй полубайт будет:
<1101> XOR <0001> = C
<1101> XOR <0010> = F
<1101> XOR <0011> = E
<1101> XOR <0100> = 9
<1101> XOR <0101> = 8
<1101> XOR <0110> = B
и т.д.”
Могу добавить, что второй полубайт — время удержания кнопки и если необходимо в автоматику передавать длинное нажатие кнопки – необходимо увеличивать время циклического изменения второго полубайта (в примере это указано)
Счетчик –шифрованная нелинейная последовательность
Серийный номер – линейно зависим от значения счётчика 2 полубайта
Логический анализ после приёма сигнала:
Принцип линейной зависимости серийного номера
E7 всегда 0
В EEPROM счетчик расшифрован
Для каждого уникального значения шифрованного счётчика — 2 байта существует ещё 1 байт линейного шифрования серийного номера.
Метод построения оригинальной посылки
B1, B2 – коэффициенты зависимости (свои для каждого значения счётчика)
S2 = E8 XOR B2
S7 = E5 XOR B1
S8 = E6 XOR B2
S9 = E3 XOR B1
S10 = E4 XOR B2
S11 = E1 XOR B1
S12 = E2 XOR B2
Нелинейная последовательность шифрованного счётчика строится по какому-то принципу – скорее всего принцип логических правил и табличного компадирования (замещения байтов по правилам через таблицы).
Шифрование обратимое, иначе нельзя было бы расшифровать значение счётчика по оригинальной посылке.
Возможно … возможно таблицу реально составить используя полные статистические данные, но мы пойдём ДРУГИМ путём !
Атака типа “DROP COUNTER”
Мы не будем пытаться расшифровывать принцип построения нелинейной последовательности, а обратимся к старому доброму предмету ТВИМС.
(теория вероятностей и мат. статистика)
Сколько значений счётчика? — 2 байта
Сколько всего вариантов? — 16 в 4 степени = 65536 вариантов
Прописываем брелок Flor-S в приёмник и узнаём из EEPROM оригинальный серийный номер (если при каждом приёме сигнала делать операцию XOR на оригинальный серийный номер мы получим правильные коэффициенты линейной зависимости для каждого значения счетчика)
При помощи устройства получаем все возможные значения счётчика и коэффициентов зависимости.
Получаем таблицу:
A1B1C1D1 E1F1
A2B2C2D2 E2F2
A3B3C3D3 E3F3
……
ABCD – значение счетчика, EF – линейная зависимость
Теперь через таблицу возможно вычислять правильные шифрованные значения счётчика, формировать оригинальные посылки через XOR оригинального серийного номера и полученных коэффициентов, однако есть ещё 1 вариант.
Было исследовано 2 приёмника SMXI и FLOXI2R (съёмный EEPROM)
На этих приёмниках это работало.
У роллинг кода flor-s на этих приёмниках не было окна синхронизации,
Возможно вообще у этого кода окна нет, утверждать не буду.
Получается это не баг, а особенность роллинг протокола:
Любая посылка конечной серии F0FF всегда валидна.
+ с серии F0FF счетчик может переходить на серию 0000
Для имитации брелока возможно закольцевать всего 2 посылки
Серии 0000 и серии F0FF
Из-за вычислений внутри приёмника регистры после нового приема сигнала не очищаются и приёмник лагает – 2 посылки воспринимаются через раз.
Для успешной имитации необходимо 8 посылок
4 серий 0000 + 4 серий F0FF
АТАКА
- серийный номер линейно зависим от значения счетчика c коэффициентами B1B2
- в полученной шифрованной посылке тоже скрыт серийный номер, и он также линейно зависим с коэффициентами P1P2
- получаем что в посылке конечной серии счетчика F0FF серийный номер скрыт за линейной зависимостью E1 = B1 XOR P1
E2 = B2 XOR P2
А что если перебрать все 256 комбинаций E1E2 на серии F0FF ?
Автоматика сработает !!!
ВАЖНОЕ ДОПОЛНЕНИЕ:
брелок оригинал перейдёт в состояние “DROP COUNTER” – не будет работать
из старых приёмников nice без программатора выписать брелок нельзя, можно только полностью стереть eeprom и всё прописать заново.
не все умеют цепляться прищепкой к eeprom, хотя у некоторых приёмников eeprom снимается.
на SMXI приёмнике нужна прищепка — просто к eeprom не подключишься.
На старой автоматике обычно нерабочий брелок заменяют на новый с доплатой, чтоб всё не прописывать заново.
Иногда используется станция NiceOBOX. В нее вставляется eeprom из приёмника для возможности быстро прописать большое количество брелоков.
Станция не у всех есть.
Не зная оригинальный правильный серийный номер брелока, но имея 1 правильную посылку есть возможность написать закольцованный имитатор посылок. работать будет (отправляя по 256 вариантов серийного номера каждый раз).
+
В примере скетч имитации брелока nice flor-s – 8 закольцованных посылок
Выводы – Nice flor-s уязвимый к атакам устаревший протокол.
протокол нельзя взломать перехватом кода, но можно имея приёмник и пульт.
Обсуждение и примеры тут: https://phreaker.ru/forum/showthread.php?t=2360
(c) www.phreakerclub.com
stallion_x