能看明白下面这段程序吗?如果能的话,你就会觉得没有必要加密程序了,再难的程序加密后也没有用。改造老外设备时,我上载上来的,上位机是触摸屏,没有源程序,只能全靠上载上来的没有任何注释的下位机来分析工作控制流程。上载上来时,该功能块就是加密的。我解开后分析完了。
FUNCTION FC 169 : VOID
TITLE =
AUTHOR :
FAMILY :
NAME :
VERSION : 1.0
VAR_INPUT
IN0 : BOOL ;
END_VAR
VAR_IN_OUT
OUT_ST16 : BOOL ;
Struct_Len16 : STRUCT
Struct_1 : BOOL ;
Struct_2 : BOOL ;
Struct_3 : BOOL ;
Struct_4 : BOOL ;
Struct_5 : BOOL ;
Struct_6 : BOOL ;
Struct_7 : BOOL ;
Struct_8 : BOOL ;
Struct_9 : BOOL ;
Struct_10 : BOOL ;
Struct_11 : BOOL ;
Struct_12 : BOOL ;
Struct_13 : BOOL ;
Struct_14 : BOOL ;
Struct_15 : BOOL ;
Struct_16 : BOOL ;
END_STRUCT ;
END_VAR
BEGIN
NETWORK
TITLE =
AN #Struct_Len16.Struct_16;
= #Struct_Len16.Struct_15;
SET ;
R #Struct_Len16.Struct_3;
R #Struct_Len16.Struct_4;
ON #Struct_Len16.Struct_2;
O #Struct_Len16.Struct_16;
O #Struct_Len16.Struct_10;
JC M001;
R #Struct_Len16.Struct_2;
S #Struct_Len16.Struct_4;
JU M002;
M001: NOP 0;
O #Struct_Len16.Struct_2;
O #Struct_Len16.Struct_15;
O #Struct_Len16.Struct_9;
JC M003;
S #Struct_Len16.Struct_2;
S #Struct_Len16.Struct_16;
S #Struct_Len16.Struct_3;
JU M002;
M003: NOP 0;
AN #Struct_Len16.Struct_2;
S #Struct_Len16.Struct_12;
ON #Struct_Len16.Struct_10;
O #Struct_Len16.Struct_16;
R #Struct_Len16.Struct_12;
A #Struct_Len16.Struct_10;
AN #Struct_Len16.Struct_16;
AN #Struct_Len16.Struct_12;
R #Struct_Len16.Struct_2;
A #Struct_Len16.Struct_12;
A #Struct_Len16.Struct_2;
= #Struct_Len16.Struct_14;
A #Struct_Len16.Struct_2;
S #Struct_Len16.Struct_11;
ON #Struct_Len16.Struct_9;
O #Struct_Len16.Struct_15;
R #Struct_Len16.Struct_11;
A #Struct_Len16.Struct_11;
AN #Struct_Len16.Struct_2;
= #Struct_Len16.Struct_13;
A #IN0;
A #Struct_Len16.Struct_16;
AN #Struct_Len16.Struct_10;
R #Struct_Len16.Struct_2;
A #Struct_Len16.Struct_14;
S #Struct_Len16.Struct_16;
A #IN0;
AN #Struct_Len16.Struct_10;
O #Struct_Len16.Struct_13;
R #Struct_Len16.Struct_16;
M002: AN #Struct_Len16.Struct_16;
= #Struct_Len16.Struct_15;
A #Struct_Len16.Struct_16;
= #OUT_ST16;
END_FUNCTION
补充一下~
加密是为了保护知识产权 同时也是为了利益
加密有利有弊~
利在于保护自己的只是产权和经济利益
弊在于如果人家买去设备 一个小的地方需要修改都不行~
以下是个人看法~
大型的PLC加密可以分为部分加密 ,只把需要加密的地方那个去加密(工艺过程)外部的逻辑动作不建议加密,既然用到大型的PLC那设备可能不是简单的一个控制过程,谁也不敢保证任何的大型设备程序一点不改动(用个几年设备磨损了一些地方就需要修整了,当然是在电气能修整的前提下。)如果改动我们设备的制造厂家要去人吗?费用就大了吧
小的PLC建议加密 小型的PLC都是用在单一的设备上面(除非在非常的情况下需要该程序外一般不需要改程序 )单一的设备上面存在有工艺和过程(现在的中国人仿造技术太厉害了,不用解释!都能理解),被别人拿到就能做出设备来(最初写程序的人可能经历的几百台设备的试验个改造才能调整出来,人家心酸呢~)
回复22楼
你那个程序是没有源文件了 你能看懂? 这都是直接调用地址的(属于汇编形式)要是能照到模块的地址 完全可以看懂 有什么复杂之处?
不是这样的,FC169块是自己编的的变量声明没有任何地址.这个程序很简单全部是开关量,输入端口INO,输出ST16.能看懂说明西门子S7-300,400才入门.
这才是西门子S7-300和400的入迷处.你自己的算法完全可以打成FC和FB块.转换成STL语言.能看懂的也不需要去解你的密,费事.看不懂的永远看不懂.西门子内部的SFC块是完全加密的永远没有人知道.你的工艺过程完全可以打成块.公共块是可以任意当作子程序调用的,你的变量声明只要不公布,别人看起来是费事.如以下.
AN #Struct_Len16.Struct_16;
= #Struct_Len16.Struct_15;
SET ;
R #Struct_Len16.Struct_3;
R #Struct_Len16.Struct_4;
ON #Struct_Len16.Struct_2;
O #Struct_Len16.Struct_16;
O #Struct_Len16.Struct_10;
JC M001;
R #Struct_Len16.Struct_2;
S #Struct_Len16.Struct_4;
JU M002;
M001: NOP 0;
O #Struct_Len16.Struct_2;
O #Struct_Len16.Struct_15;
O #Struct_Len16.Struct_9;
JC M003;
S #Struct_Len16.Struct_2;
S #Struct_Len16.Struct_16;
S #Struct_Len16.Struct_3;
JU M002;
M003: NOP 0;
AN #Struct_Len16.Struct_2;
S #Struct_Len16.Struct_12;
ON #Struct_Len16.Struct_10;
O #Struct_Len16.Struct_16;
R #Struct_Len16.Struct_12;
A #Struct_Len16.Struct_10;
AN #Struct_Len16.Struct_16;
AN #Struct_Len16.Struct_12;
R #Struct_Len16.Struct_2;
A #Struct_Len16.Struct_12;
A #Struct_Len16.Struct_2;
= #Struct_Len16.Struct_14;
A #Struct_Len16.Struct_2;
S #Struct_Len16.Struct_11;
ON #Struct_Len16.Struct_9;
O #Struct_Len16.Struct_15;
R #Struct_Len16.Struct_11;
A #Struct_Len16.Struct_11;
AN #Struct_Len16.Struct_2;
= #Struct_Len16.Struct_13;
A #IN0;
A #Struct_Len16.Struct_16;
AN #Struct_Len16.Struct_10;
R #Struct_Len16.Struct_2;
A #Struct_Len16.Struct_14;
S #Struct_Len16.Struct_16;
A #IN0;
AN #Struct_Len16.Struct_10;
O #Struct_Len16.Struct_13;
R #Struct_Len16.Struct_16;
M002: AN #Struct_Len16.Struct_16;
= #Struct_Len16.Struct_15;
A #Struct_Len16.Struct_16;
= #OUT_ST16;
END_FUNCTION
引用皓月 的回复内容:把相应的FC先生成一个SOURCE FILE,打开此FILE后,在VERSION下面加入KNOW_HOW_PROTEC,编译存盘,然后再删除此SOURCE FILE 即可
--------------------------------------------------------------------------------
正解
引用 | 回复
| 管理
| 设为最佳回复
| 2009-04-18 14:18:00 20楼 fangzhongyuan fangzhongyuan
积分:6103
帖子:33
注册:06-11-28 [个人博客] [个人播客]
[加为好友] [发送消息] 打开编写好的FB块或者FC块,选择菜单栏“选项”-“自定义”,在“自定义”对话框中保存块的下面将“自动生成源文件”选项打钩,然后单击“确定”。这时关掉程序编辑器,回到SIMATIC Manager 界面,选中左侧项目中的“源文件”,在右侧就会出现相应的源文件,扩展名为*.AWL。双击打开会看到这是个刚编完的程序,只不过是转化成了STL格式。在“VERSION”下面写入下面命令:know_how_protect编译通过就可以了。如果永远不想让别人了解你的程序,就将这个源程序删除就OK了!但自己要保留一份啊。估计西门子内部的功能块都是这么做的
----------------------------
正解.
特同意26楼连杰的说法。
但本人基本上是只要是自己编的,全加密,为什么不加呢?想怎么加就怎么加,人家加密就“有病了”?在这行大家都是高智商的人,会有病吗?人家要加密肯定有人家的需要。本人从各地现场PLC上传过程序,有不设密码的有,但不多
都是真正需要了,没有source文件,FC FB加密照样可以破jie呀
如下原版从某某抄摘至此:
100:我如何做到对自己的程序块进行加密保护?
您能够通过STEP7软件的KNOW_HOW_PROTECT功能实现对您程序代码的加密保护。
如果您双击鼠标打开经过加密的程序块时,您只能看到该程序块的接口数据(即IN, OUT 和 IN/OUT 等类型的参数)和注释信息,而程序块中的代码及代码的注释,临时/静态变量是不能被看到的。同时您也无法对加密保护的程序块做出任何改动。
如何实现程序块保护:
1. 打开程序编辑窗口LAD/FBD/STL;
2. 将要进行加密保护的程序块生成转换为源代码文件(通过选择菜单 File— ;Generate source 生成);
3. 在LAD/FBD/STL 窗口中关闭您的程序块,并在SIMATIC
Manager项目管理窗口的source文件夹中打开上一步所生成的source文件;
4. 在程序块的声明部分,TITLE行下面的一行中输入”KNOW_HOW_PROTECT”;
5. 存盘并编译该source文件(选择菜单FileàSave,FileàCompile);
6. 现在就完成了您程序块的加密保护;
101:我如何做到对自己的程序块进行jie密?
取消对程序块的加密保护
1. 打开程序块的Source源文件;
2. 删除文件中的KNOW_HOW_PROTECT;
3. 存盘并编译该source文件;
现在程序块的加密保护已经取消。
注意: 如果没有 STL source 源文件,您是无法对已经加密的程序块进行编辑的.