登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:为了防止程序被别人白嫖,探讨下如何做到程序防盗?

点击:1053 回复:20


据我个人所知,常规的催款,加密程序:
一:催款程序,靠时间(或者设备启动时间 次数等),定时让PLC停止运行(不能打自动等),输入密钥以后,再次可以运行一段时间,周而复始;
    完全解开,输入密钥以后,催款程序失效。
以上是对于设备厂商对于甲方设备使用方尾款而生的程序,
二:防止程序被别人白嫖盗用程序,(复制程序下载到新PLC HMI以后就能使用;(本贴重点探讨对象)
1、首先,不能让客户看到源代码程序,不然写的如何繁琐麻烦,别人也能看出其中逻辑,然后破除掉。
PLC的品牌尤为重要了,据我所知,
三菱全系被秒,FX Q等
欧姆龙 CP CJ NX NJ 全系拉跨,  (CP 系列,常规加密,读PLC FLASH里面都是明文的,扩展加密不是铭文的;NX NJ有超级管理员密码,预置的,可以远程解密)
松下:不是很了解,但是。。你懂的
西门子 200 200SMART 直读密码,博图全系暂时还比较安全,但是也能被破解  隔壁论坛大佬的签名:门子1200/1500完美解密,不掉数据。
附件 5XTBS)RV0~@%LX%】PGJ0D`O.jpg
国产品牌:据我所知,永宏的5%那种,论坛很少人破,但是PLC没用过,感觉不怎么好用,不考虑。
台达:加密也很弱,隔壁论坛被台达警告了,不准讨论台达,但是加密也很拉跨。
其它:codesys内核众多控制器,默认不下载源码,也就不能上载,暂时还比较安全;
~~~~~~~~~~~~~~~~~综上所述,几乎很多品牌控制器都很拉跨,无非破解成本而已,其中以博图1200 1500 为成本最高。
~~~~~~~~~~~SO,有条件的情况下,尽量选择西门子博图来写程序,或者CODESYS控制器来写,但是普通小程序用不上codesys。。
触摸屏:常见品牌都很拉跨,什么禁止上传,禁止反编译都可以破
西门子的低端屏SMART那种,官方自带软件不能上载,网上都有人能搞定。。中高端屏就不清楚了。
唯独:昆仑通态,这个如果没有下载源码,真的就不能上载编辑,用它写脚本应该可以的。
2,防盗程序:
顾名思义,就是别人复制过去就不能用那种,
不能用,无非:1,识别硬件ID,2,输入特定密码(如果保存在PLC内部的话,复制内存数据就被破了,很弱),3,触摸屏写脚本,(需要触摸屏不能上载源码那种)
~~~~~其中,感觉就第一种比较靠谱
识别硬件ID或者序列号,然后 异或,移位,等处理,可以得到一个数字,对比程序来判断是非OK,
如果不OK就执行 防盗逻辑,
例如,不能开自动(复位标志位),弹窗提醒,不定时报故障(SET 故障标志位等);
大家觉得怎么样?
23-09-18 10:07
不在意被别人剽窃程序,只要自己一直在进步。一个好的程序逻辑框架是可以传承的,就跟我们公司的程序一样,在最开始的一家巨头公司一位大神做出来的,后来发现这个底层逻辑框架程序居然可以通用所有的设备!这个程序后来成了好多家公司的主流模板。对大神来说也是对自己能力的一种认可吧。
23-09-18 10:17
一半程序写在PLC,一半程序写在触摸屏。
Good Luck~
23-09-18 10:21

引用 周运浩 在 2023/9/18 10:17:47 发言【内容省略】

水塘小,单纯不想让别人白嫖的那么简单,要么自己写,要么不要白嫖;
对于我来说,我的价格别人如果是新做肯定做不出来表情
话说回来,上述框架程序哪里能找到呢?想观摩一下框架表情
23-09-18 10:21
看你是锁君子还是锁小人
锁君子,一般的禁止上传就可以了
锁小人,怎样都没用
看你之前的帖子,是根本都没加密还有注释
这就好比你出门不但不锁门,茶几上还放了几万现金,这不是勾引人家犯罪吗。
23-09-18 11:42
富士有几款plc,好像不让上传,也不让在线!
还有B&R的,没有源程序,在线不了!
23-09-18 12:46
来,今天折腾一个博图版本的,硬件ID识别
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(* 现在的:             PPYMDDxxxx
以前的:             xxxxxPWWY
代表含义:
PP = 生产工厂
Y = 生产年份(代码含义见附件)
M = 生产月份(代码含义见附件)
DD = 生产日(代码含义见附件)
xxxx(x) =顺序号
WW = 生产日历周数 *)
REGION 读取PLC硬件SN,只需要流水号XXX
   #GET_IM_DATA_Instance(LADDR :="Local~Common",
                         IM_TYPE := 0,
                         DATA := #IMDATA);
   IF #GET_IM_DATA_Instance.DONE THEN
       // 只需要最后4个XXXX,顺序号
       STRG_VAL(IN := LEFT(IN := RIGHT(IN := #IMDATA.Serial_Number,  L := 12 - FIND(IN1 := #IMDATA.Serial_Number, IN2 := #st_横杠)), L := 4),
                FORMAT := 000,
                P := 1,
                OUT => #vw_序列号);
       #vw_sn := (16#ffff XOR #vw_序列号)+16#0606;
   END_IF;
END_REGION
#ob_SN不正确 := #vw_sn <> #iw_SN;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
附件 QQ图片20230918141542.jpg
逻辑很简答,读取PLC硬件序列号,只保留流水号,序列号最后4位,这个肯定每个PLC不一样,如果一样,那就是运气爆表了
简单处理:与16#FFFF 取反,然后+16#0606
最后一个输入WORD和这个WORD比较。
关键是,用电脑计算器就能算出来解锁SN
例如我这个序列号是 S V-M9C71135
保留后四位 1135
转换成16#是:16# 046F
取反:FB90
+16#0606 是 16#0196 (还可以更难一些,这个变量用SN后四位+-*/来做,)
表情
~~~~~~~~~~~~~~~~~~~~~
实际使用,只留一个INPUT引脚,根据这个PLC的 SN来算就行了,每个PLC(设备)都不一样,别人难道程序,加密这个块也用不了;
内部如果输入的序列号不对,就处理对应的机制,让PLC不能启动的办法就很多了,这里就不在瞎掰了~
~~
大佬还有更好的办法么?
23-09-18 14:22

引用 cvlsam 在 2023/9/18 10:21:32 发言【内容省略】

好想法诶,一直都想尝试把及时控制的写在PLC,参数运算,报警等等辅助程序用触摸屏的脚本写
23-09-18 16:24
不是什么高大上程序要不简单加个密,遇到人家硬要解密也没办法,况且读取的程序理解也要精力的,毕竟大多数人不喜跟着别人思路走,借鉴借鉴方法也就罢了;不然怎么大师们都说有那功夫不如自己写了。
23-09-18 16:55
对没有诚信的拉黑算了,干嘛要继续合作,亏也是亏一次
23-09-18 21:27

上一页下一页

工控新闻

更多新闻资讯