oyle
级别: 探索解密
精华主题: 0
发帖数量: 5 个
工控威望: 123 点
下载积分: 523 分
在线时间: 10(小时)
注册时间: 2011-09-20
最后登录: 2018-07-10
查看oyle的 主题 / 回贴
楼主  发表于: 2013-05-28 15:45
如题,现在大家都知道丰炜的PLC难解密,于是丰炜的PLC在我目前这个行业很流行,随处可见。那么丰炜的PLC到底能不能解呢?论坛里的郝大侠很久前就发过一个帖子,为我等拉开了破解丰炜PLC的序幕!无奈,再也没有回音了,还是自己动手,自力更生吧!
进入正题:
        丰炜PLC密码传递方式是:在电脑上键入密码,传回PLC主机,在PLC内部完成比对,然后将结果回馈到电脑。整个过程不限制次数!可以无限次的猜测密码,这也是软件破解的理论根据。,这是最原始的破解方法,由于不限制次数,理论上可以得到正确的密码!

密码比对正确的回应是:06 30 30 B8 30 30 30 03 B2 42
密码比对错误的回应是:06 30 30 B8 30 B2 33 03 33 30


自己定义一个函数,功能是:如果1的个数为奇数个,则返回1,如果1的个数为偶数个,则返回0。这个函数在丰炜的解密当中,相当有用。为什么这样说呢?郝大侠早说过这个规律:

30 A0 A0 A0 A0 A0 A0 A0 03 44 42 /0

B1 A0 A0 A0 A0 A0 A0 A0 03 44 C3 /1

B2 A0 A0 A0 A0 A0 A0 A0 03 44 44 /2
                
33 A0 A0 A0 A0 A0 A0 A0 03 44 C5 /3

B4 A0 A0 A0 A0 A0 A0 A0 03 44 C6 /4

35 A0 A0 A0 A0 A0 A0 A0 03 C5 30 /5

36 A0 A0 A0 A0 A0 A0 A0 03 C5 B1 /6

B7 A0 A0 A0 A0 A0 A0 A0 03 C5 B2 /7

B8 A0 A0 A0 A0 A0 A0 A0 03 C5 33 /8

39 A0 A0 A0 A0 A0 A0 A0 03 C5 B4 /9

30 33 35 36 39 B1 B2 B4 03 36 39 /03569124

30 33 35 36 B1 B2 B4 B7 03 36 B7 /03561247

B1 B2 B4 B7 B8 A0 A0 A0 03 33 B1 /12478

30 33 35 36 39 A0 A0 A0 03 33 B2 /03569

63 65 66 69 6A 6C 6F 71 03 B1 B8 /cefijloq

72 74 77 78 A0 A0 A0 A0 03 B2 30 /rtwx

E1 E2 E4 E7 E8 EB ED EE 03 30 B7 /abdghkmn

F0 F3 F5 F6 F9 FA A0 A0 03 C3 C3 /psuvyz

任取一位密码的ASCII码 根据上面函数校验结果是奇数,就加80H;是偶数则不加80H,但是加80H的规律仅适用于猜测的密码。
下面就剩下一个难题:校验码的规则!
如果 有了校验码的规则,那完全能自己编写一个自动填密码的程序,一刻不停的向丰炜PLC发动冲击!直到它发来一个正确的回应:06 30 30 B8 30 30 30 03 B2 42
oyle
级别: 探索解密
精华主题: 0
发帖数量: 5 个
工控威望: 123 点
下载积分: 523 分
在线时间: 10(小时)
注册时间: 2011-09-20
最后登录: 2018-07-10
查看oyle的 主题 / 回贴
1楼  发表于: 2013-05-29 08:31
的确,解密就像摸着石头过河,此路不通,你可以绕着走嘛!走之前,给这条路插上一个路牌,走不通是今天的事,也许睡一觉就迷窦顿开!要的就是不骄不躁,不离不弃
进入正题:
    昨天提供的一条思路是:从正面猜测密码校验规则,该语句82 30 30 B8 30 E1 A0 A0 A0 A0 A0 A0 A0 03 30 C3  /pass(a) 比对的密码是小写a,从第五字节开始向后铺开:
