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

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


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

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

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

 eXeL@B —› Вопросы новичков —› Вычисление контрольной суммы
Посл.ответ Сообщение

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

Создано: 29 сентября 2017 17:58 New!
Цитата · Личное сообщение · #1

Всем доброго дня!

Перенесите тему если не по адресу...

Ломаю закрытый протокол. Пытаюсь работать с устройством через COM порт. Работа, как обычно для COM представляет собой обмен последовательностями HEX байтов. Сами последовательности я проснифферил, тут проблем нет. Проблема в том, что не удаётся раскусить алгоритм рассчёта контрольной суммы, а без этого весь труд насмарку. Кое-какой систематизации удалось добиться методом раздумий и анализа, считай методом тыка. Может найдётся кто-то головастый в математике и сможет мне помочь? Что нужно предоставить для облегчения помощи?

Начну пожалуй так:

0x02, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20

0x02 - начало сообщения (по идее отбрасывается)
Жирным выделил - 4 значащих байта(они изменяются, что, собственно, и влияет на значение контрольной суммы)
Последний байт 0x20- собственно искомая контрольная сумма(всегда 1 HEX byte).

Сейчас я пытаюсь двигаться так: вычисляю XOR8+некий коэффициент. По некоему наитию скорее решил что это сработает.

К примеру, для:

0x01-0x0f - коэффициент равен +0x10
0x10-1F = +0x30
0x20-2F = -0x30
30-3F = -0x10
И далее всё повторяется циклически(+10+30-30-10) вплоть до FF.


Дальше - хуже. Если к примеру заполнены 2 байта из 4, то коэффициент вычисляется по наибольшему значению. Таблица смещений продолжает работать, при условии что один из байтов не превышает 0x0f. Если превышает начинается другая чехарда и так далее.

Я понимаю что я не математик и поэтому делаю дурную работу. Может тут всё на самом деле просто? Убеждён, используется определённый алгоритм...

Ранг: 68.4 (постоянный)
Статус: Участник

Создано: 29 сентября 2017 18:07 · Поправил: kunix New!
Цитата · Личное сообщение · #2

20 00 - заголовок
30 - длина полезной нагрузки
<полезная нагрузка>
20 - контрольная сумма.
А чем плохо контрольная сумма, равная XOR всех байт полезной нагрузки?
Не пошло так?

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

Создано: 29 сентября 2017 18:17 New!
Цитата · Личное сообщение · #3

Уполз пробовать.

Ранг: 68.4 (постоянный)
Статус: Участник

Создано: 29 сентября 2017 18:23 · Поправил: kunix New!
Цитата · Личное сообщение · #4

Еще возможно так:
20 - заголовок
00 30 - длина полезной нагрузки, big endian число.
И в полезной нагрузке тоже все числа big endian.

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

Создано: 29 сентября 2017 18:29 New!
Цитата · Личное сообщение · #5

Пока что получается. Если всё срастётся с меня море пива...
 eXeL@B —› Вопросы новичков —› Вычисление контрольной суммы

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

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