LINUX.ORG.RU

Поиск алгоритма CRC

 , ,


0

4

имеется кусок данных из EEPROM для которого рассчитывается CRC и значение данной CRC, нужно узнать алгоритм подсчета. Вкурсе, что их бесчисленное множество может быть, но есть основания предполагать отсутствие экзотики - CRC там сугубо для защиты от случайных повреждений. Пробовал считать в НЕХ редакторе, в том числе подставляя полиномы вручную разные - без результата. Пробовал загнать в RevEng - not found.

Вот оно:

00760000014D01503E536201002500442D313332372D30352D53000000000031373139333930372E30313426F4EE540000000000030060000534C03E8D16C03E0E96C43E033C403F4E91403F0EB4443F88F08F3F0169903FB043933FD392C53FD58FC53FC9B5C53F9325C23F130DC23F796BC23F1DC6BE3FBB84BE3F6124BF3FE9AA163F1407D03FFC59044083DDC53F2D053EC09823444006001200B603EC0000001904440214096501510260260D001600D935420100350000000000000000000000000000000005008C00A6E1D53F20730040A374DC3F927589C4276872439E7251445610BDC2FC33614464E642C46A3761449B9333447FDA8D4478A942BF38D04BC4E0478A4476D82D3F9B9188C4955A95C4338B333FA57B36BFE65E672561B7DF3EEB1CDC3EF6434ABFA4B429423046624200000000015E883FDA0881BF3A297A3F4CAE67BFAF103CBE338DE83F7B249F3DC0D5BD3D

CRC подчеркнута.

Из логов проги взимодействующей с данной железкой выдернуто следующее:Whole EEPROM CRC = 1649622608 (0x62533e50)

Область по которой считается CRC идентифицирована внесением изменений и реакцией на них в виде EEPROM error либо ее отсутствием.

В ходе работы устройства данные изменяются, CRC пересчитывается, есть примеры как именно, можно и еще наделать.

Задача - вручную модифицировать данные и пересчитать CRC чтоб все работало. Прям очень надо, само содержимое EEPROM расшифровано, осталась только CRC.

Кто что посоветует?


Ответ на: комментарий от beastie

тут - http://habrahabr.ru/post/220245/ пишут что: «Пользовательские функции, которые представляют реализацию задач программы, а не ее обертку из API-шных и системных вызовов, дизассемблер не распознает и называет попросту sub_цифры.»

какие признаки могут указывать на то, что это таки нужный алгоритм?

halo
() автор топика
Ответ на: комментарий от halo

Тебе надо найти текст сообщения об ошибке «EEPROM error». Найти место, где эта строка используется для вывода сообщения. Потом найти все места, откуда этот код вызывается. Посмотреть, что там проверяют перед тем как прыгнуть на сообщение об ошибке. Выяснить, как считается то число, которое проверяют. Это и будет искомый код валидации EEPROM.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Пока понятно. Спасибо.

Как наковыряю соответствующих «подозрительных» кусков отпишусь, врядли сам осилю найти алгоритм, вся на форум надежда.

halo
() автор топика
Ответ на: комментарий от beastie

Спасибо за информацию. Как расковыряю отпишусь чего нашел.

halo
() автор топика
Ответ на: комментарий от i-rinat

Выяснить, как считается то число, которое проверяют. Это и будет искомый код валидации EEPROM.

можно не выяснять КАК..а просто всю проверку забить «nop» ом - ломать так ломать..

и не будет сломанный драйвер проверять сломанную прошивку :-)

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Идея хороша)

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

halo
() автор топика
Ответ на: Идея хороша) от halo

я бы не стал взрывать себе мозг - проверить несколько вариантов и если всё мимо, то просто грубый хак..

из возможных вариантов:

  • crc32 (широко применимы несколько вариаций)
  • оно-же но с учётом порядка байт (просто поменять местами чётные/нечётные)
  • xor по 4 байта с заполнением 00 55aa aa55 (или чем там ваш eeprom заполняется)

чисто теоретически на месте CRC может быть криптоподпись - а чтобы угадывать метод,ключ и сахарок - тут совсем не тот вариант :-)

на практике же - не может там быть там чё-то заумного. А максимально простой, опробованный и известный разрабам метод.

Поставь себя на место разработчика: тебе надо проверять целостность данных небольшого блока. В куче разных устройств. Будешь изобретать уникальный метод? нах. он нужен..

Естественно будет взято что-то готовое, быстрое и всем известное.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

xor по 4 байта с заполнением 00 55aa aa55 (или чем там ваш eeprom заполняется)

В середине длинная последовательность нулей, так что вряд ли.

anonymous
()
Ответ на: Пока понятно. Спасибо. от halo

Вот чего удалось наковырять

Файл EEPROMGenerator.exe, в нем такое:

seg000:00052981 aHoleEepromCrcU db 'hole EEPROM CRC = %u (0x%08x).',0Ah,0

но подозреваю, что это наоборот чтение текущего значения CRC

табличек расчета невидать

halo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.