Sat

15

May

2010

揭露200CN解密大骗局

揭露惊天解密大骗局:
现在网上很多地方都有说可以不拆机直读CN解密的,注意这是一个骗局。目的就是诈骗钱财,此人根本不会解密。这种情况一般都是一再的向你吹嘘他的技术多么多么的高,可以很安全的直接通过数据线读取密码,但是有一个破绽,他必定要求你把plc邮寄给他,说是保密。对于此种情况的鉴别真伪方式就是重赏!重赏之下必有勇夫嘛!你可以给他出高价要求现场解密,价格可以无限高,如果敢于现场解密的就是真的,不敢的就是诈骗的。

其实现在PPI协议根本就没有人能够实现cn解密,现在基本可以确定PPI协议所能破解的西门子S7-200PLC的范围:02.01版以下的包括02.00版,通过本软件就可以轻松破解,02.01版以上的,包括02.01版,只有拆机解密,迄今为止还没有更好的办法!

我也是在研究希望能够实现PPI协议解密,但是一直失败。网上所有标榜自己可以直读解密的都是还不如拆机解密安全的解密法。其实我一直不愿公布的,不过看在坛里确实有几个好学的解密发烧友,我也不忍心让他们走弯路啊!能关注我这个帖子的人我想也不是一般的菜鸟,我就告诉大家吧:
1、最现实,最实用的方法,“单片机直接挂plc的24c芯片”,我就是这么做的,对于做单片机的人来说简直就是小菜一碟。这种方法的优点是速度快,安全准确,轻松搞定3级和4级,因为单片机是直接和usb通讯的,所以就相当于usb口解密,很实用。缺点是要拆下芯片,在cpu版上读不了要来回的焊接一次芯片。
2、还有的是i2c bus直接连接24c的,这种方式还有两种说法,一种说是通过PLC的扩展口连接,直接读写EEPROM芯片。我认为不不太可能,怎么可能跳过CPU的管理而直接读写芯片呢?你把cpu摆在什么位置了啊?第2种说法就是拆芯片后用串口或者打印机接口来读写的,这倒是真的,我测试过,速度及其的慢,你性急是搞不了的,容易通讯数据出错,你校验一次又要浪费时间,不过算是能用啊。
3、通过plc的存储卡和外置电池接口,直接读的24c,还是芯片解密。这只是一个设想,并没有人发表过说自己用这种方法解密成功,不过理论上确实是可行的,因为芯片的读写脚都引到了这个接口,这样就不必拆芯这么麻烦了。  
所说的这就是所谓的cn解密,其实还是拆机解密的延续。。。。。。!
0 Comments

Sat

15

May

2010

CN plc中鲜为认知的二次加密

如果你已经设法让plc返回了密码,但是已经加密了,你如果不懂解码,还是算不出密码来。其实新版的plc不光cn一种,所有02版的plc在加密的时候都改动了密码,密码在传输的过程中进行了再加密!这就是鲜为人知的二次加密!看下面我做的通过串口监视截获的数据
下载程序,当软件要求我输入下载密码的时候,我输入密码:22222222,可是截获的竟然是一组这样的数据:68 21 21 68 02 00 7C 32 07 00 00 00 19 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 67 67 00 00 67 67 00 00 FE 16   
提示: 67 67 00 00 67 67 00 00 其实就是我刚才输入的8个2的密码,在这里加密了。。。。
下面呢我公布一下二次加密的代码。大家来算一下,这个数据是怎么得来的。
密码代码:无大小写区分
0=65   1=64  2=67   3=66   4=61   5=60   6=63   7=62  8=6D   9=6C   A=14   B=17   C=16   D=11   E=10   F=13   G=12   H=1D   I=1C   J=1F   K=1E   L=19  M=18  N=1B  O=1A  P=05  Q=04  R=07   S=06   T=01   X=0D   Y=0C   Z=0F

3 Comments

Sat

15

May

2010

