计算m-bus数据帧的校验和

逆向工程 十六进制 协议 二进制格式 十六进制
2021-06-18 01:07:19

我正在尝试计算 m-bus 数据帧的校验和。此 PDF 的第 1 页中,我能够读到帧的校验和“是根据上述数据的算术和计算得出的,不考虑进位数字”。我上面的数据是字节:

  1. 开始
  2. L场
  3. L场
  4. 开始
  5. C场
  6. 一个领域
  7. CI 字段
  8. 支票金额
  9. 停止

在第 2 页中,我们可以找到有效数据框的一个示例:

68 03 03 68 53 01 BB 0F 16

在十六进制中,校验和为 0F。不幸的是,我一定是做错了什么,因为我无法达到那个价值。

有人能解释一下这个算法是如何找到校验和的吗?

1个回答

仅一个样本永远不足以回答校验和查询您需要一堆样本来关联和查找模式

所以看看链接的pdf似乎很清楚

跳过开始并对数据求和并提取至少两个字节

skip     sum     mask 
x,x,x,x | y,y,... 0x000000ff = checksum

所以你发布的样本将是

skip         | sum            
68 , 3 ,3 68 | 53 , 01 , bb |  =

校验和

"{0:X2}" -f ((0x53+0x1+0xbb) -band 0x000000ff) = 0x0f seems to match 

在 pdf 中的其他序列上运行这个似乎符合

PS C:\> $a = "{0:X2}" -f ((0x53+0xfe+0x51+0x01+0x7a+0x01) -band 0x000000ff) ; $a
1E 
PS C:\> $a = "{0:X2}" -f ((0x73+0x01+0x51+0x01+0x7A+0x02 ) -band 0x000000ff) ; $a
42