eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Расшифровка алгоритма шифрования микропроцессорного устройства
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 7.0 (гость)
Статус: Участник

Создано: 26 ноября 2010 02:25 New!
Цитата · Личное сообщение · #1

Здравствуйте. Я на форуме новенький и на взмоме программ не специализируюсь, я электронщик. Прошу вашей помощи в отломе алгоритма обмена микропроцессорной системы. В кратце опишу принцип ее работы.
Одно промышленное устройство (программатор) подключается к контроллеру для изменения его настроек или перепрошивки по своему протоколу (протокол описывать не буду т.к. с ним я разобрался, проблема в шифровании). И в начале сеанса связи контроллер посылает программатору 2 байта, а затем ждет правильного ответа от него (тоже размером 2 байта), и если все прокатило, то начинается сеанс обмена данными. Я хочу сделать свой бюджетный вариант программатора. Мне удалось сдернуть весе варианты ЗАПРОС-ОТВЕТ, их я прикрепил к сообщению (в файле все понятно - слева посылка контроллера, а справа ответ программатора). В принципе я уже могу устанавливать сеанс связи по этой таблице, но у меня цель сделать автономное устройство с ЖК экраном для внесения некоторый корректировок в контроллер, и сами понимаете что я очень ограничен в объеме используемой памяти и не могу просто взять и запихнуть эту таблицу в AVR микроконтроллер с 4К памяти...
Буду благодарен за любую оказанную помощь.

{ Атач доступен только для участников форума } - Zapros-Otvet.rar

Ранг: 7.0 (гость)
Статус: Участник

Создано: 26 ноября 2010 07:33 New!
Цитата · Личное сообщение · #2

Блин, в файле 2 ошибки были. Исправил уже. И добавил бинарные файлы с запросами и ответами, где слову из файла "запрос.бин" соответствует слово из файла "ответ.бин"

{ Атач доступен только для участников форума } - zapros-otvet2.rar


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 26 ноября 2010 07:39 New!
Цитата · Личное сообщение · #3

Это XOR только вот выбор константы пока понять не могу.


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 26 ноября 2010 08:38 New!
Цитата · Личное сообщение · #4

По первому впечатлению, там несколько групп с разными алго. В каждой группе своя перестановка блока бит. Вот здесь, например:
Code:
  1. FE02 76C1
  2. FE03 67C0
  3. FE04 DCC7
  4. FE05 CDC6
  5. FE06 BAC5
  6. FE07 ABC4

Ранг: 7.0 (гость)
Статус: Участник

Создано: 26 ноября 2010 08:50 New!
Цитата · Личное сообщение · #5

Я так и думал что это XOR Уже теретий день это этого ксора толком не сплю...


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 26 ноября 2010 08:50 New!
Цитата · Личное сообщение · #6

Хмм. Действительно. Только мне кажется, что такие перестановки происходят во время выхода за какой то диапазон.


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 26 ноября 2010 09:02 New!
Цитата · Личное сообщение · #7

Ну, в примере выше, выглядит так, что младший бит (четность) управляет перестановкой двух старщихх нибблов, а какой-то еще младший бит (лень считать) управляет выбором младшего ниббла. Если аккуратно разбить весь диапазон, скажем, на 16 групп, то, думаю, многое прояснится.

Ранг: 7.0 (гость)
Статус: Участник

Создано: 26 ноября 2010 09:11 New!
Цитата · Личное сообщение · #8

Похоже что перестановка бит меняется 0xFF раз на протяжении всего дампа. И возможно после каждого поддиапазона функция XOR или увеличивается на 1 или уменьшается. По любому долна быть какая-то связь между поддиапазонами.


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 26 ноября 2010 09:18 · Поправил: gazlan New!
Цитата · Личное сообщение · #9

Я бы сделал так: разбил на 16 групп (построил квадрат) и расположил их вертикально. В каждой группе младший ниббл будет пробегать все значения от 0 до F.
Рядом пишем второй колонкой данные из второй таблицы - и наглядно видим, как ответ реагирует на изменение младшего ниббла запроса - по столбцам и на изменение старшего ниббла запроса - по строкам. Уверен, закономерность должна обнаружиться.


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 26 ноября 2010 09:28 · Поправил: PE_Kill New!
Цитата · Личное сообщение · #10

Ыыы, я сразу так и сделал. Получилось вот так:

