技术文章

了解最新技术文章

当前位置:首页>技术文章>技术文章
全部 5 常见问题 0 技术文章 5

反转 Simatic S7 PLC 程序

时间:2022-10-21   访问量:1090

PLC(可编程逻辑控制器)是专门用于控制具有实时处理要求的工业系统的计算机。它们接受传感器提供的输入并为执行器生成输出。作为可编程设备,它们执行用户提供的软件,因此容易受到某些类别的软件攻击。最广为人知的演示是 Stuxnet 恶意软件,其最终目标是控制、损坏和摧毁铀浓缩厂中的离心机阵列。事实证明,对恶意 PLC 有效负载的分析是一条漫长而乏味的道路2,到目前为止,与这些系统相关的工具和知识相对于 x86 或 arm 等广为人知的架构而言仍然有限。

我们试图通过为 JEB Pro 提供 S7 分析模块来弥补这一差距。本文展示了如何使用它们来获取、分析、反汇编和反编译旨在在 Siemens Simatic S7-300 和 S7-400 设备上运行的 PLC 程序块,这是用于操作工业过程的非常流行的 PLC 系列。

术语

在本文档的其余部分,术语PLCS7S7 PLC可互换使用,指代 S7-300 或 S7-400 PLC 设备。JEB 扩展不支持 S7 产品线中较新的设备,即 S7-1200 和 S7-1500,因此此处不予考虑。

Simatic S7-300(左侧)和 Simatic S7-400(右侧)的型号 – 图片 (c) Siemens

用于编程S7 PLC的官方IDE称为Step 7步骤 7 可以按原样使用,也可以作为更大的软件套件全集成自动化(TIA) 的一部分使用。

PLC程序由块组成,例如数据块、功能块和组织块。在本文档中,术语程序可以理解为(集合)块

程序从Programming Station下载到PLC ,即运行 Step 7 编辑器的基于 Windows 的计算机。当从 PLC 检索程序时,将其上传到编程站。

汇编语言STL(语句列表)及其对应的字节码MC7有时可以互换使用。

最后,名称SimaticStep 7Totally Integrated Automation是 Siemens AG(“Siemens”)的商标。

S7 入门

本节简要介绍了 S7 程序是什么、它们的结构以及从逆向工程的角度需要了解的较低级别的详细信息。

编程环境

S7 PLC 使用 Step 7 或 TIA 的 Step 7 进行编程(TIA 是对最新的 S7 设备进行编程所需的平台),在 Windows 计算机上运行的 IDE 称为编程设备。程序编写完成后,可以下载到物理 PLC 或仿真程序(例如 PLCSIM,第 7 步的一部分)。

PLC 程序是的集合。块有一个类型(数据、代码等)和一个数字。

FB 和 FC 之间的区别很微妙。任何 FB 都可以编写为等效于 FC,反之亦然。它们作为一种简单的方法来区分按原样工作的函数,如 C 例程 (FC),以及处理伪封装属性集合的函数,如 C++ 类方法 (FB)。

由两个 OB、一个 FB 及其相关 DB 组成的示例程序。使用了两个系统函数。
设计用于在 S7-300 CPU 314 上运行的更大程序。

编写 PLC 代码有多种方法。程序员可以选择编写梯形图(LAD)或功能块图(FBD);复杂的过程可以用语句列表 (STL) 或高级类 Pascal 语言 (SCL) 更好地表达。无论源语言如何,程序都编译为 MC7 字节码,其规范不公开。

一段 MC7 字节码与一些元数据(创作信息、标志等)和块的接口一起打包在一个块中。数据块的接口是块定义本身,一种结构类型。逻辑块的接口是它的一组输入、输出、局部变量,以及在 FB 情况下的静态变量,或在 FC 情况下的返回值。

在 STL 中编程的功能块 (FB1000) 和相关数据块 DB1000 的示例代码。请注意,两个模块共享相同的接口 (IN/OUT/IN_OUT/STAT(=static)) 数据。FB 的 TEMP 数据部分保存瞬态局部变量。

MC7 代码

可以使用多种方法对 PLC 进行编程,例如:

第 7 步将所有源代码编译为 MC7 字节码,MC7 字节码将由运行在 PLC 上的虚拟机翻译和执行。

在 S7-400 3之前, STL 的文档相对完善但是,在撰写本文时,二进制规范尚未公开。4

MC7 指令映射 STL 语句,有几个值得注意的例外(例如,在 FC/SFC 的情况下,STL 的 CALL 被转换为 UC/CC,并带有额外的代码来准备地址寄存器指针、打开数据块、在 Locals 存储区设置参数打电话等)。

执行环境

MC7字节码的执行环境如下:

JEB" style="box-sizing: inherit; font-size: 19px; border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">JEB 中的翻译

JEB 的 MC7 插件镜像执行环境,并添加了几个合成(人工)寄存器,以帮助 MC7 代码表示和代码转换为反编译器的 IR。处理器详细信息可以在 GUI 客户端中检查(菜单Native,处理程序Processor Registers)。

MC7 处理器插件定义的寄存器

指令系统

熟悉 STL 是 PLC 逆向工程师需要熟悉的主题。但是,一般 STL 编程的完整而详细的指南超出了本文档的范围。具体的 STL 指令将根据需要进行讨论。

这些指令分为以下几类:


上一篇:Dart AOT 快照助手插件,用于更好地分析基于 Flutter 的应用程序

下一篇:编写 dexdec IR 优化器插件

发表评论:

评论记录:

未查询到任何数据!

在线咨询

点击这里给我发消息 售前咨询专员

点击这里给我发消息 售后服务专员

在线咨询

免费通话

24小时免费咨询

请输入您的联系电话,座机请加区号

免费通话

微信扫一扫

微信联系
返回顶部