CN解密大杂谈

 
开坛寄语:本着教学相长,互相提携的原则,为再现春秋百家争鸣之盛况,请众家解密高手可以高谈阔论,各抒己见,把自己的独到见解发表出来。一来提高在本坛的知名度,二来提高论坛的帖子质量。(唉!论坛商业味越来越浓,已无好帖而言)所以不管版主给不给我们加精,我们都立志做出优质的帖子来,奉劝大家不要发水贴,奉承的或讽刺的3言2语的话来占用帖子位置.

西门子PPI协议分析:
西门子S7-200 PLC之间或者PLC与PC之间通信有很多种方式:自由口,PPI方式,MPI方式,Profibus方式。使用自由口方式进行编程时,在上位机和PLC中都要编写数据通信程序。使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。但是西门子公司没有公布PPI协议的格式。用户如果想使用PPI协议监控,必须购买其监控产品或第三方厂家的组态软件。这样给用户自主开发带来一定困难,特别是自行开发的现场设备就不能通过PPI协议接入PLC。其它通讯方式编程也存在编程复杂,需要购买软件和授权等局限性(1)。通过数据监视、分析的方法,我们找出了PPI协议的关键报文格式,可用于上位机、现场设备与S7-200 CPU之间通讯。
PC与PLC采用主从方式通讯,PC按如下的格式发读写指令,PLC作出接收正确的响应(返回应答数据E5H或F9H见下文分析),上位机接到此响应则发出确认命令(10 02 5C 5E 16),PLC再返回给上位机相应数据。
一般上位机要连接PLC就要先发送如下数据 10 02 00 49 4B 16 你可以理解为我们常用的对讲机通话模式:00呼叫02,听到请回答 10起始符 02是之上位机要联系的下位级的地址站号 00就是上位级本本身自己的站号 49寻呼指令 16终止符 其中4B为校验码,是这样得来的:02+00+49的最后两位就是校验码,这就是所说的偶校验或称和校验。计算器在16进制计算时公式(02+00+49)mod 100得出的数就是校验码,你计算一下是不是等于4B啊!其他的所有ppi协议校验都是如此。假如02站号的PLC收到寻呼信号那么会回答: 10 00 02 00 02 16  意思是:报告00 ,02收到,请指示  这样的解释是不是有意思啊!你有更好的解释吗?  

我们先来看看西门子老型号的PLC的读密码指令:
请用串口软件以16进制发送,端口设置9600;e;8;1   
发送:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16  意思:要求传送系统存储区05E0位开始的8个字符。
如果通讯无误,PLC会返回 E5,意思:已经收到
那么这时上位机再次发送指令 10 02 00 5C 5E 16 意思:请执行命令。那么这时PLC就真的执行命令了返回如下字符:68 1D 1D 68 00 02 08 32 03 00 00 00 00 00 02 00 0C 00 00 04 01 FF 04 00 40 9B 98 02 06 9D 9A 00 76 7D 16
好了,说到这里就此停止,大家看看密码是多少啊!你多做实验一定能得出结果的。

CN plc中鲜为人知的二次加密:
上面是plc所返回的密码,但是已经加密了,你如果不懂解码,还是算不出密码来。其实新版的plc不光cn一种,所有02版的plc在加密的时候都改动了密码,密码在传输的过程中进行了再加密!这就是鲜为人知的二次加密!看下面我做的通过串口监视截获的数据:
下载程序,当软件要求我输入下载密码的时候,我输入密码:22222222,可是截获的竟然是一组这样的数据:68 21 21 68 02 00 7C 32 07 00 00 00 19 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 67 67 00 00 67 67 00 00 FE 16   
提示: 67 67 00 00 67 67 00 00 其实就是我刚才输入的8个2的密码,在这里加密了。。。。
下面呢我公布一下二次加密的代码。大家来算一下,这个数据是怎么得来的。
密码代码:无大小写区分
0=65   1=64  2=67   3=66   4=61   5=60   6=63   7=62  8=6D   9=6C   A=14   B=17   C=16   D=11   E=10   F=13   G=12   H=1D   I=1C   J=1F   K=1E   L=19  M=18  N=1B  O=1A  P=05  Q=04  R=07   S=06   T=01   X=0D   Y=0C   Z=0F

