eXeL@B —› Основной форум —› Расшифровка алгоритма шифрования микропроцессорного устройства |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 26 ноября 2010 02:25 · Личное сообщение · #1 Здравствуйте. Я на форуме новенький и на взмоме программ не специализируюсь, я электронщик. Прошу вашей помощи в отломе алгоритма обмена микропроцессорной системы. В кратце опишу принцип ее работы. Одно промышленное устройство (программатор) подключается к контроллеру для изменения его настроек или перепрошивки по своему протоколу (протокол описывать не буду т.к. с ним я разобрался, проблема в шифровании). И в начале сеанса связи контроллер посылает программатору 2 байта, а затем ждет правильного ответа от него (тоже размером 2 байта), и если все прокатило, то начинается сеанс обмена данными. Я хочу сделать свой бюджетный вариант программатора. Мне удалось сдернуть весе варианты ЗАПРОС-ОТВЕТ, их я прикрепил к сообщению (в файле все понятно - слева посылка контроллера, а справа ответ программатора). В принципе я уже могу устанавливать сеанс связи по этой таблице, но у меня цель сделать автономное устройство с ЖК экраном для внесения некоторый корректировок в контроллер, и сами понимаете что я очень ограничен в объеме используемой памяти и не могу просто взять и запихнуть эту таблицу в AVR микроконтроллер с 4К памяти... Буду благодарен за любую оказанную помощь. a047_25.11.2010_CRACKLAB.rU.tgz - Zapros-Otvet.rar |
|
Создано: 26 ноября 2010 07:33 · Личное сообщение · #2 Блин, в файле 2 ошибки были. Исправил уже. И добавил бинарные файлы с запросами и ответами, где слову из файла "запрос.бин" соответствует слово из файла "ответ.бин" c412_25.11.2010_CRACKLAB.rU.tgz - zapros-otvet2.rar |
|
Создано: 26 ноября 2010 07:39 · Личное сообщение · #3 |
|
Создано: 26 ноября 2010 08:38 · Личное сообщение · #4 |
|
Создано: 26 ноября 2010 08:50 · Личное сообщение · #5 |
|
Создано: 26 ноября 2010 08:50 · Личное сообщение · #6 |
|
Создано: 26 ноября 2010 09:02 · Личное сообщение · #7 |
|
Создано: 26 ноября 2010 09:11 · Личное сообщение · #8 |
|
Создано: 26 ноября 2010 09:18 · Поправил: gazlan · Личное сообщение · #9 Я бы сделал так: разбил на 16 групп (построил квадрат) и расположил их вертикально. В каждой группе младший ниббл будет пробегать все значения от 0 до F. Рядом пишем второй колонкой данные из второй таблицы - и наглядно видим, как ответ реагирует на изменение младшего ниббла запроса - по столбцам и на изменение старшего ниббла запроса - по строкам. Уверен, закономерность должна обнаружиться. |
|
Создано: 26 ноября 2010 09:28 · Поправил: PE_Kill · Личное сообщение · #10 Ыыы, я сразу так и сделал. Получилось вот так: Code:
PS И всё же я считаю что это табличный ксор. ----- Yann Tiersen best and do not fuck |
|
Создано: 26 ноября 2010 09:42 · Поправил: PE_Kill · Личное сообщение · #11 Тут 2 алго. Первый определяет чем ксорить второй байт, второй определяет чем ксорить первый байт. Начинается XOR с константы CD. Затем в каждой группе константа увеличивается на 5. для Группы 00 (00XX) byte2 = byte2 xor CDh для Группы 1 (01XX) byte2 = byte2 xor (CDh+5) = byte2 xor D2h и так далее. Осталось определить как вычисляется первая константа для XOR'а ----- Yann Tiersen best and do not fuck |
|
Создано: 26 ноября 2010 10:54 · Личное сообщение · #12 |
|
Создано: 26 ноября 2010 11:50 · Личное сообщение · #13 |
|
Создано: 26 ноября 2010 12:09 · Поправил: PE_Kill · Личное сообщение · #14 |
|
Создано: 26 ноября 2010 13:12 · Личное сообщение · #15 |
|
Создано: 26 ноября 2010 19:03 · Поправил: gazlan · Личное сообщение · #16 По-моему, там 16 групп. Составляем квадрат 16*16, как я предложил ранее (с двойными столбцами q-a). Обозначим запрос как q3q2q1q0 и ответ как a3a2a1a0. Тогда, для каждой группы: a0 зависит только от номера строки a1 зависит только от номера столбца (подгруппы в группе) Поведение a2 и a3 изменяется в зависимости от номера группы. Для группы 0: a2 = a3. Для группы 1: a2 и a3 переключаются между четными и нечетными строками. Для группы 2: a2 и a3 переключаются в зависимости от четности и строки и столбца (т.е. группируются уже не парами, а четверками) И, кажется, для второй половины групп характер изменения зеркально симметричен: т.е., для группы F, как для группы 0, для группы E, как для группы 1 итд. Для получения замен в столбце, на первом этапе, я бы просто составил S-boxes 4*4 для каждой из подгрупп, а уже потом, не глядя в q-a, а только на сами матрицы подстановок групп, стал бы искать алгоритм их генерации. |
|
Создано: 26 ноября 2010 23:33 · Личное сообщение · #17 А как вам такой вариант сортировки: (Вторая пара - ответ и запрос с сортировкой) Code:
www.multiupload.com/COY6PGRERL Диапазон ответов тот же 0000-FFFF. Наверное алгоритм один? |
|
Создано: 27 ноября 2010 01:41 · Личное сообщение · #18 Вот ещё для наглядности в двоичном виде: (запрос - ответ, в двоичном виде и последняя колонка если соответствующие биты равны = 1 иначе 0) Code:
www.multiupload.com/HHMCQZ49MO |
|
Создано: 27 ноября 2010 02:23 · Личное сообщение · #19 |
|
Создано: 27 ноября 2010 12:24 · Поправил: gazlan · Личное сообщение · #20 Здесь очевидное блочное шифрование. Так, подстановки внутри блока младшего ниббла задаются S-box'ами. Выбор S-box'ов задается индексами [i,j] в квадрате 16*16. Аналогично выглядят перестановки старших нибблов. Можно ли описать генерацию S-boxes и перестановок старших нибблов простым алгоритмом будет понятно, когда вы эти правила ясно выпишете. Два из них - проверка на четность номера строки и номера столбца - я уже назвал. Полагаю, что и остальное не должно быть намного сложнее. Для тех блоков, что я посмотрел, можно выделить такие группы правил (т.е. алго распадается на несколько независимых частей): шифрование младшего ниббла a[0] - S-box определяется только индексом в таблице, шифрование ниббла a[1] - S-box'а нет, определяется только индексом в таблице, шифрование двух старших нибблов задается, фактически, одним S-box'ом и правилами их перестановки (проверкой индексов на четность). Вторая половина таблицы должна быть зеркально симметрична первой. Еще раз, медленно и раздельно: Главный вывод, который из этого следует: Шифрование каждого из байт запроса не зависит от остальных! Вы можете разбить ваш запрос на 4 части (отдельно для каждого из нибблов q[0]..q[3]) и выявить алго шифрования для каждой из них - независимо от трех других. Если в оставшихся блоках (которые я не смотрел) нет ничего нового, то простое объединение этих четырех алго даст полный алгоритм шифрования в виде a[i] = C(q[i]) - в 4 строчки (не считая S-boxes). Но, пока вы не организуете ваши данные в квадратную таблицу, вы этого не увидите. |
|
Создано: 27 ноября 2010 12:34 · Личное сообщение · #21 |
|
Создано: 27 ноября 2010 15:07 · Поправил: ToBad · Личное сообщение · #22 gazlan а можно небольшую демонстрацию того, что вы сказали на паре строк? p.s. Кажется начинаю понимать, действительно нужно строить таблички... Что-то типа этого? Code:
Где в парах 0X0Y 000A - Y по вертикали, X по горизонтали а A - итоговое значение. Табличка действительна для 0 - го индекса. Нужно выходит строить для каждого, а потом смотреть взаимосвязи? |
|
Создано: 27 ноября 2010 17:47 · Поправил: gazlan · Личное сообщение · #23 ToBad пишет: небольшую демонстрацию Надо бы программу написать для правильного форматирования (и вообще разбить весь файл на 4 таблицы - по нибблам) - но лень и некогда... Вот, насколько хватило терпения - кажется, здесь все очевидно: Code:
IMHO, правильный подход должен быть таким: делим весь файл на 4 части - по числу нибблов, так что в каждой из частей рассматриваем шифрование q -> a только одного ниббла. Шифрование рассматриваем как подстановку S из S-box, где значение ниббла является индексом в массиве из 16 чисел, организованных в квадратную матрицу 4*4. a = S[q] Например, для этих двух строк (строки групп) видим, что для младшего ниббла a[0] S-boxes зеркальны (двойное отражение), причем выбор S-box зависит только от номера строки Code:
тогда как для a[1], и от номера строки и от номера столбца (эти матрицы не строил). P.S. Вспомнил, что на WASM как-то обсуждался реверс аналогичного (если не этого же) алгоритма - задача Володи (довольно давно - еще ms-rem участвовал). У меня тоже где-то валялось мое собственное решение, но за давностью (лет 5 прошло) не могу припомнить ни как тот топик назывался, ни куда свой ответ засунул (там было какое-то алго на Pascal, да еще с ошибкой в условии - перепутан порядок байт в слове). UPDATE Странным образом, с WASM этот топик исчез (поиск не дал результата ни по автору, ни по названию, ссылка не открывается), но зато отыскал свой ответ в другом месте. Алгоритм шифрования иной, но идеи те же самые и подход к дешифровке должен быть очевиден. 109f_27.11.2010_CRACKLAB.rU.tgz - crypto.rar |
|
Создано: 27 ноября 2010 17:57 · Личное сообщение · #24 А вы не пробовали проксорить? Я почему про ксор твержу, потому что довольно красивые результаты получаются. Code:
----- Yann Tiersen best and do not fuck |
|
Создано: 27 ноября 2010 18:23 · Поправил: gazlan · Личное сообщение · #25 PE_Kill пишет: не пробовали проксорить Просто не хочу заранее задаваться каким-то алго, т..к. уверен, что он должен проявиться сам, как только будет выполнена правильная разбивка на группы и составлены S-boxes. Наверняка, есть какой-то алгоритм их генерации, но, IMHO, правильнее разбить задачу на части, а не пытаться угадать решение. В моей практике были случаи, когда некое алго давало "почти правильные" значения по всей таблице, исключая, например, только правый нижний угол. Приходилось еще строить таблицу поправок. Это работало, но оригинальный алгоритм, наверняка, был устроен иначе. P.S. Вдогонку к предыдущему эташу. Свой исходник я, наверное, потерял, но вот решения других знаменитостей bcdf_27.11.2010_CRACKLAB.rU.tgz - Re!Crypto.rar |
|
Создано: 27 ноября 2010 22:13 · Поправил: gazlan · Личное сообщение · #26 Преодолел лень и написал форматтер, который "правильно" располагает данные в табличку 16*16. Здесь - исходный файл и таблично сформатированные данные. h**p://w*w.sendspace.com/file/b0nals В эташе только сам форматтер, работающий с исходным файлом от TC. А здесь мы наглядно видим пермутацию S-boxes для первых восьми строк групп (a[0] nibble) этой таблицы: Code:
Следовательно, корректный генератор пермутаций P должен выдать все 256 перестановок для младшего ниббла P[i], i = 0..255. Теоретически, это может быть реализовано как XOR (все 256 значений), но пока непонятно, с чем именно. Придется слить столбцы в qword'ы и поглядеть как меняется константа при движении "вниз" по строкам. 1b75_27.11.2010_CRACKLAB.rU.tgz - qaf.rar |
|
Создано: 28 ноября 2010 00:53 · Поправил: gazlan · Личное сообщение · #27 gazlan пишет: Придется слить столбцы в qword'ы и поглядеть как меняется константа при движении "вниз" по строкам. Пришлось... результат в эташе. Пермутация, действительно, реализована через XOR, при этом константа (nibble) последовательно циклически пробегает значения F-5-B-D-7-D-B-5-F-... (XOR дельта, соответственно, A-E-6-A-A-6-E-A-...). Напомню, что это только для младшего ниббла, закон изменения остальных еще предстоит выяснить. 0ed1_27.11.2010_CRACKLAB.rU.tgz - QW.rar |
|
Создано: 28 ноября 2010 01:03 · Личное сообщение · #28 gazlan пишет: закон изменения остальных еще предстоит выяснить. Для желающих, в эташе исходный текст программы QW (M$VC 6.0). 2f16_27.11.2010_CRACKLAB.rU.tgz - QW Src.rar |
|
Создано: 28 ноября 2010 03:39 · Личное сообщение · #29 PE_Kill пишет: byte2 = byte2 xor (CDh+5) = byte2 xor D2h crypto пишет: Что-то не получается для пары 5573->0000 как мне кажется получение второго байта можно описать следующей формулой (вход - q1q2, выход - a1a2): Code:
для пары 5573: Code:
|
|
Создано: 28 ноября 2010 05:02 · Поправил: V1KT0P · Личное сообщение · #30 Если предположить, что манипуляция идет с 2-мя байтами, то вот на основе этого массива из 256 значений генерируется второй байт ответа. Проверял все варианты, работает правильно. Не могу понять как этот массив можно на лету генерировать. Code:
Блин вот я дурак, массив генерируется конгруэнтным генератором, осталось циферки подобрать. Там в начале увеличивается каждое следующее число на 5, но потом сбивается... Вот хоть и странный, но компактный способ получить второй байт ответа. Осталось разобраться с первым. Code:
|
. 1 . 2 . >> |
eXeL@B —› Основной форум —› Расшифровка алгоритма шифрования микропроцессорного устройства |