Code:
  1. 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F 
  2. 33CD 22CC 55CF 44CE 00C9 11C8 11CB 00CA 44C5 55C4 22C7 33C6 88C1 99C0 66C3 77C2 
  3.  
  4. 0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 010A 010B 010C 010D 010E 010F 
  5. 89D2 98D3 67D0 76D1 CDD6 DCD7 ABD4 BAD5 10DA 01DB EFD8 FED9 54DE 45DF 32DC 23DD 
  6.  
  7. 0200 0201 0202 0203 0204 0205 0206 0207 0208 0209 020A 020B 020C 020D 020E 020F 
  8. DFD7 CED6 B9D5 A8D4 9BD3 8AD2 75D1 64D0 46DF 57DE 20DD 31DC 02DB 13DA FDD9 ECD8 
  9.  
  10. 0300 0301 0302 0303 0304 0305 0306 0307 0308 0309 030A 030B 030C 030D 030E 030F 
  11. 30DC 21DD 56DE 47DF EDD8 FCD9 12DA 03DB A9D4 B8D5 CFD6 DED7 65D0 74D1 8BD2 9AD3 
  12.  
  13. 0400 0401 0402 0403 0404 0405 0406 0407 0408 0409 040A 040B 040C 040D 040E 040F 
  14. 62E1 73E0 8CE3 9DE2 AEE5 BFE4 C8E7 D9E6 EAE9 FBE8 37EB 26EA 15ED 04EC 73EF 62EE 
  15.  
  16. 0500 0501 0502 0503 0504 0505 0506 0507 0508 0509 050A 050B 050C 050D 050E 050F 
  17. D8E6 C9E7 BEE4 AFE5 9CE2 8DE3 72E0 63E1 63EE 72EF 05EC 14ED 27EA 36EB FAE8 EBE9 
  18. *****


PS И всё же я считаю что это табличный ксор.


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 26 ноября 2010 09:42 · Поправил: PE_Kill New!
Цитата · Личное сообщение · #11

Тут 2 алго. Первый определяет чем ксорить второй байт, второй определяет чем ксорить первый байт.

Начинается XOR с константы CD. Затем в каждой группе константа увеличивается на 5.

для Группы 00 (00XX)

byte2 = byte2 xor CDh

для Группы 1 (01XX)

byte2 = byte2 xor (CDh+5) = byte2 xor D2h

и так далее. Осталось определить как вычисляется первая константа для XOR'а


Ранг: 481.4 (мудрец)
Статус: Участник
Тот самый :)

Создано: 26 ноября 2010 10:54 New!
Цитата · Личное сообщение · #12

А прошивка программатора не доступна?

Ранг: 188.1 (ветеран)
Статус: Участник

Создано: 26 ноября 2010 11:50 New!
Цитата · Личное сообщение · #13

PE_Kill
для Группы 1 (01XX)
byte2 = byte2 xor (CDh+5) = byte2 xor D2h


Что-то не получается для пары 5573->0000


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 26 ноября 2010 12:09 · Поправил: PE_Kill New!
Цитата · Личное сообщение · #14

Я разобрался там табличная перестановка и обмен местами элементов. Щас попробую закодить.

crypto ну да видимо для этого алго тоже есть перестановка.


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 26 ноября 2010 13:12 New!
Цитата · Личное сообщение · #15

Что то и с табличкой не выходит, в середине вроде нормально а в начале и конце треш какой то. Может там несколько таблиц. Или вообще без таблиц...


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 26 ноября 2010 19:03 · Поправил: gazlan New!
Цитата · Личное сообщение · #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, а только на сами матрицы подстановок групп, стал бы искать алгоритм их генерации.


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 26 ноября 2010 23:33 New!
Цитата · Личное сообщение · #17

А как вам такой вариант сортировки:
(Вторая пара - ответ и запрос с сортировкой)
Code:
  1. 0000 33CD  0000 5573
  2. 0001 22CC  0001 441F
  3. 0002 55CF  0002 BB70
  4. 0003 44CE  0003 AA1E
  5. 0004 00C9  0004 99CC
  6. 0005 11C8  0005 8876
  7. 0006 11CB  0006 FFCE
  8. 0007 00CA  0007 EE75
  9. 0008 44C5  0008 DD15
  10. 0009 55C4  0009 CCC1
  11. 000A 22C7  000A 4414
  12. 000B 33C6  000B 5578
  13. 000C 88C1  000C 66C4
  14. 000D 99C0  000D 7710
  15. 000E 66C3  000E 00C3
  16. 000F 77C2  000F 112D
  17. 0010 22DD  0010 2267
  18. 0011 33DC  0011 33DD
  19. 0012 44DF  0012 CCDA
  20. 0013 55DE  0013 DD0E
  21. 0014 FFD9  0014 EE66
  22. 0015 EED8  0015 FFDD
  23. 0016 00DB  0016 8865
  24. 0017 11DA  0017 99DF
  25. 0018 BBD5  0018 AA05
  26. 0019 AAD4  0019 BB6B
  27. 001A DDD7  001A 5569
  28. 001B CCD6  001B 4405
  29. 001C 77D1  001C 7701
  30. 001D 66D0  001D 66D5
  31. 001E 99D3  001E 113C
  32. 001F 88D2  001F 00D2
  33. 0020 11ED  0020 33EC
  34. 0021 00EC  0021 2256
  35. 0022 77EF  0022 DD3F

www.multiupload.com/COY6PGRERL

Диапазон ответов тот же 0000-FFFF. Наверное алгоритм один?


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 27 ноября 2010 01:41 New!
Цитата · Личное сообщение · #18

