本文为真实项目案例复盘,已做脱敏处理。尊重版权,服务仅面向项目合法所有者。
案例标签:大型立体停车产线 · 西门子TIA Portal V15.1
去年冬天的一个晚上,我接到一个电话。
对方是某自动化设备公司的设备主管,声音里全是焦虑:"我们项目的西门子PLC程序,所有块都加了密码,编程的工程师离职了,密码没人知道。下周就要交付调试,程序打不开,项目要停。"
他们试过联系原工程师——"记不清了,可能是常用密码",试了几个都不对。找西门子官方,回复是密码由用户自行管理,官方无法恢复。
73个程序块,全部锁死。项目等着交付调试,密码成了拦路虎。
这不是个例。项目交接不规范、人员流动、文档缺失——在工业自动化领域,密码丢失远比想象中普遍。
很多人有个误解:程序不是还在PLC里跑得好好的吗?为什么打不开?
其实西门子的Know-How Protection加密,锁的不是程序运行,而是源代码的查看和编辑权限。好比一台机器正常运转,但有人把齿轮箱焊死了——你看得到它在转,却打不开盖子调整里面的齿轮。
PLC照常运行、下载、仿真都不受影响,但想打开程序块看梯形图、改逻辑,就必须输密码。而且没有"找回密码"这个选项,官方也无能为力。
面对的,正是这样一把找不到钥匙的焊死锁。
拿到项目文件后,我做了三件事:
摸清加密范围:73个加密块,涵盖功能块、数据块和主程序块,每个块的加密参数都是独立的,不是一把钥匙开所有门。
判断密码强度:西门子的加密算法本身很安全,但如果当初设的是简单密码——纯数字、短位字母数字组合、常见词——就有恢复的机会;密码越复杂,可行性越低。
给出实话: - 6位以内简单组合 → 大概率数小时内能恢复 - 常见字典词汇 → 1-2天有机会 - 10位以上复杂混合密码 → 现有技术手段基本无解
对方想了想:"那工程师记性不太好,应该不会设太复杂的。"
市面上大多数密码恢复工具,说白了就是写个脚本模拟操作界面,自动往密码框里不停输入重试。这种方式效率极低——简单密码还行,密码稍微复杂一点,比如8位数字,可能要算到猴年马月。
我没有走这条路。
通过逆向分析博途软件的底层逻辑,我提取出了西门子专有技术保护(Know-How Protection)的加密算法,以及每个加密块对应的salt和hash值。有了算法和关键参数,就可以脱离博途软件,直接用CPU或GPU进行高速暴力破解。
一开始写了CPU版本,用一台双路服务器跑,速度不太理想,跑了几个小时没有命中。于是换到部署了RTX 5090显卡的服务器上跑GPU版本——速度提升了几百倍,一个小时左右就跑出来了。
密码找到了——plcsafe,7位纯小写字母,"好记但不太容易被想到"的类型。CPU版本第一轮用的字典范围太窄没覆盖到,GPU版本直接全空间扫描,一个小时命中。
用恢复的密码逐一解锁,73个块全部打开,梯形图、功能块、数据块,注释和变量名完整无损。
电话那头松了口气:"太好了,产线改造有救了。"
这次算幸运。但我必须说实话:不是所有密码都能恢复。
如果密码本身设得足够复杂(10位以上、大小写+数字+特殊字符混合),目前技术手段下恢复概率极低。这种情况下还有一条备选路径:从编译数据中提取程序逻辑。
很多人不知道的是——PLC程序编译后的运行代码在项目文件中是明文存储的。加密只保护了源代码的显示格式,但程序的执行逻辑、调用关系、变量名称、通信配置,其实完整保存在编译数据里。通过专业反编译技术能把这些提取出来,虽然不如原始源代码直观(缺注释和格式),但用来理解逻辑、做工艺改造,通常够用。
也就是说:密码恢复不了,不代表程序就彻底废了,还有退路。
密码丢失、原工程师离职、项目打不开——这类问题我们经手过不少。能帮你做的:
密码复杂度决定了能不能恢复,这一点我们不会画大饼。如果确实无解,也会如实告知并给出替代建议。
联系方式:扫描页面底部二维码添加微信,备注「PLC密码恢复」
尊重版权,本服务仅面向项目合法所有者。建议在任何操作前先备份原始工程文件。