怎样读取PLC的版本号:
我们在解密中首先要确定的是PLC的版本号。就是要看看是老版本还是02版的,也好做出加解密方案。他的通讯源码是这样的:68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 09 16
发送完上面数据PLC返回E5.再次发送确认指令:10 02 00 5C 5E 16 这时plc的版本号就返回来了。看下面:
68 29 29 68 00 02 08 32 03 00 00 00 00 00 02 00 18 00 00 04 01 FF 04 00 A0 43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 D7 16
你看这一段:43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 就是plc版本号的ascii码。用asc方式显示就会看的更明白上面数据是:C  P  U SP  2  2  6  SP C  N 0  2  0  1 (sp就是空格)

读取密码保护位(保护等级)指令
68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 01 00 00 03 00 05 D8 C3 16

全部清空plc指令:
68 21 21 68 02 00 7C 32 07 00 00 00 24 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 16 19 06 0D 01 08 18 1E EE 16  

读命令分析:一次读一条数据
SD LE LER SD DA SA FC DASP SSAP DU FCS ED
SDStart Delimiter)开始定界符(68H)
LE:(Length)报文数据长度
LER:(Repeated Length)重复数据长度
SD: (Start Delimiter)开始定界符(68H)
SA:(Source Address)目标地址,指该地址的值,就是PLC的地址
DA:(Destination Address)本地地址,指该地址的指针,就是上位机自己的地址
FC:(Function Code)功能码,5CH为交替周期触发,6CH为首次信息周期触发,7CH为交替周期触发。
DSAP:(Destination Service Access Point)目的服务存取点
SSAP:(Source Service Access Point)源服务存取点
DU:(Data Unit)数据单元
FCS:(Frame Check Sequence)校验码
ED:(End Delimiter)结束分界符(16H)
报文数据长度和重复数据长度为自DA至DU的数据长度,校验码为DA至DU数据的和校验,只取其中的末字节值关于这个校验码的计算方法同上面说明。
在读写PLC的变量数据中,读数据的功能码为 6CH,写数据的功能码为 7CH。
对于一次读取一个数据,读命令都是33个字节。前面的0—21字节是相同的,为

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

SD

LE

LER

SD

DA

SA

FC
















开始符

长度

长度

开始符

站号

源地址

功能码

协议识别

远程控制

冗余识别

冗余识别

协议数据

单元参考

参数长度

参数长度

数据长度

数据长度

04读05写

变量地址数




68

1B

1B

68

02

00

6C

32

01

00

00

00

00

00

0E

00

00

04

01

12

0A

10

下面我们列表分析读取PLC密码的指令:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16

22

23

24

25

26

27

28

29

30

31

32









DU

FCS

DE


读取长度


数据个数


存储器类型


偏移量


校验码

结束符

02

00

08

00

00

03

00

05

E0

D2

16

因为是PC上发的读PLC数据的命令,SA=00,DA=02,如果有多个站,DA要改成相应的站号。读命令中从DA到DU的长度为1B即27个字节。从22字节开始根据读取数据的类型、位置不同而不同。上表是读不同存储器命令的Byte22—32。

字节

22

23

24

25

26

27

28

29

30

31

32

功能


读取长度


数据个数


存储器类型


偏移量


校验码

结束符

读Q0.1

01

00

01

00

00

82

00

00

00

64

16

读M0.0

01

00

01

00

00

83

00

00

00

65

16

读M0.1

01

00

01

00

00

83

00

00

01

66

16

读SMB34

02

00

01

00

00

05

00

00

01

F9

16

读VB100

02

00

01

00

01

84

00

03

20

8B

16

读VW100

04

00

01

00

01

84

00

03

20

8D

16

读VD100

06

00

01

00

01

84

00

03

20

8F

16

读I0.5

01

00

01

00

00

81

00

00

05

68

16

读I0.7

01

00

01

00

00

81

00

00

07

6A

16