Вот ещё для наглядности в двоичном виде:
(запрос - ответ, в двоичном виде и последняя колонка если соответствующие биты равны = 1 иначе 0)
Code:
  1. 0000 33CD   0000000000000000 0011001111001101  1100110000110010
  2. 0001 22CC   0000000000000001 0010001011001100  1101110100110010
  3. 0002 55CF   0000000000000010 0101010111001111  1010101000110010
  4. 0003 44CE   0000000000000011 0100010011001110  1011101100110010
  5. 0004 00C9   0000000000000100 0000000011001001  1111111100110010
  6. 0005 11C8   0000000000000101 0001000111001000  1110111000110010
  7. 0006 11CB   0000000000000110 0001000111001011  1110111000110010
  8. 0007 00CA   0000000000000111 0000000011001010  1111111100110010
  9. 0008 44C5   0000000000001000 0100010011000101  1011101100110010
  10. 0009 55C4   0000000000001001 0101010111000100  1010101000110010
  11. 000A 22C7   0000000000001010 0010001011000111  1101110100110010
  12. 000B 33C6   0000000000001011 0011001111000110  1100110000110010
  13. 000C 88C1   0000000000001100 1000100011000001  0111011100110010
  14. 000D 99C0   0000000000001101 1001100111000000  0110011000110010
  15. 000E 66C3   0000000000001110 0110011011000011  1001100100110010
  16. 000F 77C2   0000000000001111 0111011111000010  1000100000110010
  17. 0010 22DD   0000000000010000 0010001011011101  1101110100110010
  18. 0011 33DC   0000000000010001 0011001111011100  1100110000110010
  19. 0012 44DF   0000000000010010 0100010011011111  1011101100110010
  20. 0013 55DE   0000000000010011 0101010111011110  1010101000110010
  21. 0014 FFD9   0000000000010100 1111111111011001  0000000000110010
  22. 0015 EED8   0000000000010101 1110111011011000  0001000100110010
  23. 0016 00DB   0000000000010110 0000000011011011  1111111100110010
  24. 0017 11DA   0000000000010111 0001000111011010  1110111000110010
  25. 0018 BBD5   0000000000011000 1011101111010101  0100010000110010
  26. 0019 AAD4   0000000000011001 1010101011010100  0101010100110010
  27. 001A DDD7   0000000000011010 1101110111010111  0010001000110010
  28. 001B CCD6   0000000000011011 1100110011010110  0011001100110010
  29. 001C 77D1   0000000000011100 0111011111010001  1000100000110010
  30. 001D 66D0   0000000000011101 0110011011010000  1001100100110010
  31. 001E 99D3   0000000000011110 1001100111010011  0110011000110010
  32. 001F 88D2   0000000000011111 1000100011010010  0111011100110010
  33. 0020 11ED   0000000000100000 0001000111101101  1110111000110010
  34. 0021 00EC   0000000000100001 0000000011101100  1111111100110010
  35. 0022 77EF   0000000000100010 0111011111101111  1000100000110010
  36. 0023 66EE   0000000000100011 0110011011101110  1001100100110010
  37. 0024 EEE9   0000000000100100 1110111011101001  0001000100110010
  38. 0025 FFE8   0000000000100101 1111111111101000  0000000000110010
  39. 0026 33EB   0000000000100110 0011001111101011  1100110000110010
  40. 0027 22EA   0000000000100111 0010001011101010  1101110100110010
  41. 0028 AAE5   0000000000101000 1010101011100101  0101010100110010
  42. 0029 BBE4   0000000000101001 1011101111100100  0100010000110010
  43. 002A CCE7   0000000000101010 1100110011100111  0011001100110010
  44. 002B DDE6   0000000000101011 1101110111100110  0010001000110010
  45. 002C 66E1   0000000000101100 0110011011100001  1001100100110010
  46. 002D 77E0   0000000000101101 0111011111100000  1000100000110010
  47. 002E 88E3   0000000000101110 1000100011100011  0111011100110010
  48. 002F 99E2   0000000000101111 1001100111100010  0110011000110010
  49. 0030 00FD   0000000000110000 0000000011111101  1111111100110010
  50. 0031 11FC   0000000000110001 0001000111111100  1110111000110010
  51. 0032 66FF   0000000000110010 0110011011111111  1001100100110010
  52. 0033 77FE   0000000000110011 0111011111111110  1000100000110010
  53. 0034 DDF9   0000000000110100 1101110111111001  0010001000110010
  54. 0035 CCF8   0000000000110101 1100110011111000  0011001100110010
  55. 0036 22FB   0000000000110110 0010001011111011  1101110100110010
  56. 0037 33FA   0000000000110111 0011001111111010  1100110000110010
  57. 0038 99F5   0000000000111000 1001100111110101  0110011000110010
  58. 0039 88F4   0000000000111001 1000100011110100  0111011100110010
  59. 003A FFF7   0000000000111010 1111111111110111  0000000000110010
  60. 003B EEF6   0000000000111011 1110111011110110  0001000100110010
  61. 003C 55F1   0000000000111100 0101010111110001  1010101000110010
  62. 003D 44F0   0000000000111101 0100010011110000  1011101100110010
  63. 003E BBF3   0000000000111110 1011101111110011  0100010000110010
  64. 003F AAF2   0000000000111111 1010101011110010  0101010100110010
  65. 0040 FF8D   0000000001000000 1111111110001101  0000000000110010
  66. 0041 EE8C   0000000001000001 1110111010001100  0001000100110010
  67. 0042 998F   0000000001000010 1001100110001111  0110011000110010
  68. 0043 888E   0000000001000011 1000100010001110  0111011100110010
  69. 0044 4489   0000000001000100 0100010010001001  1011101100110010

