最近参加了2019工业信息安全技能大赛,发现一些有意思的题目,故把解题思路写出来,抛砖引玉,与大家一起交流,共同进步。
附件是一个交通信号灯的 FBD 图以及其部分工程文件,请你分析出当按下启动按钮后,信号灯起动控制过程中,信号灯亮,灭的情况。方向及状态代号如下:东西:EW 南北:SN 红灯:R 绿灯:G 黄灯:Y 亮:T 灭:F 如流程:东西红灯亮–南北绿灯亮–南北绿灯灭–南北黄灯亮–东西红灯灭可写为:EWRT-SNGT-SNGF-SNYT-EWRF 注:正确答案格式为:XXXX-XXXX……XXXX-XXXX(第一组信号灯情况和最后一组信号灯情况相同,共计 14 组) Flag 为正确答案的 32 位小写 md5值
打开发现是两张图片和1个扩展名为mwp的文件。
为了完成题目,有必要了解以下几个知识点:
FBD(功能块图)使用类似于数字电路中的图形逻辑符号来表示控制逻辑.一些复杂的功能用指令框表示。一般用一个指令框表示一种功能,框图内的符号表达了该框图的运算功能,框的左边画输入,右边画输出,指令框左边的小圆圈表示对输入变量取反(“非”运算),框右边的小圆圈表示对运算结果再进行“非”运算。
I | 输入/输出映像寄存器 | S7-200 PLC编址规模(I0.0~I15.7)。 输入映像寄存器(该区域能够按位操作又称输入继电器)输入继电器线圈由外部信号驱动,常开触点和常闭触点供用户编程运用。 |
Q | 输出映像寄存器 | S7-200 PLC编址规模(Q0.0~Q15.7)。输出映像寄存器(又称输出继电器)是用来将PLC 的输出信号传递给负载,线圈用程序指令驱动。 |
M | 内部标志位(M)存储区 | M作为操控继电器(又称中心继电器),用来存储中心操作数或其它操控信息。 S7-200 PLC编址规模M0.0~M31.7 ,能够按位、字节、字或双字来存取存储区的数据。 |
SM | 特殊标志位(SM)存储器 | SM0.5 该位提供时钟脉冲,该脉冲在1秒钟的周期时间内OFF(关闭)0.5秒,ON(打开)0.5秒。该位提供便于使用的延迟或1秒钟时钟脉冲。 |
T | 定时器(相当于时刻继电器) | S7-200 CPU中的定时器是对内部时钟累计时刻增量的设备,用于时刻操控。编址规模T0~T255(22X);T0~T127(21X) 。 |
mwp是西门子PLC软件程序文件,一般来说我们可以通过西门子MICRO WIN编程软件打开。
PS:平时自己观察,只有绿灯在快灭时会闪烁,用提示驾驶员。黄灯亮一般3秒左右。东西方向和南北方向同色信号灯不会同时亮。同向同颜色信号灯正反方向动作是一致的。
交通灯动作情况(O(∩_∩)O哈哈~十字路口亲自观察),绿灯亮——绿灯闪烁——绿灯灭——黄灯亮——黄灯灭——红灯亮——绿灯亮——绿灯闪烁——绿灯灭——黄灯亮——黄灯灭——红灯亮——….
FBD图即为功能块图,此题考验选手的工控PLC编程知识。另外还需要对交通灯的控制流程有一定了解。*.mwp为西门子S7-200系列PLC的工程文件。
题目疑问:题目中没有给出输出点指明对应方向的交通灯名称。
思路1,直接根据FBD图推导输出状态解题思路2,下载西门子S7200编程软件和仿真软件,使用编程软件转换工程为.awl文件,用仿真软件加载运行。
FBD图中共13个网络,
网络1中的I0.0为按钮输入信号,一般为自动复位按钮,当PLC检测到I0.0的上升沿信号后,M0.0为1,同时形成自保持电路状态。(关于自保持电路原理请自行百度)
网络2为交通灯周期循环的起点,利用M0.0来触发,当M0.0动作20秒后,T50动作。整个周期循环使用到6个定时器(T),时间单位为100ms,整个循环周期为55秒,我们把一个循环周期分成6个阶段,为了便于说明,我们用定时器编号来区分:如下表:
T50 | 20s |
T51 | 3s |
T52 | 2s |
T53 | 25s |
T54 | 3s |
T55 | 2s |
合计 | 55s |
第一个循环周期:
在T50计时阶段,持续20秒,该阶段,Q0.0点亮,Q0.4点亮
在T51计时阶段,持续3秒,该阶段,Q0.0状态不变持续点亮,Q0.4闪烁
在T52计时阶段,持续2秒,该阶段,Q0.0点亮,Q0.5点亮
在T53计时阶段,持续25秒,该阶段,Q0.3点亮、Q0.1点亮
在T54计时阶段,持续3秒,该阶段,Q0.3点亮,Q0.1闪烁
在T55计时阶段,持续2秒,该阶段,Q0.3点亮,Q0.2点亮
第二个循环周期:
在T50计时阶段,持续20秒,该阶段,Q0.0点亮,Q0.4点亮
在T51计时阶段,持续3秒,该阶段,Q0.0点亮,Q0.4闪烁
在T52计时阶段,持续2秒,该阶段,Q0.0点亮,Q0.5点亮
在T53计时阶段,持续25秒,该阶段,Q0.3点亮、Q0.1点亮
在T54计时阶段,持续3秒,该阶段,Q0.3点亮,Q0.1闪烁
在T55计时阶段,持续2秒,该阶段,Q0.3点亮,Q0.2点亮
······
下面列出一个周期的状态表
时间 | I0.0 | I0.1 | Q0.0 | Q0.1 | Q0.2 | Q0.3 | Q0.4 | Q0.5 | M0.0 | T50 | T51 | T52 | T53 | T54 | T55 | SM0.5 |
1 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
2 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
3 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
4 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
5 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
6 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
7 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
8 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
9 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
10 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
11 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
12 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
13 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
14 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
15 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
16 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
17 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
18 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
19 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
20 | 1 | 1 | 1 | 1 | 1/0 | |||||||||||
21 | 1 | 1 | 1/0 | 1 | 1 | 1/0 | ||||||||||
22 | 1 | 1 | 1/0 | 1 | 1 | 1/0 | ||||||||||
23 | 1 | 1 | 1/0 | 1 | 1 | 1/0 | ||||||||||
24 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
25 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
26 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
27 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
28 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
29 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
30 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
31 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
32 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
33 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
34 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
35 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
36 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
37 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
38 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
39 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
40 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
41 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
42 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
43 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
44 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
45 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
46 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
47 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
48 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
49 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
50 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
51 | 1 | 1/0 | 1 | 1 | 1 | 1/0 | ||||||||||
52 | 1 | 1/0 | 1 | 1 | 1 | 1/0 | ||||||||||
53 | 1 | 1/0 | 1 | 1 | 1 | 1/0 | ||||||||||
54 | 1 | 1 | 1 | 1 | 1 | 1/0 | ||||||||||
55 | 1 | 1 | 1 | 1 | 1 | 1/0 |
说明:1/0表示为闪烁状态
根据前面知识点,我们可以推测,存在闪烁的灯为绿灯,与绿灯同时亮的为反方向的红灯或黄灯(时间长的为红灯,短的为黄灯),故可得到每一个输出点对应的灯颜色:
Q0.1,Q0.4都有闪烁,所以为绿灯
Q0.2,Q0.5只点亮2秒,所以为黄灯
剩下的Q0.0,Q0.3为红灯
红 | 绿 | 黄 | 红 | 绿 | 黄 |
Q0.0 | Q0.1 | Q0.2 | Q0.3 | Q0.4 | Q0.5 |
根据题目,我觉得可以理解为同向同色的两个灯为一组(比如南北向两个绿灯)
PLC每个输出点对应一组灯。6个输出点对应12个信号灯,这样解释可以与附件给的信号灯示意图一致。
结合题目附件说明“(第一组信号灯情况和最后一组信号灯情况相同,共计 14 组)”
一个周期循环加第二次循环的一次“T50计时阶段”,刚好7对输出,共14组。且第一组的状态与第七组的状态是一致的
这里需要注意的一点是,7对输出,每对输出中的两个怎么排序。例如第一组
第一组
方向A:红灯亮RT
方向B:绿灯亮GT
到底是红灯排前面还是后面,我觉得可以根据PLC程序的执行顺序来判断,PLC程序执行遵循从上至下,从左至右的原则。
方向A | 红灯亮 | 红灯亮 | 红灯亮 | 绿灯亮 | 绿灯闪烁 | 黄灯亮 | 红灯亮 |
Q0.0 | Q0.0 | Q0.0 | Q0.1 | Q0.1 | Q0.2 | Q0.0 | |
方向A灭灯 | 红灯灭 | 绿灯灭 | 黄灯灭 | ||||
时间轴 | T50计时阶段 | T51计时阶段 | T52计时阶段 | T53计时阶段 | T54计时阶段 | T55计时阶段 | T50计时阶段 |
方向B | 绿灯亮 | 绿灯闪烁 | 黄灯亮 | 红灯亮 | 红灯亮 | 红灯亮 | 绿灯亮 |
Q0.4 | Q0.4 | Q0.5 | Q0.3 | Q0.3 | Q0.3 | Q0.4 | |
方向B灭灯 | 绿灯灭 | 黄灯灭 | 红灯灭 | ||||
顺序1 | 方向A红灯亮 | 状态不变 | 方向B绿灯灭 | 方向A红灯灭 | 状态不变 | 方向A绿灯灭 | 方向B红灯灭 |
---|---|---|---|---|---|---|---|
顺序2 | 方向B绿灯亮 | 状态不变 | 方向B黄灯亮 | 方向A绿灯亮 | 方向A黄灯亮 | 方向A黄灯灭 | |
方向B黄灯灭 | 方向A红灯亮 | ||||||
方向B红灯亮 | 方向B绿灯亮 |
因为题目中没用指明是从南北方向开始还是东西方向开始,所以我们考虑按这两种情况分别考虑,最后会得到2个答案,flag只能是2者都提交试一试。
假设条件 | 方向A红灯亮 | 方向B绿灯亮 | 方向B绿灯灭 | 方向B黄灯亮 | 方向A红灯灭 | 方向A绿灯亮 | 方向B黄灯灭 | 方向B红灯亮 | 方向A绿灯灭 | 方向A黄灯亮 | 方向B红灯灭 | 方向A黄灯灭 | 方向A红灯亮 | 方向B绿灯亮 |
如方向A=东西,方向B=南北 | EWRT | SNGT | SNGF | SNYT | EWRF | EWGT | SNYF | SNRT | EWGF | EWYT | SNRF | EWYF | EWRT | SNGT |
如方向A=南北,方向B=东西 | SNRT | EWGT | EWGF | EWYT | SNRF | SNGT | EWYF | EWRT | SNGF | SNYT | EWRF | SNYF | SNRT | EWGT |
最后得到两个答案:
答案1:EWRT-SNGT-SNGF-SNYT-EWRF-EWGT-SNYF-SNRT-EWGF-EWYT-SNRF-EWYF-EWRT-SNGT
flag1=flag{2bbce0f98ef4fa9f1dd216fb9e568de1}
答案2:SNRT-EWGT-EWGF-EWYT-SNRF-SNGT-EWYF-EWRT-SNGF-SNYT-EWRF-SNYF-SNRT-EWGT
flag2=flag{2047d84304cb1fd00ed16ececa741633}
(绿灯闪烁其实也算亮灭,但是答案过于复杂,故没进行分析,这涉及到按下按钮时SM0.5处于上升沿还是下降沿的情况)
这类针对PLC程序的题目,参加2018年工业信息安全技能大赛西部赛区的时候也遇到过一次,题目要求是求程序计算的结果,比赛组办方最初只给了一个西门子SMART的工程文件,但是现场选手如果没有运行环境,此题只能放弃。如果有环境仿真运行一下很简单就做出来了,最后主办方把程序截图打印出来,最后也是根据截图分析获取的答案。
还有一类是针对上位机工程文件的题目,也是类似,如果没有运行环境,想答题是非常困难的。
遇到类似题目,首先根据给出文件获取信息,根据工程文件扩展名确定是哪个厂家的哪款产品产生的文件(这类要么百度,要么平时积累,后续有时间我会整理一个对照表出来),然后最好放到环境中的运行后来分析。一类像本题还会给出程序截图。这几类题目要解答成功,需要具备工程文件的运行环境或是肉眼识图分析的能力。
以上题目分析,答案正确与否未经过答题系统验证,如有不足,恳请留言指正。
题目附件下载
链接:https://pan.baidu.com/s/1FrtyNp5MsnXGyYp3CtCUmg
提取码:9jzy
波形图编辑器:
链接:https://pan.baidu.com/s/1GYnnPNkKE-I5EhJkF4VCTg
提取码:2k41
波形图文件
链接:https://pan.baidu.com/s/1w_AzQA-4QMCkXo_jp7HDpQ
提取码:mwg2
思路2,请关注我的后续更新。
*本文作者:云火安全实验室,转载须注明来自FreeBuf.COM