上表读命令的Byte22-32从表中我们可以得出以下结果:
Byte 22 读取数据的长度
01:1 Bit 02:1 Byte
04:1 Word 06:Double Word
Byte 24数据个数,这里是01 ,一次读多个数据时见下面的说明。
Byte 26 存储器类型,01:V存储器 00:其它
Byte 27 存储器类型
04:S 05:SM 06:AI 07:AQ 1E: C
81:I 82:Q 83:M 84:V 1F: T
Byte 28,29,30存储器偏移量指针(存储器地址*8),如:VB100,存储器地址为100,偏移量指针为800,转换成16进制就是320H,则Byte 28—29这三个字节就是:00 03 20。
Byte 31 校验和,前面已说到这是从(DA+SA+DSAP+SSAP+DU) Mod 256 。
一次读多条数据
对于一次读多个数据的情况,前21Byte与上面相似只是长度LD,LDr及Byte 14不同:
Byte 14 数据块占位字节,它指明数据块占用的字节数。与数据块数量有关,长度=4+数据块数*10,如:一条数据时为4+10=0E(H);同时读M,V,Q三个不同的数据块时为4+3*10=22(H)。
Byte 22 总是02 即以Byte为单位。
Byte 24 以字节为单位,连续读取的字节数。如读2个VD则Byte24=8
Byte 19---30 按上述一次读一个数据的格式依次列出,
Byte 31---42 另一类型的数据,也是按上述格式给出。
以此类推,一次最多读取222个字节的数据。

写命令分析:一次写一个Double Word类型的数据,写命令是40个字节,其余为38个字节。写一个Double Word类型的数据,前面的0—21字节为 :

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21























开始符

长度

长度

开始符



















68

21

21

68

02

00

7C

32

01

00

00

00

00

00

0E

00

00

04

01

12

0A

10

68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10
写一个其它类型的数据,前面的0—21字节为 :(与上面比较,只是长度字节发生变化)
68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37


















数据长度


数据个数


存储类型

偏移量


数据形式


数据位数

写入值

校验码

终止符

01

00

01

00

00

82

00

00

00

00

03

00

01

01

79

16

从22字节开始根据写入数据的值和位置不同而变化。上表是几个写命令的Byte22—40。
字 节 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
写入位置及值长度 个数 类型 偏移量 位数 值、校验码、 结束符
M0.0=1 01 00 01 00 00 82 00 00 00 00 03 00 01 01 00 71 16
M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16
M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16
vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16
vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16
VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16
VD100=FFFFFFFF 06 00 01 00 01 84 00 03 20 00 04 00 20 FF FF FF FF B8 1
写命令的Byte22—最后, 经分析我们可以得出以下结果:
Byte 22-- Byte 30 写入数据的长度、存储器类型、存储器偏移量与读命令相同。T,C等不能用写命令写入。
Byte 32 如果写入的是位数据这一字节为03,其它则为04
Byte 34 写入数据的位数
01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word
Byte 35--40值、校验码、结束符
如果写入的是位、字节数据,Byte35就是写入的值,Byte36=00,Byte37=检验码,Byte38=16H,结束。如果写个的是字数据(双字节),Byte35,Byte36就是写入的值, Byte37=检验码,Byte38=16H,结束。如果写个的是双字数据(四字节),Byte35—38就是写入的值, Byte39=检验码,Byte40=16H,结束。
0 Comments

Sat

15

May

2010

西门子S7 PLC程序的破解与反破解

西门子S7 PLC程序的破解与反破解

 

从纯粹的技术层面出发,重点探讨SIMATIC S7 PLC控制程序的保护
西门子S7 PLC程序的破解与反破解

 

 

 