www.multiupload.com/HHMCQZ49MO

Ранг: 7.0 (гость)
Статус: Участник

Создано: 27 ноября 2010 02:23 New!
Цитата · Личное сообщение · #19

Я больше склоняюсь что здесь будет какая-то формула перещета нежели таблица(ы). Да и на микроконтроллере с точки зрения постоянной нежватки памяти рациональнее было бы это сделать через формулу.


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 27 ноября 2010 12:24 · Поправил: gazlan New!
Цитата · Личное сообщение · #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).

Но, пока вы не организуете ваши данные в квадратную таблицу, вы этого не увидите.

Ранг: 188.1 (ветеран)
Статус: Участник

Создано: 27 ноября 2010 12:34 New!
Цитата · Личное сообщение · #21

Мне лично кажется, что это конгруэнтная последовательность (линейная не подходит,я проверил).


Ранг: 450.3 (мудрец)
Статус: Участник

Создано: 27 ноября 2010 15:07 · Поправил: ToBad New!
Цитата · Личное сообщение · #22

gazlan а можно небольшую демонстрацию того, что вы сказали на паре строк?

p.s. Кажется начинаю понимать, действительно нужно строить таблички...
Что-то типа этого?

Code:
  1.    0 1 2 3 4 5 6 7 8 9 A B C D E F
  2. -  - - - - - - - - - - - - - - - -
  3. 0  D 2 7 C 1 6 B 0 5 A F 4 9 E 3 8
  4. 1  C 3 6 D 0 7 A 1 4 B E 5 8 F 2 9
  5. 2  F 0 5 E 3 4 9 2 7 8 D 6 B C 1 A
  6. 3  E 1 4 F 2 5 8 3 6 9 C 7 A D 0 B
  7. 4  9 6 3 8 5 2 F 4 1 E B 0 D A 7 C
  8. 5  8 7 2 9 4 3 E 5 0 F A 1 C B 6 D
  9. 6  B 4 1 A 7 0 D 6 3 C 9 2 F 8 5 E
  10. 7  A 5 0 B 6 1 C 7 2 D 8 3 E 9 4 F
  11. 8  5 A F 4 9 E 3 8 D 2 7 C 1 6 B 0
  12. 9  4 B E 5 8 F 2 9 C 3 6 D 0 7 A 1
  13. A  7 8 D 6 B C 1 A F 0 5 E 3 4 9 2
  14. B  6 9 C 7 A D 0 B E 1 4 F 2 5 8 3
  15. C  1 E B 0 D A 7 C 9 6 3 8 5 2 F 4
  16. D  0 F A 1 C B 6 D 8 7 2 9 4 3 E 5
  17. E  3 C 9 2 F 8 5 E B 4 1 A 7 0 D 6
  18. F  2 D 8 3 E 9 4 F A 5 0 B 6 1 C 7


Где в парах 0X0Y 000A - Y по вертикали, X по горизонтали а A - итоговое значение. Табличка действительна для 0 - го индекса. Нужно выходит строить для каждого, а потом смотреть взаимосвязи?


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 27 ноября 2010 17:47 · Поправил: gazlan New!
Цитата · Личное сообщение · #23

ToBad пишет:
небольшую демонстрацию


Надо бы программу написать для правильного форматирования (и вообще разбить весь файл на 4 таблицы - по нибблам) - но лень и некогда...

Вот, насколько хватило терпения - кажется, здесь все очевидно:

