|
Взлом протокола обмена, определение алгоритма подсчета CRC |
|
|
|
Apr 6 2018, 13:08
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Коллеги! Прошу помочь, хотя бы советом, в решении проблемы реверс-инжиниринга ИК-протокола обмена. Есть "фирменная" система, состоящая из приемника ИК-сигналов и кучи передатчиков сигнала. Передатчики посылают пакеты данных, в которых есть их собственный адрес и еще что-то. Сам обмен я просниффил, оказалось достаточно просто, в пакете данных нашел поля адреса, в этом я точно уверен. Все остальные данные пока не известны, где находятся в пакете, но главное - в конце пакета (подозреваю очень сильно!) есть поле какой-то контрольной суммы. Во всяком случае, при изменении буквально 1-2 битов в пакете 4 последних байта сильно меняются, что наталкивает... Так вот: каким способом можно вычислить алгоритм, по которому ведется подсчет этой КС? Прошивка МК недоступна, естественно... Я пробовал брутфорсить при помощи утилиты reveng, но ничего не вышло... Что посоветуете? Вот просниффленные пакеты с трех разных передатчиков: Код 73 07 61 = BA AF 20 05 1C 00 00 00 00 00 00 00 00 00 00 09 0A 00 00 00 00 00 00 80 00 00 00 41 41 00 3C 12 = 71 6D 62 87 73 07 61 = BA AF 40 60 18 00 00 00 00 00 00 00 00 00 00 09 0A 00 00 00 00 00 00 80 00 00 00 41 41 00 3C 12 = 3B 80 07 A9 73 07 61 = BA AF 60 00 16 00 00 00 00 00 00 00 00 00 00 09 0A 00 00 00 00 00 00 80 00 00 00 41 41 00 3C 12 = 01 6D 67 BD 73 07 61 = BA AF 20 05 12 00 00 00 00 00 00 00 00 00 00 09 0A 00 00 00 00 00 00 80 00 00 00 41 41 00 3C 12 = 71 20 62 88
72 4F 1B = BA 9C 60 00 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 = 01 30 E7 F6 72 4F 1B = BA 9C 40 62 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 = D0 13 85 05 72 4F 1B = BA 9C 60 00 5E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 = 01 12 E7 CA 72 4F 1B = BA 9C 20 0B 5E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 = 0B AA EC 80
73 10 07 = 25 41 20 04 1E 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 12 = 47 06 62 4C 73 10 07 = 25 41 40 60 1C 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 12 = 19 20 06 70 73 10 07 = 25 41 60 00 1A 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 12 = 01 6A 66 4E 73 10 07 = 25 41 20 04 18 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 12 = 78 0C 4E 45 знаками равенства я отделил в начале область адреса (я уверен, что это так) и в конце - область контрольной суммы (100% уверенности в назначении этих байтов нет)
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Apr 10 2018, 07:51
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Я набрал еще пакетов для статистики. Выяснилось, что пакеты передатчиков, которые полежали два дня сильно отличаются от ранее полученных, т.е. пока девайсы спят, они живут. Но каких-то кардинальных знаний новые пакеты не прибавили. Каждая строка в нижеследующих дампах - это отдельный пакет, интервалы между передачами пакетов примерно одинаковые - секунд 15-20. Код 7310072541 2004 48 0000000000000000000000008240C1000041824244404242003F12 4B89E468 7310072541 4060 48 0000000000000000000000008240C1000041824244404242003F12 47778004 7310072541 6000 48 0000000000000000000000008240C1000041824244404242003F12 0166E062 7310072541 2004 48 0000000000000000000000008240C1000041824244404242003F12 4B89E468 7310072541 4060 48 0000000000000000000000008240C1000041824244404242003F12 47778004 7310072541 6000 46 0000000000000000000000008240C1000041824244404242003F12 01E6E06C 7310072541 2004 46 0000000000000000000000008240C1000041824244404242003F12 4B09E466 7310072541 4060 46 0000000000000000000000008240C1000041824244404242003F12 47F7800A 7310072541 6000 46 0000000000000000000000008240C1000041824244404242003F12 01E6E06C 7310072541 2004 46 0000000000000000000000008240C1000041824244404242003F12 4C0EE461
724F1BBA9C 6100 10 0000000000000001000002000081840000000000000000005C3C12 01FD3D39 724F1BBA9C 210B 10 0000000000000001000002000081840000000000000000005C3C12 0C423674 724F1BBA9C 4162 10 0000000000000001000002000081840000000000000000005C3C12 FD795FE5 724F1BBA9C 6100 10 0000000000000001000002000081840000000000000000005C3C12 01FD3D39 724F1BBA9C 210B 10 0000000000000001000002000081840000000000000000005C3C12 0C423674 724F1BBA9C 4162 10 0000000000000001000002000081840000000000000000005C3C12 FD795FE5 724F1BBA9C 6100 10 0000000000000001000002000081840000000000000000005C3C12 01FD3D39 724F1BBA9C 210B 10 0000000000000001000002000081840000000000000000005C3C12 0D433675 724F1BBA9C 4162 10 0000000000000001000002000081840000000000000000005C3C12 FD795FE5 724F1BBA9C 6100 10 0000000000000001000002000081840000000000000000005C3C12 01FD3D39
730761BAAF 2005 38 000000000000000000000000408080000000000000000000000012 72A86A57 730761BAAF 4060 38 000000000000000000000000408080000000000000000000000012 699B0F2C 730761BAAF 6000 38 000000000000000000000000408080000000000000000000000012 01A46F64 730761BAAF 2005 38 000000000000000000000000408080000000000000000000000012 72A86A57 730761BAAF 4060 38 000000000000000000000000408080000000000000000000000012 699B0F2C 730761BAAF 6000 38 000000000000000000000000408080000000000000000000000012 01A46F64 730761BAAF 2005 36 000000000000000000000000408080000000000000000000000012 73296A58 730761BAAF 4060 36 000000000000000000000000408080000000000000000000000012 691B0F22 730761BAAF 6000 36 000000000000000000000000408080000000000000000000000012 01246F6A 730761BAAF 2005 36 000000000000000000000000408080000000000000000000000012 73296A58
734F33656A 2000 76 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 01073806 734F33656A 4000 6C 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 03D0387E 734F33656A 600C 6C 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 830234DE 734F33656A 2000 6C 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 0199381C 734F33656A 4000 6C 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 03D0387E 734F33656A 600C 6C 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 830234DE 734F33656A 2000 6C 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 0199381C 734F33656A 4000 6C 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 03D0387E 734F33656A 600C 6A 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 830734D8 734F33656A 2000 6A 7B7B7B7B7B7B7B7B7B7B7B000C0C0C0C0C0C0C0C0C0C0C0C000012 029F3819 Однозначно очевидно, что первые 5 байт - это адрес передатчика, хотя значащих байт там только 3 и то без старших 2 бит. XOR этих 5-и байтов всегда равен 00, т.е. последний байт - это XOR-КС, а предыдущий - какой-то довесок, подгоняющий КС до нуля. Следующие 2 байта абсолютно закономерно от передачи к передаче меняются попарно и по кругу, т.е. каждая третья передача будет иметь те же самые значения в этих байтах. Закономерность явно есть, но что это может значить? передавать 3 варианта по кругу - зачем?! Следующий байт от передачи к передаче имеет тенденцию к закономерному уменьшению, но после длительной паузами между передачами значение байта снова возрастает (по показанным дампам это не видно, но это так) - подозреваю, что это напряжение на литиевой батарейке. Дальше - неизвестно что, но всегда заканчивается на 12. Честно говоря, это как-то настораживает... Последние 4 байта тоже выявили некую закономерность: четвертому от конца байту всегда в пределах одного и того же передатчика соответствует четко определенное значение второго от конца байта, аналогично и для следующей пары последних байт. Но все эти закономерности пока никак не помогли мне понять, как же, блин, считаются эти КС... Пробовал при помощи reveng подбирать полиномы - ни для 16-битных, ни тем более для 32-битных не находится. пробовал брать часть пакета без адреса - тот же результат. пробовал брать без 1 или 2 последних байт, пробовал в последних 4 байтах удалять через 1, т.е. оставлять 1-3 или 2-4 байты - нулевой результат  Сегодня вечером планирую приступить к генерации пакетов самостоятельно, и буду смотреть, как отреагирует девайс. Хуже всего то, что девайс тоже закрытый, и либо показывает часть адреса передатчика, либо показывает ошибку. Судить об остальных частях пакета нет возможности
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Apr 11 2018, 08:54
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(vesago @ Apr 11 2018, 10:01)  В таге у меня стоял MSP430. Я пробовал подцепиться - залочен был. Аналитически, подбором алгоритма чисто, тяжковато расколоть. Надо как-то заставить дивайс незначительно данные менять. Или слепить эмулятор и перебором пытаться формировать пакеты, пока не скормятся. Я, помню, тоже пытался и микрофон отпаивать, и не шевелил, а он все равно вываливал кучу измененных данных. У меня все то же самое, разве что я даже не пытался подключаться к контроллеру по очевидной причине защищенности. А остальное - так и есть. Данные меняются сами по себе, связи с внешним миром при этом не прослеживается. Но кое-что по формату стало понятнее... кроме КС.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Apr 11 2018, 09:17
|
Тутэйшы
   
Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263

