小编MSu*_*rum的帖子

尝试对数据包校验和/ CRC /哈希进行反向工程

我有一个旧的,不再制造的带有串口的电子设备.我正在尝试对此设备中使用的数据包CRC /校验和/散列进行逆向工程.

任何有敏锐眼光,有敏锐数学技能的人都可以破解这个东西?

这是我到目前为止所知道的......

  • 每个数据包总是21个字节.对于CRC /校验和/散列,19个字节的数据加上2个字节
  • 因此,这里没有长度或头部字节.哈希计算中涉及所有19个字节.
  • 我有能力使用该设备生成一定数量的数据包
  • 我的第一个想法是数据包具有某种CRC-16计算
  • 所以我跟着在www.cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html中反转提示.
  • 验证我的数据包样本观察到上述网络链接中概述的"叠加原则".这表明它们具有数学XOR关系.

  • 开始感觉很好......但之后又难过了.无法确定CRC-16多项式.这些数据包哈希很可能不与CRC相关,而是一些家庭酿造方案.

  • 通过Ross N. Williams阅读"CRC错误检测算法的无痛指南"

  • 请参阅http://www.ross.net/crc/download/crc_v3.txt
  • 也用于应用:CRC Reveng - 逆向工程应用
  • 请参阅reveng.sourceforge.net
  • 仍然没有运气......
  • 不幸的是,我无法访问任何设备源/二进制代码

  • 还运行测试以查看是否使用了其他哈希,例如Fletcher的校验和

以下是我的数据包的各种样本.

0x47366B2EE00000000000751CEB5F3469543B585E2D
0x47366B2ED00000000000751CEB5F3469543B582A2C
0x47366B2EC80000000000751CEB5F3469543B580B2B
0x47366B2EC40000000000751CEB5F3469543B58BB2A
0x47366B2EC20040000000751CEB5F3469543B58DFE7
0x47366B2EC10000000000751CEB5F3469543B58A328
0x47366B2EC08000000000751CEB5F3469543B584127
0x47366B2EC04000000000751CEB5F3469543B588126
0x47366B2EC02000000000751CEB5F3469543B580525
0x47366B2EC01000000000751CEB5F3469543B580124

请注意以下有关这些数据包的信息......

  • CRC在数据包的最后2个字节上找到.
  • 如果我查看逻辑分析仪上的位,我已将字节表示为MSB优先
  • 因此,数据包0x47366B2EE00000000000751CEB5F3469543B585E2D在二进制中看作:
  • 01000111 ................................................. ............ 00101101
  • (0X47)............................................... ......................(0x2D)

  • 我不知道我的系统是大端还是小端,但是确定的字节是LSB优先的

  • 注意,对于上述10个数据包样本,每个包通过1位移位到10位位置而不同.除了第5个数据包,我不得不改变2位
  • 请参阅数据包的0x47366B2E部分之后的数据字节.

  • 只有模式我看到出现的是每个数据包上的最后一个字节递减一(2D,2C,...).(除了第5个数据包,我必须更改2位)

  • 最后一个字节不是某种序列号,因为我可以在任何时候以相同的值生成它们.
  • 但它可能暗示了所使用的数学哈希.

任何帮助表示赞赏!

hash checksum crc error-detection crc16

24
推荐指数
1
解决办法
2357
查看次数

标签 统计

checksum ×1

crc ×1

crc16 ×1

error-detection ×1

hash ×1