Code:
  1. 0000 33CD | 0010 22DD | 0020 11ED | 0030 00FD | 0040 FF8D | 0050 EE9D | 0060 DDAD | 0070 CCBD | 0080 BB4D | 0090 AA5D | 00A0 996D | 00B0 887D | 00C0 770D | 00D0 661D | 00E0 552D | 00F0 443D
  2. 0001 22CC | 0011 33DC | 0021 00EC | 0031 11FC | 0041 EE8C | 0051 FF9C | 0061 CCAC | 0071 DDBC | 0081 AA4C | 0091 BB5C | 00A1 886C | 00B1 997C | 00C1 660C | 00D1 771C | 00E1 442C | 00F1 553C
  3. 0002 55CF | 0012 44DF | 0022 77EF | 0032 66FF | 0042 998F | 0052 889F | 0062 BBAF | 0072 AABF | 0082 DD4F | 0092 CC5F | 00A2 FF6F | 00B2 EE7F | 00C2 110F | 00D2 001F | 00E2 332F | 00F2 223F
  4. 0003 44CE | 0013 55DE | 0023 66EE | 0033 77FE | 0043 888E | 0053 999E | 0063 AAAE | 0073 BBBE | 0083 CC4E | 0093 DD5E | 00A3 EE6E | 00B3 FF7E | 00C3 000E | 00D3 111E | 00E3 222E | 00F3 333E
  5. 0004 00C9 | 0014 FFD9 | 0024 EEE9 | 0034 DDF9 | 0044 4489 | 0054 3399 | 0064 22A9 | 0074 11B9 | 0084 8849 | 0094 7759 | 00A4 6669 | 00B4 5579 | 00C4 CC09 | 00D4 BB19 | 00E4 AA29 | 00F4 9939
  6. 0005 11C8 | 0015 EED8 | 0025 FFE8 | 0035 CCF8 | 0045 5588 | 0055 2298 | 0065 33A8 | 0075 00B8 | 0085 9948 | 0095 6658 | 00A5 7768 | 00B5 4478 | 00C5 DD08 | 00D5 AA18 | 00E5 BB28 | 00F5 8838
  7. 0006 11CB | 0016 00DB | 0026 33EB | 0036 22FB | 0046 DD8B | 0056 CC9B | 0066 FFAB | 0076 EEBB | 0086 994B | 0096 885B | 00A6 BB6B | 00B6 AA7B | 00C6 550B | 00D6 441B | 00E6 772B | 00F6 663B
  8. 0007 00CA | 0017 11DA | 0027 22EA | 0037 33FA | 0047 CC8A | 0057 DD9A | 0067 EEAA | 0077 FFBA | 0087 884A | 0097 995A | 00A7 AA6A | 00B7 BB7A | 00C7 440A | 00D7 551A | 00E7 662A | 00F7 773A
  9. 0008 44C5 | 0018 BBD5 | 0028 AAE5 | 0038 99F5 | 0048 0085 | 0058 7795 | 0068 66A5 | 0078 55B5 | 0088 CC45 | 0098 3355 | 00A8 2265 | 00B8 1175 | 00C8 8805 | 00D8 FF15 | 00E8 EE25 | 00F8 DD35
  10. 0009 55C4 | 0019 AAD4 | 0029 BBE4 | 0039 88F4 | 0049 1184 | 0059 6694 | 0069 77A4 | 0079 44B4 | 0089 DD44 | 0099 2254 | 00A9 3364 | 00B9 0074 | 00C9 9904 | 00D9 EE14 | 00E9 FF24 | 00F9 CC34
  11. 000A 22C7 | 001A DDD7 | 002A CCE7 | 003A FFF7 | 004A 6687 | 005A 1197 | 006A 00A7 | 007A 33B7 | 008A AA47 | 009A 5557 | 00AA 4467 | 00BA 7777 | 00CA EE07 | 00DA 9917 | 00EA 8827 | 00FA BB37
  12. 000B 33C6 | 001B CCD6 | 002B DDE6 | 003B EEF6 | 004B 7786 | 005B 0096 | 006B 11A6 | 007B 22B6 | 008B BB46 | 009B 4456 | 00AB 5566 | 00BB 6676 | 00CB FF06 | 00DB 8816 | 00EB 9926 | 00FB AA36
  13. 000C 88C1 | 001C 77D1 | 002C 66E1 | 003C 55F1 | 004C CC81 | 005C BB91 | 006C AAA1 | 007C 99B1 | 008C 0041 | 009C FF51 | 00AC EE61 | 00BC DD71 | 00CC 4401 | 00DC 3311 | 00EC 2221 | 00FC 1131
  14. 000D 99C0 | 001D 66D0 | 002D 77E0 | 003D 44F0 | 004D DD80 | 005D AA90 | 006D BBA0 | 007D 88B0 | 008D 1140 | 009D EE50 | 00AD FF60 | 00BD CC70 | 00CD 5500 | 00DD 2210 | 00ED 3320 | 00FD 0030
  15. 000E 66C3 | 001E 99D3 | 002E 88E3 | 003E BBF3 | 004E 2283 | 005E 5593 | 006E 44A3 | 007E 77B3 | 008E EE43 | 009E 1153 | 00AE 0063 | 00BE 3373 | 00CE AA03 | 00DE DD13 | 00EE CC23 | 00FE FF33
  16. 000F 77C2 | 001F 88D2 | 002F 99E2 | 003F AAF2 | 004F 3382 | 005F 4492 | 006F 55A2 | 007F 66B2 | 008F FF42 | 009F 0052 | 00AF 1162 | 00BF 2272 | 00CF BB02 | 00DF CC12 | 00EF DD22 | 00FF EE32
  17. ----------------------------------------------------------------------           ---------------------------------------------------------------------- --------------------------------------------------
  18. 0100 89D2 | 0110 76C2 | 0120 ABF2 | 0130 98E2 |
  19. 0101 98D3 | 0111 67C3 | 0121 BAF3 | 0131 89E3 |
  20. 0102 67D0 | 0112 98C0 | 0122 45F0 | 0132 76E0 |
  21. 0103 76D1 | 0113 89C1 | 0123 54F1 | 0133 67E1 |
  22. 0104 CDD6 | 0114 32C6 | 0124 EFF6 | 0134 DCE6 |
  23. 0105 DCD7 | 0115 23C7 | 0125 FEF7 | 0135 CDE7 |
  24. 0106 ABD4 | 0116 54C4 | 0126 89F4 | 0136 BAE4 |
  25. 0107 BAD5 | 0117 45C5 | 0127 98F5 | 0137 ABE5 |
  26. 0108 10DA | 0118 01CA | 0128 32FA | 0138 23EA |
  27. 0109 01DB | 0119 10CB | 0129 23FB | 0139 32EB |
  28. 010A EFD8 | 011A 10C8 | 012A CDF8 | 013A FEE8 |
  29. 010B FED9 | 011B 01C9 | 012B DCF9 | 013B EFE9 |
  30. 010C 54DE | 011C 45CE | 012C 76FE | 013C 67EE |
  31. 010D 45DF | 011D 54CF | 012D 67FF | 013D 76EF |
  32. 010E 32DC | 011E 23CC | 012E 10FC | 013E 01EC |
  33. 010F 23DD | 011F 32CD | 012F 01FD | 013F 10ED |
  34. ----------------------------------------------------------------------           ---------------------------------------------------------------------- --------------------------------------------------



