许多工业控制系统设备使用 uClinux/eCos 操作系统,这些系统通常采用 bFLT 格式的固件。hopper_bflt_loader.py 脚本提供了一个用于加载这些 bFLT 格式固件的基本支持。该脚本允许用户将 bFLT 格式的固件文件加载到 Hopper 逆向工程工具中,使用以下设置:
基地址:0x0
入口点:0x0
文件偏移:0x0
CPU:ARMv6 小端
该脚本基于 Craig Heffner(Tactical Network Solutions)编写的 IDA Pro 加载器。
2. Moxa 固件解析与提取工具 (moxa_parse_fw.py)
Moxa 设备(如简单的 Mgate 和 Nport 系列设备)的固件通常需要特定的工具进行提取和解析。moxa_parse_fw.py 脚本允许用户提取这些设备的固件镜像,特别是那些没有无线功能的设备。用户可以通过以下命令使用该工具:
parse_upg.py <firmware_file> <output_file>
解析后的固件文件将保存在指定的输出目录中,二进制固件文件将命名为 fw.bin。根据不同的设备,Moxa 设备可能使用不同的 CPU 架构,如 ARMv6。解析后的固件可以使用 Hopper、IDA Pro 或 Radare2 进行进一步的分析。parse_upg.py <firmware_file> <output_file>
3. Schneider Electric 固件解析工具 (parse_upg.py)
parse_upg.py 是一个用于解析 Schneider Electric 设备使用的 .upg 固件文件的脚本。它将 .upg 文件转换为一个标准的二进制文件,便于在逆向工程工具中加载和分析。使用该工具的命令格式如下:
parse_upg.py <firmware_file> <output_file>
转换后的二进制文件可以直接加载到反汇编器中进行进一步的研究。
基地址:0x0
入口点:0x0
文件偏移:0x58
CPU:ARMv6 小端
值得注意的是,从固件版本 2 开始,Moxa NPort W2150 的固件已加密,需要额外的步骤进行解密。
具体来说,该项目的代码结构如下:
- Python (88.9%): 主要用于编写解析和提取固件的脚本。
- C (6.5%): 用于实现固件解密等底层功能。
- Shell (4.6%): 用于自动化脚本和系统级操作。
希望通过本文的介绍,更多的安全研究人员和开发者能够了解并参与到 scada-stuff 项目的开发和使用中,共同推进工业控制系统的安全研究。
项目地址
https://github.com/nezza/scada-stuff
原文始发于微信公众号(Urkc安全):SCADA-Stuff: 逆向工程与破解SCADA/ICS设备的工具集合
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论