随着中国整体经济实力的加强,制造和加工工业正逐步向中国转移,这给中国国内工业装备市场带来了大量的商机,国内各行业的制造商开发和制造出大量价廉物美的设备,取得了良好的经济和社会效应。但是,也有小部分的制造商,由于其自身能力和客观因素的限制,无法及时开发出合适的产品,但利益的驱动使他们把目光瞄准了同行,抄袭和仿制同行开发成功的产品,更有甚者是整机拷贝或者克隆。由于现代工业设备大量采用PLC作为主控制系统,PLC作为整个设备的核心部件,其软件包涵了生产工艺,控制逻辑,设备数据,加工参数及信息通讯等重要内容,从而成为设备仿制者重点要获取的目标之一。纵观目前中国国内市场上应用的主流品牌PLC,虽然在设计上都采用了各种软硬件加密的手段,但破解者运用的破解手段也越来越先进,从最初的穷举法,端口侦听,软件跟踪,到现在可以通过直接复制提取内存芯片的内容来分析破解,更有甚者在互连网上公开讨论和传播破解方法和工具,因此所有产品无一例外地遭到了破解。这对中国众多的中小型OEM制造商来说是非常不利的,我们几年的开发成果可能因此一夜之间付诸东流,当得知S7-200/300硬件加密也被破解后,一位OEM制造商无奈地说,由于仿制者的开发成本很低或几乎为零,因此开发者还没有来得及收回开发成本就陷入了低价竞争,这极大的影响了开发者开发新产品的积极性,对我国的装备工业的长远发展是十分有害的。
    难道就这样束手无策,听任仿制者为所欲为了吗?答案是否定的,多年来一直关注和研究PLC控制程序保护方面的问题,笔者在实践中取得了一些经验和心得,在本文中愿意和同行们共同分享和讨论,大家共同为保护自己的劳动成果而努力。笔者多年来一直从事西门子SIAMTIC S7 PLC的应用,因此本文也只是从纯粹的技术层面出发,重点探讨SIMATIC S7 PLC控制程序的保护。
在系统设计的初期,我们应该从系统的角度来考虑PLC控制程序的保护:
1. T.I.A(全集成自动化)的概念有助于保护我们的KNOW HOW
T.I.A实现了组态和编程,数据管理和通讯,自动化与驱动产品(包括PLC控制器、HMI人机界面、网络、驱动器等产品)的高度集成。实践证明,采用T.I.A集成概念设计的控制系统很难被抄袭。同一个软件平台,相同的硬件组成,一样的总线通讯,完全可以设计出截然不同的控制系统,这是一个让开发者自由发挥的平台。例如,一个CPU315-2DP和2个MM440变频器进行PROFIBUS-DP的通讯,除了PLC和变频器有常规的数据交换,如果用户使用了DRIVES ES的工程软件,还能实现2个MM440之间的直接的快速数据交换,另外通过DRIVES ES还能实现PLC和MM440之间超过10个总共16个PZD过程数据的交换,实现PLC批量下载变频器参数的功能。而这一切的实现从表面上看,硬件没有发生任何的变化,仿制者很难从硬件上来判断出系统是如何控制这两台驱动器的速度的。不熟悉西门子产品的仿制者无法轻易更换硬件配置或修改软件,而即使仿制者是个西门子产品的专家,要独自分析清楚具体细节问题也不是件容易的事情。从某种程度上说,T.I.A大大提高了对仿制者的技术水平要求的门槛,达到西门子系统集成专家水平的技术人员一是不多,二很少有愿意做这些不齿的事情的。

此外,对于一些较大系统的OEM开发商,路由通讯功能,iMAP软件包等都是很不错的T.I.A系统功能或工具,我们应该尽量利用T.I.A给我们带来的技术优势,占领技术制高点,加大仿制或抄袭的技术难度。

2. 使用通讯功能
在实际的工作中,我们往往会遇到一些系统间需要数据交换的问题(如PLC-PLC之间,PLC与驱动器之间,PLC与仪表之间),无论是西门子产品之间还是西门子产品与第三方产品之间,建议使用通讯的方案来代替模拟量或开关量之间的信号互连的方案。对于前者,仿制者只能看见一条硬件的通讯线,至于有多少数据是如何通过通讯交换的,仿制者必须要花精力研究具体的用户程序才能搞清楚;而对于后者,开发者是省心省力了,仿制者也是一目了然,尽收眼底。