IMHO, правильный подход должен быть таким: делим весь файл на 4 части - по числу нибблов, так что в каждой из частей рассматриваем шифрование q -> a только одного ниббла.

Шифрование рассматриваем как подстановку S из S-box, где значение ниббла является индексом в массиве из 16 чисел, организованных в квадратную матрицу 4*4.

a = S[q]

Например, для этих двух строк (строки групп) видим, что для младшего ниббла a[0] S-boxes зеркальны (двойное отражение), причем выбор S-box зависит только от номера строки

Code:
  1. D C F E     2 3 0 1
  2. 9 8 B A     6 7 4 5
  3. 5 4 7 6     A B 8 9
  4. 1 0 3 2     E F C D


тогда как для a[1], и от номера строки и от номера столбца (эти матрицы не строил).


P.S.

Вспомнил, что на WASM как-то обсуждался реверс аналогичного (если не этого же) алгоритма - задача Володи (довольно давно - еще ms-rem участвовал). У меня тоже где-то валялось мое собственное решение, но за давностью (лет 5 прошло) не могу припомнить ни как тот топик назывался, ни куда свой ответ засунул (там было какое-то алго на Pascal, да еще с ошибкой в условии - перепутан порядок байт в слове).


UPDATE

Странным образом, с WASM этот топик исчез (поиск не дал результата ни по автору, ни по названию, ссылка не открывается), но зато отыскал свой ответ в другом месте. Алгоритм шифрования иной, но идеи те же самые и подход к дешифровке должен быть очевиден.

{ Атач доступен только для участников форума } - crypto.rar


Ранг: 793.4 (! !)
Статус: Участник
Шаман

Создано: 27 ноября 2010 17:57 New!
Цитата · Личное сообщение · #24

А вы не пробовали проксорить? Я почему про ксор твержу, потому что довольно красивые результаты получаются.
Code:
  1. 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F 
  2. 33CD 22CD 55CD 44CD 00CD 11CD 11CD 00CD 44CD 55CD 22CD 33CD 88CD 99CD 66CD 77CD 
  3.  
  4. 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 
  5. 22CD 33CD 44CD 55CD FFCD EECD 00CD 11CD BBCD AACD DDCD CCCD 77CD 66CD 99CD 88CD 
  6.  
  7. 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 002A 002B 002C 002D 002E 002F 
  8. 11CD 00CD 77CD 66CD EECD FFCD 33CD 22CD AACD BBCD CCCD DDCD 66CD 77CD 88CD 99CD 
  9. *******
  10. FFB0 FFB1 FFB2 FFB3 FFB4 FFB5 FFB6 FFB7 FFB8 FFB9 FFBA FFBB FFBC FFBD FFBE FFBF 
  11. 44C8 55C8 BBC8 AAC8 99C8 88C8 FFC8 EEC8 CCC8 DDC8 22C8 33C8 00C8 11C8 66C8 77C8 
  12.  
  13. FFC0 FFC1 FFC2 FFC3 FFC4 FFC5 FFC6 FFC7 FFC8 FFC9 FFCA FFCB FFCC FFCD FFCE FFCF 
  14. DDC8 CCC8 44C8 55C8 66C8 77C8 00C8 11C8 55C8 44C8 BBC8 AAC8 99C8 88C8 FFC8 EEC8 
  15.  
  16. FFD0 FFD1 FFD2 FFD3 FFD4 FFD5 FFD6 FFD7 FFD8 FFD9 FFDA FFDB FFDC FFDD FFDE FFDF 
  17. AAC8 BBC8 55C8 44C8 77C8 66C8 11C8 00C8 22C8 33C8 CCC8 DDC8 EEC8 FFC8 88C8 99C8 
  18.  
  19. FFE0 FFE1 FFE2 FFE3 FFE4 FFE5 FFE6 FFE7 FFE8 FFE9 FFEA FFEB FFEC FFED FFEE FFEF 
  20. BBC8 AAC8 66C8 77C8 44C8 55C8 22C8 33C8 33C8 22C8 DDC8 CCC8 FFC8 EEC8 99C8 88C8 
  21.  
  22. FFF0 FFF1 FFF2 FFF3 FFF4 FFF5 FFF6 FFF7 FFF8 FFF9 FFFA FFFB FFFC FFFD FFFE FFFF 
  23. 88C8 99C8 77C8 66C8 55C8 44C8 33C8 22C8 00C8 11C8 EEC8 FFC8 CCC8 DDC8 AAC8 BBC8


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 27 ноября 2010 18:23 · Поправил: gazlan New!
Цитата · Личное сообщение · #25

