PLC解密网-PLC培训学习-工控自动化人才技术交流

超级管理员

453

帖子

1378

回复

3116

积分

楼主
发表于 2021-10-11 09:47:40 | 查看: 2075 | 回复: 0

PLC 控制系统定时“炸弹”拆解一例

1、概述

本文叙述了对某企业板材生产线控制系统的定时“炸弹”拆解的全过程。其中走了一些弯路,但

并非毫无意义。解决问题是我们的目的,但是思考问题并找到解决问题的方法才能让我们不断进步,

正所谓过程比结果更重要!

2、情况介绍

在某企业板材生产线车间,午夜12点刚过,突然全线停机,故障原因不明。当几天后我接手问

题时,除了一份安装用的接线图纸以外没有任何资料。由于维修人员已经对外部设备进行过检查,排

除了外部设备故障的可能。焦点集中在了控制系统,我对主要控制设备进行了检查,大概情况如下表:

名称 型号 数

状态 备注

三菱PLC FX-2N 3台 前、后段两台正常,中段主

机PLC本身正常,但全部无

输出。

设有密码,不

能读出源程

序。

三菱触摸屏 AGOT970 1台 画面切换正常,设定数据有

回显。与主机PLC连接正

常。

设有密码,不

能读出源程

序。

三菱PLC特

殊模块

8块 正常,与主机PLC连接。

AD转换与DA转换各四块

未标注各块

连接哪些部

以下提到PLC或GOT,如无特别说明指的均为上述型号。由于三段的PLC控制设备无连接,故

排除连动故障停机。加上停机时间的特殊性几乎可以肯定是在程序中设有定时“炸弹”。如此,想要

不重写全部控制程序就非得从PLC中获得源程序,但是密码未知。破解PLC密码成了必然之举。

3、PLC 密码研究

在网上搜索了一下,发现破解这类密码的软件都要数百元以及上千元注册费用。看来得自己研究

了。三菱的PLC编程软件通过串口与PLC相连,让我们用串口通信抓包软件来看看他们之间都说了

些什么。我用的串口抓包软件是Portmon。设置好程序的过滤器把通信中的一些状态检测全部滤掉。

连接到电脑的本机,然后选择PLC连接笔记本的串口号(我的笔记本是用的一个USB 转RS232C的

转接头)

我在GX Developer中随便输了一个密码00000000,当然结果是告诉我密码错误。但是我现在已

经知道了电脑和PLC之间说了些什么。在不多的几个指令中@_S_d_S_„_下面图中的很有意思在02和03 两个控

制字符之间的地方发现这些16进制的数字翻译过来就是A2004018 的ASCII码。注意这里倒了两次,

你可以把这个密码翻译过来就是4132303034303138查ASCII码表就得到上面的密码。我用这个密码

试着去读PLC的源程序,是的,我成功了。在分析抓到的报文中,我又发现了同样的串值被包含在

了另外一条指令的返回中。我直接在一个串口调试程序中输入发现的两条指令:

02 45 30 31 38 30 30 38 30 38 03 45 31

02 45 30 31 38 30 30 30 34 30 03 44 35

两条指令都返回了密码,但是后面一条返回的串还有其他的内容。现在可以明确的知道整个通信

过程中其他的指令都是无关的,GX Developer 从PLC中读取明文的密码然后在笔记本电脑上判断后

告诉我密码错了。我本以为三菱这个形同虚设的密码是最后的秘密,不过后面的事实证明我对三菱的

估计过于善良。我早到那个需要几百大洋才能“破解”密码的软件,由于没有注册他只显示两位密码。

我想看看它到底和PLC说了些什么,我以为他应该和GX Developer对PLC说的一样。结果我错了,

对不同的PLC型号它这样去问密码:

FX2 \STX0700808\ETX6A

FX2N \STX0300808\ETX66

FX2_EPROM \STX0800808\ETX6B

FXON/FXOX \STX0800808\ETX6B

FX1N/FX1X \STX0800808\ETX6B

这些指令我都转换成ASCII码了,看来这些都是三菱留的后门。通过这些指令你可以得到纯密码

不带任何冗余信息。有心的朋友可以尝试将这些ASCII码换成16进制数。和我从GX Developer中抓

到的指令比较他们有稍微的不同。现在有了PLC程序了,但是立马叫我去读那5000多条指令,我觉

得太伤人了。也许读出GOT的源程序我就能注释大部分辅助触点和数据单元的意思,并在最短的时