PLC与驱动器的通讯,除了控制字/状态字、设定值/反馈值及过程变量的数据通讯,驱动器工作的参数最好也能由PLC通过软件下载,这样即可以降低最终用户维护系统的技术要求,同时可以防止仿制者通过驱动器工作参数分析系统尤其在驱动方面的工作原理和设计思路。西门子公司的工程软件DRIVE ES BASIC/SIAMTIC,为广大的西门子产品用户实现此类功能提供了一个强大的工具;而使用SIMATIC PLC却使用第三方驱动器的用户,也可以自行开发针对性的参数读写程序,一般支持PROFIBU-DP的驱动器都可以实现。

有时候我们的控制系统会由多个子控制系统构成,由此形成多CPU加人机界面的网络,西门子S7-200产品常见的是PPI网络,S7-300/400产品常见的是MPI网络,通常是人机界面与CPU之间的数据交换,而我们也可在CPU的用户程序中添加一些无须组态的S7基本通讯功能(S7-200可用NETR/NETW指令,S7-300/400可以用X_PUT/X_GET指令),定时或不定时地在CPU之间进行少量数据交换,通过这些数据实现子系统控制逻辑的互锁。对于这样的系统,仿制者要分析某一子系统的程序也不是件十分容易事情。

3. 使用面板类型的人机界面
尽量在自动化系统中使用面板类型的人机界面来代替单一的按钮指示灯,虽然按钮指示灯的功能是无法保密的,但目前为止,面板型人机界面能够实现程序上载并实现反编译的产品还不多见,开发者可以在面板的画面上加上明显的厂家标识和联系方式等信息,仿制者还不至于傻到连这个也原样照抄吧。这样迫使仿制者必须重新编写操作面板的程序甚至于PLC的程序,而开发者则可利用面板和PLC数据接口的一些特殊功能区(如西门子面板的区域指针,或VB脚本)来控制PLC的程序执行。这样的PLC程序在没有HMI源程序的情况下只能靠猜测和在线监视来获取PLC内部变量的变化逻辑,费时费力,极大的增加了仿制抄袭的难度。

4. 采用高级语言编写部分重要的工艺程序
这一点主要针对采用S7-300/400或WINAC产品的控制设备,除了使用STEP 7提供的LAD,STL,FBD标准编程语言来开发控制程序,我们还可以使用SCL,S7-GRAPH等高级语言来开发一些重要的工艺程序,WINAC还可以使用ODK软件包开发出专有的程序块。一般的仿制者是不容易搞到这些开发工具的,即使有也不一定会使用,更不用说来读懂这些程序了。

 在项目具体实施的过程中,我们应该从软件开发技巧的角度来考虑PLC控制程序的保护:
1. 编程方式的采用
a) 采用模块化的程序结构,采用符号名,参数化来编写子程序块

b) S7-300/400尽量采用背景数据块和多重背景的数据传递方式

c) 多采用间接寻址的编程方式

d) 复杂系统的控制程序尤其是一些带有顺序控制或配方控制的程序,可以考虑采用数据编程的方式,即通过数据的变化来改变系统的控制逻辑或控制顺序。

用户应该尽量采用以上几种高级层次的编程方式,这样编出来的程序中嵌入系统的保护加密程序,才不容易被发现和破解
2. 主动保护方法
a) 利用系统的时钟
b) 利用程序卡或者CPU的ID号和序列号

c) 利用EEPROM的反写入功能,及一些需要设置的内存保持功能

d) 利用系统提供的累时器功能

e) 在用户程序的数据块中设置密码

f) 软件上设置逻辑陷阱

g) 可以反向利用自己在编程时犯的错误

3. 被动保护方法
a) 在内存容量利用许可的条件下,不要删除被认为是无用的程序
b) 在数据块里留下开发者的标识,以便于将来遭到侵权时可以取证

4. 应用反破解技术的注意事项
a) 在用户程序中嵌入保护程序要显得自然一些,不能很突兀的加出一段程序来,代码要尽量精简,变量符号名应与被嵌入程序段的变量保持一致

b) 往往一种保护加密手段是不够的,应该多种方法并用,并且这些保护程序一旦激活后对系统造成的后果也应该尽量不同,造成所谓的
地雷效应,从而增加程序被破解的难度,时间与成本,短时间内让抄袭者束手无策,
c) 保护好程序的原代码,如果需要交付程序的,在不影响用户对设备维护的前提下,应对交付的程序做适当的技术处理,如删除部分符号名,采用上载的程序或数据块

d) 做好严格的测试,以避免保护程序的不完善引起的误动作而带来的不必要的麻烦,同时也能降低售后服务的的费用

运用保护手段的原则
    我们虽然掌握了一些加密保护的手段,有一点必须明白,密码和锁的道理是一样的,天下没有打不开的锁,也没有解不开的密码,我们从技术上采取的措施来防止侵权的作用还是十分有限的,因此大家不能把所有的希望都寄托在所谓的加密技术或破解与反破解技术上;除此之外我们还可以通过专利的申请等其他诸如法律手段来保护我们的知识产权;但最重要的是我们不能安于现状,而是要勇于创新,不断地利用新技术开发新产品,占领技术新高地,争做行业的领头人,才能使我们的企业立于不败之地。
    加密保护技术本身也是一把双刃剑,用好了客户满意,自己的权益又悄悄的得到了保护,用不好不仅不起作用,给售后服务带来许多麻烦,还会得罪客户;好人掌握这种技术是用来保护自己不被侵权,而用心不良的人会利用它去要挟客户。因此本文也仅限于讨论了关于PLC程序加密保护的一些原则性指导性的内容,而没有公布具体的程序代码指令,请读者们谅解。
    谨以此文章献给并鼓舞那些辛勤奋斗在开发生产一线为祖国自动化事业做出巨大贡献的诸多同行;同时谴责那些企图不劳而获,窃取他人劳动成果的仿制者侵权者。

 

 

 

 

 

0 Comments

Sat

15

May

2010

plc解密杂谈

西门子S7-200系列PLC解密杂谈

相关搜索: PLC, 西门子, 杂谈, 解密
l
解密什么
现在市场上主流的PLC,都带有加密功能,作用就是给你的PLC加上密码,没有密码就不能上载程序,以此来保护你的知识产权,防止别人盗用、篡改你的程序。
另外,还有的PLC编程软件可以对子程序、程序库等进行加密(例如西门子S7-200系列),这样别人可以使用你编写好的库或子程序而无法看到内容。这样可以保护你的关键算法或流程。
有矛就有盾。看过电视剧《暗算》吗?有加密就有解密。
因此,解密,一种就是指对PLC进行解密,读出里面的程序;一种是指对电脑里面的工程文件、子程序库等进行解密,使其可以显示,可以修改等。

l
为啥解密
为啥要解密呢?归纳下来,下面几种情况比较多:
1、
自己的密码忘了
2、
学习别人的程序,增加自己的编程水平
3、
设备需要维护,原来的工程师走了
4、
因为种种原因,PLC里面有软件陷阱
5、
设备厂家的PLC加了密,过了保修期厂家又不负责
6、
了解设备的工作原理,了解工艺,仿造设备
7、
“拿来主义”,直接复制别人的产品
……
对于第1种情况,没啥说的。
对于第2种情况,是讨论比较多的。
对于第7种情况,肯定是在道德上要进行谴责的。
对于其他情况,可能需要具体问题具体分析。

一些从事自动化方面工作的技术人员想进行PLC解密,通过学习别人程序的编程方法。这种做法的意义有多大呢?看懂别人的程序,可能比自己编制一个新的程序更累,尤其是程序比较大,而且没什么注释的时候(通过解密PLC读出得来的程序,多半没有注释,没有变量名称)。
  下面是一个网友写的关于解密的文章,挺有道理的,引用如下:
“我曾经设计一个龙门刨床的项目,采用三菱F140MR PLC,编写了一个程序,一名维护的技术人员不是很好的了解龙门刨床的设备工艺,而是痴迷于了解我的程序,我告诉他,你应该好好的了解设备的状况和工艺,熟悉电气图纸,发现设备的运行状况中哪些方面还没有满足工艺的要求(也就是程序的不足),自己编写一个,无从下手时看看资料或者问问我,我保证他三、四个月彻底了解PLC,贵在实践。到那时,废掉我的程序。
而他却热衷于了解我的程序的每一步,问来问去已达四年多,至今未能掌握,面对设备、面对PLC仍然茫然无从下手,四年意味着一个大学毕业,意味着一个研究生,甚至一个博士。而他连一个小小的PLC都没毕业。而F系列PLC早已淘汰的快无影无踪了。如果仅从了解别人的程序而热衷于PLC解密,这个实例,已经告诉你,你已走进误区,成为一些商家和一些网站的靶子。
何谓PLC程序,不过是你设计工程项目的工艺而已,有工艺要求才可能有程序,程序只是设备工艺的具体反应,了解了工艺要求也就等于了解了程序。编程不过是个规则,要你用这个规则把设备工艺写出来,因此你重要是了解设备的工艺和具体使用PLC品牌的功能。当你充分了解了设备工艺,设计完电气图纸,你的设计任务可以说基本完成了,剩下的就是看看PLC编程规则,把程序写出来,把工艺写出来。
记住!贵在实践!我在上学时,PLC功课是满分,对梯形图、语句非常了解,也在课本上看过很多程序,可我当第一次面对设计时,却不知道如何下手,当把我的程序(问题很多)输进去并执行时,也就短短的一两天,我的感觉是PLC不过如此,海阔天空的感觉,没有不会的,只有不做的。
我的一个朋友告诉我,他在工厂里,一些设备被一些早进厂的人把持着,PLC加了密,也不让看程序(程序也不是他们编的),以此压着他们,想让他们水平超不过他们,我告诉他,他们不过是个永远长不大的丑陋小人(现在国有企业比比皆是),莫做他们的继承者,也不要学他们的德性,这种人是最脆弱、是最没水平的,好好了解一下工艺,了解一下设备的运行状况。自己编一编,不懂问问学学,这才是他们最怕的。”
说那么多,只是想告诉大家,解密有其存在的合理性,但不要痴迷于此,更不要用这个来做违法、违背道德的事。
l
解密实践
我所知道和掌握的S7-200系列PLC破解方法主要有“软的”和“硬的”两种方法。
先说说“来软的”:西门子的S7-200系列PLC留有“后门”,可以直接通过串口电缆PC/PPI)来读出其中的PLC密码和POU密码(子程序和库密码),方法和读取PLC的内部寄存器基本类似。读出来的密码是经过位逻辑处理的,经过运算可以得到密码。
再说说“来硬的”:S7-200系列PLC的内部电路板上有一个EEPROM芯片,里面保存有PLC的密码。可以通过I2C接口(一种电路接口)读出EEPROM内容,分析得出密码。
据说最新版本的S7-200系列PLC硬件电路有些不同,软件也有改动,解密可能困难一些。
另外,国内有几家“山寨版”的S7-200系列PLC,据厂家宣传说和西门子的是完全兼容的。但大部分厂家只有扩展模块,没有CPU单元。有CPU单元的目前据我所知有两家。一家在上海,叫正航,一家在深圳,叫合信。两种产品我都用过,也都尝试过解密。
合信的“来软的”、“来硬的”都“招了”。正航的“来软的”算出来是乱码,刚开始以为是计算方法不同,后来折腾了很久,最终我发现不管什么密码和PLC给出的乱码是没有任何关联的。软的不行就来硬的。拆机后找到EEPROM芯片,读出BIN文件分析,和“来软的”一样,算出来仍然是乱码。看来正航的加密和西门子还是不同。
0 Comments
S7-200解密教程
S7-200解密教程2 .rar
compressed file archive 947.7 KB
S7-200CN解密软件 + 解密软件注册机
S7-200CN解密软件 + 解密软件注册机.rar
compressed file archive 1.4 MB
MicroWinSP3项目POU密码破解
免费索取SP3以上版本 请与本站管理员联系
MicroWinSP3项目POU密码破解.rar
compressed file archive 402.7 KB