PE_Kill пишет:
не пробовали проксорить


Просто не хочу заранее задаваться каким-то алго, т..к. уверен, что он должен проявиться сам, как только будет выполнена правильная разбивка на группы и составлены S-boxes. Наверняка, есть какой-то алгоритм их генерации, но, IMHO, правильнее разбить задачу на части, а не пытаться угадать решение. В моей практике были случаи, когда некое алго давало "почти правильные" значения по всей таблице, исключая, например, только правый нижний угол. Приходилось еще строить таблицу поправок. Это работало, но оригинальный алгоритм, наверняка, был устроен иначе.



P.S.

Вдогонку к предыдущему эташу.

Свой исходник я, наверное, потерял, но вот решения других знаменитостей

{ Атач доступен только для участников форума } - Re!Crypto.rar


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 27 ноября 2010 22:13 · Поправил: gazlan New!
Цитата · Личное сообщение · #26

Преодолел лень и написал форматтер, который "правильно" располагает данные в табличку 16*16.

Здесь - исходный файл и таблично сформатированные данные.

h**p://w*w.sendspace.com/file/b0nals

В эташе только сам форматтер, работающий с исходным файлом от TC.

А здесь мы наглядно видим пермутацию S-boxes для первых восьми строк групп (a[0] nibble) этой таблицы:

Code:
  1. D C F E   2 3 0 1   7 6 5 4   C D E F   1 0 3 2   6 7 4 5   B A 9 8   0 1 2 3
  2. 9 8 B A   6 7 4 5   3 2 1 0   8 9 A B   5 4 7 6   2 3 0 1   F E D C   4 5 6 7
  3. 5 4 7 6   A B 8 9   F E D C   4 5 6 7   9 8 B A   E F C D   3 2 1 0   8 9 A B
  4. 1 0 3 2   E F C D   B A 9 8   0 1 2 3   D C F E   A B 8 9   7 6 5 4   C D E F


Следовательно, корректный генератор пермутаций P должен выдать все 256 перестановок для младшего ниббла P[i], i = 0..255.

Теоретически, это может быть реализовано как XOR (все 256 значений), но пока непонятно, с чем именно. Придется слить столбцы в qword'ы и поглядеть как меняется константа при движении "вниз" по строкам.


{ Атач доступен только для участников форума } - qaf.rar


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 28 ноября 2010 00:53 · Поправил: gazlan New!
Цитата · Личное сообщение · #27

gazlan пишет:

Придется слить столбцы в qword'ы и поглядеть как меняется константа при движении "вниз" по строкам.


Пришлось... результат в эташе.

Пермутация, действительно, реализована через XOR, при этом константа (nibble) последовательно циклически пробегает значения F-5-B-D-7-D-B-5-F-... (XOR дельта, соответственно, A-E-6-A-A-6-E-A-...).

Напомню, что это только для младшего ниббла, закон изменения остальных еще предстоит выяснить.


{ Атач доступен только для участников форума } - QW.rar


Ранг: 169.6 (ветеран)
Статус: Участник

Создано: 28 ноября 2010 01:03 New!
Цитата · Личное сообщение · #28

gazlan пишет:
закон изменения остальных еще предстоит выяснить.


Для желающих, в эташе исходный текст программы QW (M$VC 6.0).


{ Атач доступен только для участников форума } - QW Src.rar

Ранг: 3.3 (гость)
Статус: Участник

Создано: 28 ноября 2010 03:39 New!
Цитата · Личное сообщение · #29

PE_Kill пишет:
byte2 = byte2 xor (CDh+5) = byte2 xor D2h

crypto пишет:
Что-то не получается для пары 5573->0000


как мне кажется получение второго байта можно описать следующей формулой (вход - q1q2, выход - a1a2):

Code:
  1. a2 = ((5*q1+0xCA+((q1-0x3E)&0xFF>>6))&0xFF)^q2


для пары 5573:
Code:
  1. a2 = ((0x1A9+0xCA+0)&0xFF)^73 = ((0x273)&0xFF)^0x73 = 0

Ранг: 12.6 (новичок)
Статус: Участник