|
Цитата(Baser @ Apr 11 2018, 12:00)  А какой тип и ревизия? У них кое-где был дырявый бутлодер, который до сих пор выпускают. У меня вот такой
Наверное, все-таки неподцепливался. Не вижу следов пайки. Надо будет попробовать из спортивного интереса. Может и незалочен. По всякому бывает. В последнее время я работал с 6 буржуйскими платами. Из них 4 незалочены.
|
|
|
|
|
Apr 11 2018, 09:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(ARV @ Apr 8 2018, 21:22)  Приемник пока один. Статистику по пакетам буду набирать для имеющихся передатчиков... Потом буду гондобить свой передатчик и пытаться обмануть приемник... Пока это все, что в моих силах. 1. Приемник может быть (и скорее всего для этого применения есть) селективный. (принимает только "свои" корректные пакеты). 2. Если используется даже примитивное шифрование данных (XOR по всем или части данных), то разломать будет трудно. Под разломать я понимаю разобраться как формируется CRC или чего оно там. CRC может считаться с динамически изменяемым стартовым значением. Эти 2 или 4 байта могут передаваться в начале пакета (не обязательно). 3. То что меняется в пакетах - возможно - температура чипа. (не помню в F149 есть или нет встроенный ADC температуры) Онаже может использоваться для кодирования в качестве "случайного" числа. Также возможно передается данные о состоянии батарей.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|