间理解PLC程序找到有问题的代码。下面我就投入到GOT密码的研究中了。

4、GOT密码研究及PLC程序快速注释法

我用同样的方法监视了GT Designer与GOT之间的对话,不过这次的结果让我沮丧。为了节省篇

幅我把他们之间的对话进行了整理:

write 06 00 52 01 00 00 00 59

read FF 07 00 52 01 00 00 00 21 7B

write FE

write 06 00 31 42 00 00 01 7A

read FF 19 00 31 42 00 00 00 03 61 80 33 32 00 00 61 00 23 03 00 00 78 00 21 03 00 00 E9

write FE

write 17 00 51 00 00 00 00 10 30 00 30 00 30 00 30 00 30 00 30 00 30

17 00 51 00 00 00 00 10 31 00 32 00 33 00 34 00 35 00 36 00 37(12345678)

17 00 51 00 00 00 00 10 41 00 41 00 41 00 41 00 41 00 41 00 41(aaaaaaaa)

17 00 51 00 00 00 02 10 41 00 41 00 41 00 41 00 41 00 41 00

41(AAAAAAAA)

17 00 51 00 00 00 02 10 30 00 31 00 32 00 33 00 41 00 42 00 43(0123ABCD)

17 00 51 00 00 00 02 10 29 00 29 00 29 00 29 00 29 00 29 00 29()))))))))

……………………………………

read FF 06 00 51 00 00 00 41 98

write FE

write 06 00 03 01 00 00 00 0A

read FF 06 00 03 01 00 00 00 0A

方框中的部分是我输入不同密码时这条指令的变化,每次输入的密码在行尾的括号中。不难发现

这次GOT的密码验证没有在电脑里进行,他们把密码发到了GOT中让GOT来判断是否正确,看来

三菱学乖了。虽然我们不能从上面的结果直接得到密码,但是我们有了暴力破解密码的基础。可以写

一个串口通信的程序来暴力破解得到密码。但是这需要时间,而时间恰恰是工厂最不愿意付出的代价。

看来得另寻他路了。当然鉴于三菱留有读取密码指令的做法事实上我们可以用穷举指令来得到正确的

读密码指令,这种做法需要一个可以随意写入的GOT970这样的设备。我们还是可以将密码设置为

00000000,然后判断穷举指令的返回串正确即可得到读密码的指令。事实上,我手边并没有多余的设

备。我又不想洗掉现在的GOT程序重新来做。

也许此时我们已经有了无能为力的感觉,心不甘情不愿的去读那5000行的PLC程序了。

不过我们真的不该轻易放弃,还记得我们最先的检查结果吧?注意到触摸屏的状态了吗?画面切换正

常,设定数据有回显。与主机PLC连接正常。对!这就是我们的突破口。我来到温度控制画面,设

定一个温度值,然后将PLC的数据区down了下来,然后在里面搜索我设定的数字。多次设定不同

数值之后我找到了那个区域,这就和我们以前修改游戏进度的存档一样。然后我用了一个小技巧,我

把着片区域有值的单元的数值全部改成了单元本身的地址。然后重启系统,这样我在屏幕上对应的筐

筐中看到了各自的地址。用这个方法我几乎把所有程序70%以上都注释了。看看,我们没有得到GOT

的密码,但是我们的目的同样完成了。还有很多的开关,这个不容易找到。但是我们还是有办法,我

们连机到PLC把GX Developer设定为monitor模式。打开触摸屏上的开关,就可以很快验证到底哪

个开关是和哪个内部辅助继电器相关的。完成这些我们基本有了近80%的注释。

到此,我们已经可以很容易的理解PLC程序了,是收拾它的时候了。不过得打个埋伏,在注释

的过程中我发现屏幕上有两个输入筐的值无论我怎么改都不能在PLC的数据区搜索到。他们两分别

被取名叫PLC序列号和GOT序列号,虽然他们明明都很可疑但是就是在数据区搜不到。没有理由啊!

不管了,先看看程序再说。



您需要登录后才可以回帖 登录 | 立即注册

技术支持 KZYPLC V2.1 © 2020-2027

欢迎光临昆山中宇工控PLC论坛!您是第 10294492 位访问者, 日访问量: 1681 总访问量: 22618995,当前 2024-11-22 01:49:37 在线人数:47

ICP备案证书号: 苏ICP备14003016-2号