Создано: 28 ноября 2010 05:02 · Поправил: V1KT0P New!
Цитата · Личное сообщение · #30

Если предположить, что манипуляция идет с 2-мя байтами, то вот на основе этого массива из 256 значений генерируется второй байт ответа. Проверял все варианты, работает правильно. Не могу понять как этот массив можно на лету генерировать.
Code:
  1. int main(int argc, char *argv[])
  2. {
  3.     unsigned char table[256]={0xCD,0xD2,0xD7,0xDC,0xE1,0xE6,0xEB,0xF0,0xF5,0xFA,0xFF,0x0 4,0x09,0x0E,0x13,0x18,0x1D,0x22,0x27,0x2C,0x31,0x36,0x3B,0x40,0x45,0x4 A,0x4F,0x54,0x59,0x5E,0x63,0x68,0x6D,0x72,0x77,0x7C,0x81,0x86,0x8B,0x9 0,0x95,0x9A,0x9F,0xA4,0xA9,0xAE,0xB3,0xB8,0xBD,0xC2,0xC7,0xCC,0xD1,0xD 6,0xDB,0xE0,0xE5,0xEA,0xEF,0xF4,0xF9,0xFE,0x00,0x05,0x0A,0x0F,0x14,0x1 9,0x1E,0x23,0x28,0x2D,0x32,0x37,0x3C,0x41,0x46,0x4B,0x50,0x55,0x5A,0x5 F,0x64,0x69,0x6E,0x73,0x78,0x7D,0x82,0x87,0x8C,0x91,0x96,0x9B,0xA0,0xA 5,0xAA,0xAF,0xB4,0xB9,0xBE,0xC3,0xC8,0xCD,0xD2,0xD7,0xDC,0xE1,0xE6,0xE B,0xF0,0xF5,0xFA,0xFF,0x04,0x09,0x0E,0x13,0x18,0x1D,0x22,0x27,0x2C,0x3 1,0x36,0x3B,0x41,0x46,0x4B,0x50,0x55,0x5A,0x5F,0x64,0x69,0x6E,0x73,0x7 8,0x7D,0x82,0x87,0x8C,0x91,0x96,0x9B,0xA0,0xA5,0xAA,0xAF,0xB4,0xB9,0xB E,0xC3,0xC8,0xCD,0xD2,0xD7,0xDC,0xE1,0xE6,0xEB,0xF0,0xF5,0xFA,0xFF,0x0 4,0x09,0x0E,0x13,0x18,0x1D,0x22,0x27,0x2C,0x31,0x36,0x3B,0x40,0x45,0x4 A,0x4F,0x54,0x59,0x5E,0x63,0x68,0x6D,0x72,0x77,0x7C,0x82,0x87,0x8C,0x9 1,0x96,0x9B,0xA0,0xA5,0xAA,0xAF,0xB4,0xB9,0xBE,0xC3,0xC8,0xCD,0xD2,0xD 7,0xDC,0xE1,0xE6,0xEB,0xF0,0xF5,0xFA,0xFF,0x04,0x09,0x0E,0x13,0x18,0x1 D,0x22,0x27,0x2C,0x31,0x36,0x3B,0x40,0x45,0x4A,0x4F,0x54,0x59,0x5E,0x6 3,0x68,0x6D,0x72,0x77,0x7C,0x81,0x86,0x8B,0x90,0x95,0x9A,0x9F,0xA4,0xA 9,0xAE,0xB3,0xB8,0xBD,0xC3,0xC8};
  4.     int i,z;
  5.     unsigned char a,b,A,B;
  6.     for(i=0;i<1;i=i)
  7.     {
  8.         cin >> hex >> z;
  9.         a=z;
  10.         cin >> hex >> z;
  11.         b=z;
  12.         B=table[a]^b;
  13.         cout << hex << (int)<< endl;
  14.         cin.get();
  15.     }
  16.     return 0;
  17. }

Блин вот я дурак, массив генерируется конгруэнтным генератором, осталось циферки подобрать. Там в начале увеличивается каждое следующее число на 5, но потом сбивается...

Вот хоть и странный, но компактный способ получить второй байт ответа. Осталось разобраться с первым.
Code:
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc, char *argv[]){
  4.     int i,z;
  5.     unsigned char a,b,A,B;
  6.     for(i=0;i<1;i=i){
  7.         cin >> hex >> z;
  8.         a=z;
  9.         cin >> hex >> z;
  10.         b=z;
  11.         if(a<62){B=((205+5*a)%256)^b;}else{
  12.         if(a<126){B=((202+5*a)%256)^b;}else{
  13.         if(a<190){B=((203+5*a)%256)^b;}else{
  14.         if(a<254){B=((204+5*a)%256)^b;}
  15.         else{B=((205+5*a)%256)^b;}}}}
  16.         cout << hex << (int)<< endl;
  17.         cin.get();}
  18.     return 0;
  19. }
. 1 . 2 . >>
 eXeL@B —› Основной форум —› Расшифровка алгоритма шифрования микропроцессорного устройства

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS