乐于分享
好东西不私藏

梯形图逆向实战:三套真题拆解

梯形图逆向实战:三套真题拆解

梯形图特辑 · 收口篇(第 12 期)· 真题拆解

前面四期用真实真题把位逻辑、定时器、数据处理的地基夯完了。这一期做收口:拿 3 套真实 CTF 题,从"拿到工程"倒推到"flag 在哪、怎么算"。 不再讲"方法论",直接拆:交通灯真题、期 7 的 flag{37091.9}、工控指示灯逻辑推理题。

🗺️ 梯形图特辑 · 六期路线图(收官)

期7 实战读图(锚点)→ 期8 概论 → 期9 位逻辑 → 期10 定时器/计数器 → 期11 数据处理 → 期12 真题拆解(本篇)

一、逆向读图的三条铁律

正向是给逻辑算输出,逆向是给输出/工程反推逻辑。三条铁律:

  • 先骨架,后血肉:先看 OB1 调了谁、网络怎么分布,别扎进某个触点;
  • 顺着"异常"找:CTF 的 flag 往往藏在"不合常理"的那一处——某个 DB 被写、某条定时器链超长、某个常数很突兀;
  • 数据流优先:flag 本质是被搬来搬去的数据,追 OUT 地址比追逻辑快。

二、真题拆解一:交通灯(定时器链逆向)

这道题我们在期 8/9/10 已经正向拆过。现在反过来:假设你只拿到工程,要回答"东西向绿灯亮多久、什么时候切换"。

步骤 1:看骨架

OB1 里有 13 个网络。快速扫一眼就能分类:

网络 1:启停自锁(位逻辑) 网络 2–7:6 个 TON 定时器(定时器链) 网络 8–13:Q0.0–Q0.5 输出驱动(位逻辑)

图:交通灯真题 OB1 真实梯形图(13 个网络:启停自锁 / 6 个 TON 定时器链 / 6 路输出),骨架一眼看清。

步骤 2:追定时器链

把 6 个 TON 的 PT 和时基列出来:

定时器PT时基实际时间
T50200100 ms20 s
T5130100 ms3 s
T5220100 ms2 s
T53250100 ms25 s
T5430100 ms3 s
T5520100 ms2 s

步骤 3:反推输出时序

网络 8 是 M0.0 AND T52 → Q0.0。T52 在第 23–25 秒导通,所以 Q0.0 在这段时间亮。同理:

Q0.0 亮:T52 导通期 = 第 23–25 秒(2 秒) Q0.1 亮:T52&T53 或 SM0.5&T54 = 第 25–50 秒常亮 + 第 50–53 秒闪烁 Q0.2 亮:T54&T55 = 第 53–55 秒(2 秒)

整张时序表一画,flag(各灯运行过程)就出来了。这道题的本质就是"把定时器链换算成时间轴"。

三、真题拆解二:期 7 STEP7 工程(数据流逆向)

这道题正向我们在期 11 走过:PIW256 → FC90 → DB1.DBD0 → 平方 → DB2.DBD0。现在逆向:假设你在线监视看到 DB2.DBD0 = 37091.9,怎么知道它是怎么来的?

步骤 1:定位 flag 地址

在 OB1 里搜索所有写 DB2.DBD0 的指令。程序段 2 显示:

IN1 = DB1.DBD0 运算:IN1 × IN1 OUT = DB2.DBD0

所以 DB2.DBD0DB1.DBD0 的平方。开根号得 DB1.DBD0 ≈ 192.593

步骤 2:追 DB1.DBD0 从哪来

程序段 1 的 FC90:

IN   = PIW256(或你改后的常量 4096) IN1  = 130.0 IN2  = 0.0 OUT  = DB1.DBD0

逆向就是反解缩放公式:

DB1.DBD0 = IN × 130 / 27648 + 0 192.593  = IN × 130 / 27648 IN ≈ 4096

步骤 3:验证

PIW256 改成 4096,下载运行,在线监视 DB2.DBD0 显示 +3.70919e+004,套上 flag{}flag{37091.9}

图:真题真实截图——在线监视 DB2.DBD0 显示 +3.70919e+004,逆向验证闭环。

逆向心法:从最终地址(DB2.DBD0)往前追,每个框只看"OUT 地址"和"运算关系",一路追到可改输入(PIW256)。数据流比逻辑流快得多。

四、真题拆解三:工控指示灯逻辑推理

这道题来自 `西门子 PLC 赛题/3-工控指示灯的逻辑推理-做/05_43.zip`,原题给了一个 7 段指示灯程序:按下启动 I0.0 后,Q0.0–Q0.6(H1–H7)按定时器链依次动作。

程序骨架

7 个程序段,每个一段 TON:  M0.0 → T37(10) → M0.1 → T38(20) → M0.2 → T39(40)  → M0.3 → T40(50) → M0.4 → T41(30) → M0.5 → T42(20)  → M0.6 → T43(60)

图:指示灯真题的 7 段 TON 级联骨架(M0.0→T37→…→T43),逆向时先画这条链,再追每个 Q 由哪些 M/T 驱动。

输出格式

题目用例要求用 T/F/L/M/S/P 描述 H1–H7:

  • T:亮;F:灭;L:闪烁;M:延迟;S:秒;P:结束

例如 H5M10ST5SP 表示"H5 延迟 10 秒亮,持续 5 秒灭"。

逆向思路

和交通灯一样:先画定时器时间轴,再看每个 Q 由哪些 M/T/SM 驱动,最后套进题目要求的格式。这种题没有神秘套路,就是"时间轴 + 输出条件"两板斧。

五、三类藏线索套路(真题版)

把上面三套题提炼一下,出题人藏 flag 的手法翻来覆去就三种:

① 数据块藏值

如期 7:结果 MOVE/运算进 DB2.DBD0。逆向时从最终 DB 地址往前追。

② 定时器链控制时序

如交通灯、指示灯:flag 是各输出在时间的分布。逆向时先画时间轴。

③ 反逻辑 / 异常触点

如交通灯网络 1 的 I0.1 是常闭停止按钮;如果某道题把该常闭写成常开,系统就变成"按停止才启动"。这种题的破绽是"和工艺常识对不上"。

坑:在监视表里改值不算数

期 7 强调过:监视界面改的是临时值,下载后被覆盖。逆向验证时一定要改程序 + 重下载 + RUN + 在线监视,否则你以为跑通了,其实只是假象。

六、完整 SOP:从拿到工程到算出 flag

把三期内容叠在一起,就是一套可复用的逆向 SOP:

1. 看 OB1 骨架:分几个网络?哪些是位逻辑、定时器、数据处理? 2. 定位输出/flag 地址:Q?DB?哪个网络在写它? 3. 追数据流:OUT 地址 → 上一个框的 IN → 再上上一个 → 直到可改输入 4. 画定时器时间轴:PT × 时基 = 实际时间,标出每个 T 的导通区间 5. 套题目格式:把时序/数值转成题目要求的 flag 形式 6. 改程序 → 下载 → RUN → 在线监视,验证答案

七、特辑收尾 & 预告新方向

到这里,「梯形图特辑」六期全部讲完。你已经具备:

  • 看懂绝大多数工业梯形图(位逻辑 / 定时器 / 计数器 / 数据处理);
  • 独立跑通一份工程、改值算出结果;
  • 对陌生工程做逆向定位,找出被藏起来的线索。

工控安全远不止梯形图。特辑之后,我们准备往这些新方向走(顺序待定,也可以额外提出选题方向,欢迎在后台留言点单):

可能的下个系列看点
协议逆向方法论不靠端口猜协议——按字节特征识别 Modbus/S7COMM/MMS/IEC104
固件逆向从 PLC 固件里扒逻辑、找后门、还原通讯密钥
车联网(CAN/车载)汽车总线的"工控"侧面,重放攻击与信号伪造
组态软件与 SCADA 漏洞WinCC/Intouch 等上位机的常见坑与取证

八、知识点回链

前面讲过本期怎么收口
期 7《梯形图不是天书》本期把期 7 的取证思路扩展成完整逆向 SOP,并以真题完整走通
期 8–11 基础四讲本期每一个逆向手法都直接用了前面四讲的地基和真题

梯形图特辑到此结束。觉得这套"从真题切入 → 打地基 → 回到真题"的写法有用,转发给更多想入坑工控安全的战友。新方向的选题,等你来点 —— 后台留言告诉我你想先看哪个。


🎁 粉丝福利|领题目附件

关注本公众号后,私信关键词「资料」即可获取「工控 CTF 题目资料包」网盘下载链接(9 期资料:7 期真题 + 2 套梯形图练习,含完整 WP、答案与分步自验清单)。