E1 A0 A0 A0 A0 A0 A0 A0,丰炜默认有八位密码,你没填上的那些空缺丰炜会自动给你补上 A0 ,这里只输入了一个小写a,于是丰炜补了7个 A0 : E1 A0 A0 A0 A0 A0 A0 A0。这里再重复一下,密码字符的处理规则:对每一个密码字符,参照它的ASCII码,如小写a,ASCII码是61(Hex),把61H化成二进制,对1的个数进行奇偶校验,是奇数个加80H,是偶数个原封不动,如大写字母 A 100,0001  B100,0010 D100,0100,G100,0111。这条规则早就是郝大侠给提出的,经过我反复比对,实践证明准确可靠。26个小写字母,26个大写字母,10个阿拉伯数字经过奇偶性校验后分为两类,原ASCII码再加80H的有:小写abdghkmnpsuvyz,大写CEFIJLOQRTWX,数字12478,其他的保持ASCII码原封不动。
   这一条规则,贯穿着整个解密过程,各种思路都用到这条规则!感谢郝大侠
  
oyle
级别: 探索解密
精华主题: 0
发帖数量: 5 个
工控威望: 123 点
下载积分: 523 分
在线时间: 10(小时)
注册时间: 2011-09-20
最后登录: 2018-07-10
查看oyle的 主题 / 回贴
2楼  发表于: 2013-05-29 08:51
今天刚上班,今天开始另一条思路:深挖指令地址规则!

82 30 30 B8 30 E1 A0 A0 A0 A0 A0 A0 A0 03 30 C3  /pass(a) 比对的密码是小写a

这一条指令给PLC的动作是:我给你密码,你拿着!你回家比比看看对是不对,回来告诉我一声!

82 30 30 B8 B1 B1 B2 33 B4 35 36 B7 B8 03 B7 30 / pass set  这条指令给PLC:喂!我给你密码,你拿着!回家挂在门上,咱家终于有锁了!---那么PLC回家之后把锁挂在哪儿呢?
                             /12345678
06 30 30 B8 B1 30 30 03 B2 C3 /receive done! PLC给我回答一句:老公,我回家把锁挂上了,你放心吧!---草,没告诉我挂哪儿了

06 30 30 38 30 30 30 03 32 42 >right! PLC给回答一句:老公,你终于答对了,进来吧!
oyle
级别: 探索解密
精华主题: 0
发帖数量: 5 个
工控威望: 123 点
下载积分: 523 分
在线时间: 10(小时)
注册时间: 2011-09-20
最后登录: 2018-07-10
查看oyle的 主题 / 回贴
3楼  发表于: 2013-05-29 10:10
继续摸着石头过河!
现在假定:PLC内部寄存器D10的内容我设为12345,十六进制是3039H。然后让PLC给我监控这个寄存器D10,我呢再去监控PLC是怎么监控的!

82 30 30 35 30 B1 C3 B1 B4 30 B2 03 30 33 /D10:12345,1C1402 读取寄存器D10的内容

06 30 30 35 30 30 30 33 30 33 39 03 C6 B7 /003039

指令:82 30 30 35 30 B1 C3 B1 B4 30 B2 03 30 33 / D10 @ 1C1402  读取寄存器D10的地址在1C1402

回应:06 30 30 35 30 30 30 41 41 42 42 03 B2 C5 /D10=00AABB 寄存器D10的内容是AABB
以下格式雷同:
82 30 30 35 30 B1 C3 B1 36 30 B2 03 30 35 / D11 @ 1C1602

06 30 30 35 30 30 30 41 41 42 42 03 B2 C5 /D11=00AABB

82 30 30 35 30 B1 C3 B1 36 30 B2 03 30 35 / D11 @ 1C1602

06 30 30 35 30 30 30 36 39 B8 B7 03 30 36 /D11=6987

82 30 30 35 30 B1 C3 B1 B8 30 B2 03 30 B7 /D12 @ 1C1802

06 30 30 35 30 30 30 B4 35 36 33 03 C6 41 /D12=004563

82 30 30 35 30 B1 C3 30 30 30 B2 03 C6 C5 /D0 @ 1C0002

06 30 30 35 30 30 30 B4 35 36 33 03 C6 41 /D0=4563

82 30 30 35 30 B1 C3 30 B2 30 B2 03 30 30 /D1 @ 1C0202

06 30 30 35 30 30 30 B1 B2 33 36 03 C6 B4 /D1=1236