|
最近较为热门的PLC解密话题要数台湾丰炜的了,那么今天我也来跟大家扒一扒它的通讯协议。。。
<丰炜PLC>前面的16进制是监控发送的内容,后面引号内是实际字符, 能够分析出最后两个字节(估计是校验)是如何计算出的吗
82 30 30 B8 30 B1 A0 A0 A0 A0 A0 A0 A0 03 44 C3 “1”
82 30 30 B8 30 B2 A0 A0 A0 A0 A0 A0 A0 03 44 44 “2”
82 30 30 B8 30 33 A0 A0 A0 A0 A0 A0 A0 03 44 C5 “3
82 30 30 B8 30 B4 A0 A0 A0 A0 A0 A0 A0 03 44 C6 “4”
82 30 30 B8 30 35 A0 A0 A0 A0 A0 A0 A0 03 C5 30 “5”
82 30 30 B8 30 36 A0 A0 A0 A0 A0 A0 A0 03 C5 B1 "6"
82 30 30 B8 30 B1 B2 A0 A0 A0 A0 A0 A0 03 C5 C5 "12"
82 30 30 B8 30 B2 B1 A0 A0 A0 A0 A0 A0 03 C5 C5 "21"
82 30 30 B8 30 33 B2 B1 A0 A0 A0 A0 A0 03 30 B1 "321"
82 30 30 B8 30 B2 B1 33 A0 A0 A0 A0 A0 03 30 B1 "213"
82 30 30 B8 30 B8 B7 36 35 B4 33 B2 B1 03 36 C6 "87654321"
82 30 30 B8 30 B1 B2 33 B4 35 36 B7 B8 03 36 C6 "12345678"
82 30 30 B8 30 E1 E2 63 E4 65 66 E7 E8 03 C5 C6 "abcdefgh"
82 30 30 B8 30 41 42 C3 44 C5 C6 47 48 03 C5 C6 "ABCDEFGH"
82 30 30 B8 30 71 E1 FA 77 F3 78 65 E4 03 B4 B2 "qazwsxed"
82 30 30 B8 30 FA 78 63 F6 E2 EE ED 6C 03 33 C6 "zxcvbnml"
数字1、2、4、7、8的ASKII码加80H,3、5、6、9则不变,
继续使用其ASCII码。
大写A、B、D、G、H使用其ASCII码不变,C、E、F的ASCII码加80H。
其他规律相同都是ASCII码数据加80H.
数据SP空格的ASCII码是20,加80则等于A0.
至于校验码的算法是这样的:
03是终止符,后面两位是校验码,先看这一段
82 30 30 B8 30 B1 A0 A0 A0 A0 A0 A0 A0 03 44 C3 密码为1位数 “1” 运算后的结果是6DB 校验码为44 C3,有人会说这个6DB跟校验码毫无关系嘛!不是加法运算那么简单吧!那么我来跟你分析一下这个44 C3是怎么来的。
你打开计算器用16进制计算,从82一直加到03等于6DB然后再加1等于6DC,取运算结果6DC最后两位(6DC Mod 100=DC)是DC,那么DC的ASCII码就是 44 43,你看一下上面的加80说法,44不变,43是要加80的,那么43+80=C3所以校验码就是 44 C3,以下雷同。
这个加80也是有规律的,找到了规律你自己用VB做个解密软件就行了,
真的找不到破解方法的话可以用这种方法穷举,时间就是长点,不过波特率能够设置的够高的话也很快
至于加80的规律你可以对照ASCII码表,或许能找到加与不加的规律,你可以找一下读取系统块的指令,把系统数据,全部读出来就可以找到密码了,还有就是你可以比较plc然后监控所比较的数据,你会豁然开朗的,忽逢桃花林。。。
以上就是丰炜的解密通讯源码。关于加80H的规律就告诉你吧!类似于补码,高位加1,一个字节是8位,高4位8421码中的高位加1就是8,低4位是0,就是80,产生的运算结果就是实际加了16进制的80。那么哪些数据才要高位加1呢?规律就是本数据的2进制数的1的个数为奇数则加80H,1的个数为偶数则不变,不加80
比如1=1 2=10 4=100 7=111 1的个数都是奇数
3=11 5=101 6=110 9=1001 1的数据个数是偶数
奇数则加80H,偶数则不加,这就是丰炜PLC的加密源代码计算方法
至于说市面上玲琅满目的软件中各个品牌都有,唯独没有丰炜的软件问世,为什么??校验码难算,补码难以确定,现在明白了吗?你可以制作通讯软件了。
状态探测
82 30 30 30 33 03 C3 36
06 30 30 30 33 30 30 30 30 30 C3 03 C6 39停止
06 30 30 30 33 30 30 30 30 30 44 03 C6 41运行
运行状态
82 30 30 30 B1 03 C3 B4
06 30 30 30 B1 30 30 03 B2 B4
编程状态
82 30 30 30 B2 03 C3 35
06 30 30 30 B2 30 30 03 B2 35
输入密码
82 30 30 B8 B1 B1 B1 B1 B1 B1 B1 B1 B1 03 35 B4
82 30 30 B8 30 B2 B2 B2 B2 B2 B2 B2 B2 03 35 42
82 30 30 B8 30 33 33 33 33 33 33 33 33 03 36 33
06 30 30 B8 30 B2 33 03 33 30密码错误返回
06 30 30 B8 30 30 30 03 B2 42密码正确
|
|