在做项目工作当中,出于一定的目的,比如使他人无法查看源码或者不容易理清楚自己代码或者保护知识产权,可能需要对自己编写的程序进行一定加密或者混淆。就plc程序代码加密混淆实现方式探讨(仅在西门子博途环境下的探讨)
1、博途提供的“专有技术保护(know-how protection)"功能实现。选择需要加密的块,右键点击“专有保护技术"或者通过属性->;保护->;专有技术保护,在弹出的对话框里面输入密码并确认即可。(如果有必要也可额外设置防拷贝保护)
值得注意的是为了实现加密保护的作用,请设置数字、大小写字母、特殊符号混用、长度至少8位的强密码。否则可能会被暴力破解(比如设置6位纯数字的弱密码,仅有100万种可能,利用视频中的openness工具可能1小时左右就被穷举破解掉了)
2、使用stl或者scl进行编程 目前行业中还是有不少从业人员仅仅会使用梯形图进行编程,对stl以及scl存在看不懂、不会写等情况,对此可以将需要加密的程序用stl以及scl进行编写,将程序进行"浅入深出"化。尤其是stl的可读性较差,在程序中大量使用指针、地址寄存器、间接寻址、循环跳转情况下大部分人都会比较懵(以下代码相较于梯形图略难理解),使其直接望洋兴叹。
3、代码混淆法降低可读性 1)变量均使用地址寻址,而不是使用符号(博途自动生成类似tagxx变量除外)2)删除必要的注释、说明等(在对注释无要求情况下)3)使用scl编程的时候进行格式混淆,将编写好的程序,将变量名进行重命名、并删除缩进换行等格式化的显示方式(如下图之前实现的手写bitsum功能),使代码的可读性降低,从而起到对程序有一定的保护作用(需要开启博途的写保护,否则可以直接选中代码格式化)。4)程序中的变量名使用无实际意义的命名(比如_、__、abc之类)。5)梯形图程序中多重取反(not),降低可读性。
针对博途中对程序块进行知识产权保护的方法,不同方式有不同的利用场景,可以混合使用。比如法二可针对项目必须开放源代码,方法一在可不开放源码情况下使用,方法一还有个进阶实现方式,就是在低版本的博途中进行加密,然后将程序升级到高版本的博途后就无法进行解密了(需要在原版本中解密,需要注意删除升级记录);方法三建议尽量不要使用,阅读性实在太差,可能会挨打。
(请勿商用、非法使用,仅作为研究学习之用)。