Методы определения 16-битного алгоритма CRC / Checksum, используемого исполняемым файлом Windows CE?

Мне нужно перепроектировать алгоритм CRC / Checksum, реализованный исполняемым файлом Windows CE. Будучи пропротокольным протоколом, он ничего не говорит об алгоритме CRC / контрольной суммы. Однако есть консольный интерфейс, который сообщает правильную / вычисленную контрольную сумму, и я могу создавать свои собственные сообщения со случайными битами, если протокол сообщений правильный:

Я заметил это,

Changing single bit in message changes checksum bytes completely.

Algorithm seems to be position dependent as I fed some single 1 bit messages in various message data positions with rest of the bits zero and all the time console reported different checksum. If it was simple additive checksum, checksum would have been identical.

Я применил общие алгоритмы XOR, LRC, Аддитивные контрольные суммы, общие полиномы CRC (Standerd, CCITT, X-модем) и прошел [эссе обратного инжиниринга CRC] [2], но, к сожалению, я не могу пройти мимо вывода полинома, потому что тип сообщения фиксирован, поэтому не может создать одно 1-битное сообщение.

Мои вопросы:

Are there any CRC/checksum algorithm properties that I can test against messages to determine if algorithm is checksum or polynomial based CRC?

Is there any way to relate error message seen in program disassembly with corrosponding assembly instructions?

What are the ways to debug/pinpoint disassembly code the moment it reports correct checksum on console? Memory dump or something?

Ответы на вопрос(1)

Ваш ответ на вопрос