![]() |
|
|
![]()
|
|
| arlekin1980 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Добрый день . Не могу понять алгоритм вычисления суммы.
Есть файлик у него в конец по смещению(-2) записывается 1 байтовое число по какому-то принципу, единственное что выяснилось то что байты 0х00 и 0хFF не учитываются в подсчете. И если изменить какой-нибудь байт предположим прибавим к нему 1, то контрольное число уменьшиться на 1 и наоборот если убавим на 1 оно увеличится. Вот такой примерчик попробовал:
результат не тот что в конце файла: - 583A а долхно 0х79 файлик прилагается. Если есть идеи , помогите. Это сообщение отредактировал(а) arlekin1980 - 19.7.2011, 18:57 Присоединённый файл ( Кол-во скачиваний: 4 )
config4_74.zip 0,60 Kb |
|||
|
||||
| voral |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
А если +/- 2? Проверяли или нет. Нет ли заголовка не участвующего в подсчете? Как вы определили, что 0x00 и 0xFF не участвуют? Т.е. если поменять 0xFF на 0xFE то сумма измениться или нет? Добавлено через 3 минуты и 6 секунд D-LINK DES-2108 ? Добавлено через 14 минут и 29 секунд вероятно тут нечто типа такого
Т.е. инвертируем каждый байт (этим достигается, что при увеличении байта мы получаем уменьшение суммы) складываем. А потом накладываем маску 0xFF. Еще важно знать, что будет если 0x00 поменять на 0x03 Еще можно поварьировать знаковые и беззнаковые. А если знаковые то может нужно брать по модулю. |
||||
|
|||||
| arlekin1980 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Аналогично, если байт увеличить на 2 или ... до FE , то контрольный байт уменьшится на столько-же, также при уменьшение. Заголовок участвует в подсчете
а вот я не знаю но если такой файл залить то ругнется контрольной суммой и еще можно 0x00 заменить на 0xFF то контрольный байт не изменится
|
||||||
|
|||||||
| voral |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Ну этого достаточно. Т.е. используются все байты файла кроме последних двух? Это надо знать наверняка. Может быть следущее и это надо пробовать на нескольких вариантов такого файла: Мне кажется: 1. Тут надо вычитать значение очередного байта или прибавлять инвертированное значение 2. Надо пробовать использовать безнаковый тип переменной 3. В случае знакового типа возможно надо брать модуль 4. Возможно необходимо задать какое-то смещение к результату. Т.е. к результату прибавить/вычесть некий байт 5. Возможно необходимо задать какое-то смещение к каждому байту. Т.е. к каждому байту прибавить/вычесть некий байт Надо провести эксперименты со всеми комбинациями из этих пунктов. А для начала нужно провести эксперимент. Менять значение некоего байта от 0 до 0xFF с шагом 1. И выявить все ли линейно. |
|||
|
||||
| arlekin1980 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Все это я пробовал. Но может быть в вашем понимание это выглядит немножко не так как я пробовал писать. Может кодик-пример подкините.
все линейно - пробовали меняли. К примеру если предположим в 10 байте убавить на 1 то в контр.сумме он уменьшиться ( было кч - 0х00 станет 0x01), а за ним 15 байт увеличим на 2 (было 0xFE станет 01) |
||||
|
|||||
| voral |
|
||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 16.3.2008 Где: Иваново Репутация: нет Всего: нет |
Так а тут простой код (правада на си) 1. Тут надо вычитать значение очередного байта или прибавлять инвертированное значение
2. Надо пробовать использовать безнаковый тип переменной
3. В случае знакового типа возможно надо брать модуль
тут надо выяснить как функция работает с однобайтовым значением 4. Возможно необходимо задать какое-то смещение к результату. Т.е. к результату прибавить/вычесть некий байт
где A от 0x00 до 0xFF 5. Возможно необходимо задать какое-то смещение к каждому байту. Т.е. к каждому байту прибавить/вычесть некий байт
где A от 0x00 до 0xFF Ну и смешивание всех этих вариантов в различных комбинациях... Если учесть, что только для чистых последних двух пунктов нужно по 256 прогонов, то понимаете сколько экспериментов нужно провести |
||||||||||
|
|||||||||||
| arlekin1980 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Не помогло смещение ни к байту, ни к результату для сравнения вот другой конфиг
Может глядя на их возникнет другая идея У меня они уже кончились Это сообщение отредактировал(а) arlekin1980 - 20.7.2011, 12:57 Присоединённый файл ( Кол-во скачиваний: 2 )
config5_100e.bin 32,04 Kb |
|||
|
||||
| arlekin1980 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
||||
|
||||
| arlekin1980 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 19.7.2011 Репутация: нет Всего: нет |
Все видать гуру мне не помогут в моей беде.
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |