S7comm协议中关于数据字段的分析
实验环境:西门子S7-300、CUP 315-2DP、step7 5.6、wireshark
目的:利用抓取的数据包还原PLC代码
利用wireshark抓取PC与PLC传输的数据,其中包含了PLC代码为function[Download block]的数据包,如图1。
图1
打开这个包,经过多次实验分析发现data字段的格式大致为:7070...0000+xx+0000 0000+???? ????+30e3...1400+code+6500...0100+????+0000 0000 0000 0000,其中xx部分代表了data的长度。
图2
图3所示的PLC代码在数据包中的内容为图2中圈红部分:0a 89 01 8a 01 8b 01 d8 80。多次实验发现:其中0a转换成十进制为10,用其除以2再减去1就得到指令个数4。而后面的部分则两个字节为一个指令。其格式为:_ _ _ _,其中后三位代表了存储地址,第一位代表了操作类型。第二位的大小还代表了串联或并联,目前实验得出当第一位为8,第二位为0-7(代表与下一指令串联),第二位为8-F(代表与上一指令并联)。这里串联并联应该还与第一位(操作类型)有关,目前我只做了写简单的实验,但原理可能就是这样。
图3
例子:
data : addr opt
81 01 : M1.1 与
82 01 : M1.2 与
a1 01 : M1.1 取反
data :opt
81 01 82 01 : M1.1 && M1.2
81 01 a2 01 : M1.1 && ^M1.2
89 01 8a 01 : M1.1 || M1.2
今天大致找到了分析方法,之后的实验结果会陆续更新。