如何识别IRP_MJ_READ捕获的二进制协议的CRC-16变体及校验类型?
分析IRP_MJ_READ捕获的11字节协议校验和
结论
- 最后2字节确实是CRC-16校验和
- 采用的是**CRC-16-IBM(又称CRC-16-ANSI)**配置,具体参数如下:
- 多项式:
0x8005 - 初始值:
0xFFFF - 输入处理:每个字节按位反转(LSB优先)
- 输出处理:最终CRC值按位反转
- 存储方式:校验和以小端字节序存储(16位CRC值的低字节在前,高字节在后)
- 多项式:
验证过程
针对提供的所有样本,取前9字节数据按上述CRC配置计算后,将结果反转字节序即可匹配末尾的2字节校验和:
- 样本1:前9字节
00 02 c1 00 10 00 00 00 b2→ 计算CRC为0x546F→ 反转字节序得到0x6F54,与样本末尾6f 54完全匹配 - 样本2:前9字节
00 02 c1 00 02 00 00 00 b2→ 计算CRC为0xBCE5→ 反转字节序得到0xE5BC,与样本末尾e5 bc匹配 - 样本3:前9字节
00 02 c1 00 0a 00 00 00 b2→ 计算CRC为0x6380→ 反转字节序得到0x8063,与样本末尾80 63匹配 - 其余样本均符合此规律,验证无误
内容的提问来源于stack exchange,提问作者Hasan Abo Ali Alhaj Juma
相关产品推荐
相关产品推荐

