CN105184119B - 一种软件的安全保护方法 - Google Patents
一种软件的安全保护方法 Download PDFInfo
- Publication number
- CN105184119B CN105184119B CN201510649035.2A CN201510649035A CN105184119B CN 105184119 B CN105184119 B CN 105184119B CN 201510649035 A CN201510649035 A CN 201510649035A CN 105184119 B CN105184119 B CN 105184119B
- Authority
- CN
- China
- Prior art keywords
- software
- key
- software program
- protection module
- code segment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 27
- 238000004321 preservation Methods 0.000 claims description 7
- 230000003068 static effect Effects 0.000 abstract description 7
- 238000005516 engineering process Methods 0.000 description 3
- 238000005336 cracking Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000005303 weighing Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/107—License processing; Key processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
一种软件的安全保护方法,该方法在软件程序中增加了一个保护模块,以对软件的代码段进行加密和解密,不同的软件拷贝使用不同的密钥加密,并且在软件运行时不断变更密钥进行加密,采用的加密算法平衡了软件执行效率和保护强度。使用该方法保护的软件程序,可以使破解者无法对软件本身进行静态分析,阻止其反汇编/反编译,避免软件代码被盗版或篡改。
Description
技术领域
本发明涉及软件工程领域,提供了一种软件的安全保护方法,用于在复杂环境下保护软件,避免软件代码被盗版或篡改。
背景技术
自从计算机软件出现以来,软件盗版和侵权都是困扰软件发展的重要问题,因此软件开发人员采用了许多技术来的来对软件进行保护,典型的保护技术是使用软件序列号:软件公司提供给合法用户一个软件的序列号,软件在运行时会要求用户输入该序列号,并通过相应的验证算法对该序列号进行验证,只有通过了验证,软件才能继续运行。
但是,无论是本地的验证,还是通过网络验证,在现有的软件破解技术面前其保护效果都不能令人满意,原因在于反汇编/反编译技术的发展,使得软件破解者可以对软件的代码进行静态分析,从而可以发现并修改代码中的验证函数。破解者据此发布的一个破解补丁或者软件注册机,就足以毁掉现有的大部分软件保护技术。而且,为了促进软件业的发展,对软件的反汇编/反编译并没有被法律明确禁止,实质上也无法禁止。因此,对抗恶意的反汇编/反编译技术是软件开发者现在主要的研究方向之一。
然而,必须指出,从理论上来说,不可能出现破解不了的保护,在现有计算机架构上,对软件的保护只是一个强度的问题,如果一种软件保护技术的强度强到足以让破解者需要耗费极大的精力才能成功,那一般破解者就会直接放弃破解,这种保护技术就可以说是非常成功的。但是,从另一方面来说,保护强度的提高一般会导致开发成本的提高、软件易用性和执行效率的降低,因此需要在保护强度、成本、软件易用性和效率之间找到一个平衡点。
发明内容
为了解决上述技术问题,本发明提供了一种软件的安全保护方法。
为了达到上述目的,本发明所采用的技术方案是:
一种软件的安全保护方法,该方法包括初始加密阶段、启动运行阶段和结束运行阶段,其中,初始加密阶段的具体步骤如下:
步骤1:当所述用户向软件公司购买软件程序时,软件公司针对该用户生成一个全局唯一标识符,并将该标识符植入该软件程序的数据段;
步骤2:软件公司针对该用户生成一个初始的加密密钥,使用该密钥对该软件程序的代码段进行加密,该密钥与该标识符对应地保存在软件公司的密钥服务器上;
步骤3:在软件程序中添加一个保护模块,该保护模块可以对所述代码段进行解密和加密;
步骤4:保存软件程序的入口地址,并修改该入口地址,使其指向添加的保护模块;
步骤5:软件公司将通过上述步骤修改后的软件程序发送给用户计算机,即该软件程序实际上包括三部分:加密后的代码段、植入了标识符的数据段、保护模块;
在启动运行阶段,用户在用户计算机上启动运行该软件程序,软件程序调用保护模块自动解密代码段并执行;
在结束运行阶段,用户结束运行软件程序,软件程序再次调用保护模块,重新生成新的密钥,使用该新密钥加密代码段并保存。
其中启动运行阶段的具体步骤如下:
1)用户启动运行软件程序,软件程序首先调用保护模块,该保护模块从数据段获取该软件程序的全局唯一标识符;
2)保护模块通过网络连接软件公司的密钥服务器,获取该密钥服务器的数字证书,使用该数字证书与该密钥服务器建立加密连接;
3)通过该加密连接,保护模块将所述标识符发送给密钥服务器,密钥服务器查找与该标识符对应的密钥,并通过该加密连接将密钥发送给保护模块;
4)保护模块使用该密钥对代码段进行解密,然后根据保存的所述入口地址,将控制转移到代码段的真正起点。
其中结束运行阶段的具体步骤如下:
1)当用户结束运行软件程序时,软件程序调用保护模块,该保护模块与密钥服务器进行密钥协商,重新生成一个新的加密密钥;
2)该保护模块使用新密钥重新加密代码段,并将用户计算机中保存的软件程序的代码段更新为该重新加密的代码段,然后保护模块清除新密钥,结束软件程序的运行。
3)密钥服务器删除原有的密钥,并保存新密钥,即将新密钥与该标识符对应保存。
其中对代码段进行加密的具体步骤如下:
1)将代码段按照32位分组,共分为n组,设分组结果为P1,P2,……,Pn,密钥同样为32位,加密的结果设为C1,C2,……,Cn;
2)计算C1=P1⊕K,C2=P2⊕K;
K为密钥;
3)计算Ci=Pi⊕Ci-2⊕Pi-1⊕K;3≤i≤n。
其中解密代码段的具体步骤如下:
1)计算P1=C1⊕K,P2=C2⊕K;
2)计算Pi=Ci⊕Ci-2⊕Pi-1⊕K。
有益效果:为了对抗反汇编/反编译的静态分析技术,本发明提出了一种软件的安全保护方法,该方法对软件代码段进行加密,在运行时进行解密,并且每次的加解密密钥都不相同,从而使得破解者不可能对软件本身进行静态的反汇编/反编译,并且,加密算法的强度对软件执行效率影响较小,能够以较小的代价获取较高的保护强度。
附图说明
图1:实现本发明软件安全保护方法的系统结构
具体实施方式
对于一份软件的可执行程序,其可以分为代码段和数据段,程序的代码都存放在代码段中,通常反汇编/反编译的静态分析就是针对代码段进行的,通过对反汇编/反编译的结果进行分析,从中理解程序的运行过程,获取需要的信息,因此,代码段的内容是软件保护的核心内容,对代码段进行加密能够使得代码段的内容变得完全不同,对其进行反汇编/反编译只能得到错误的结果。但是,软件运行的时候还需要对代码段进行解密,这就要求加密算法的复杂性不能太高,否则将影响软件的执行效率,但是过于简单的加密算法同样会导致其容易被破解,因此本发明采用了不断变更密钥的加密方法,软件公司对售出的每一份软件拷贝都使用不同的密钥进行加密,并且在软件的每次运行后都使用新的密钥重新加密,这样就可以在较低强度的加密算法下实现较高的安全性。
如图1所示,本发明涉及软件公司和用户两方,其中软件公司具有密钥服务器,用户使用用户计算机获取和运行软件程序,该密钥服务器具有其数字证书。
本发明的软件安全保护方法的初始加密步骤如下:
步骤1:当用户向软件公司购买软件程序时,软件公司针对该用户生成一个全局唯一标识符,并将该标识符植入该软件程序的数据段。
步骤2:软件公司针对该用户生成一个初始的加密密钥,使用该密钥对该软件程序的代码段进行加密(具体的加密方法在后面叙述),该密钥与该标识符对应地保存在软件公司的密钥服务器上,此时并不发送给用户。
步骤3:在软件程序中添加一个保护模块,该保护模块可以对所述代码段进行解密和加密。
步骤4:保存软件程序的入口地址,并修改该入口地址,使其指向添加的保护模块;这样当软件程序运行时,保护模块将解密代码段,然后根据保存的所述入口地址,将控制转移到代码段的真正起点。
步骤5:软件公司将通过上述步骤修改后的软件程序发送给用户,即该软件程序实际上包括三部分:加密后的代码段、植入了标识符的数据段、保护模块。
在用户获得软件程序后,其就可以启动运行该软件程序,软件程序将自动解密代码段并执行,具体步骤如下:
1)用户启动运行软件程序,软件程序首先调用保护模块,该保护模块从数据段获取该软件程序的全局唯一标识符。
2)保护模块通过网络连接软件公司的密钥服务器,获取该密钥服务器的数字证书,使用该数字证书与该密钥服务器建立加密连接。由于该数字证书中存储了该密钥服务器的公钥,因此可以使用该公钥通过本领域中任意一种公知的方法建立该加密连接,本发明对此不作限制。此后保护模块与密钥服务器的通讯都在此加密连接中进行,从而避免了信息被网络监听者截取。
3)通过该加密连接,保护模块将所述标识符发送给密钥服务器,密钥服务器查找与该标识符对应的密钥,并通过该加密连接将密钥发送给保护模块。
4)保护模块使用该密钥对代码段进行解密,然后根据保存的所述入口地址,将控制转移到代码段的真正起点。
当用户结束运行软件程序时,软件程序将会执行一系列的关闭步骤,此时软件程序将再次调用保护模块,变更密钥,重新加密代码段,具体步骤如下:
1)当用户结束运行软件程序时,软件程序调用保护模块,该保护模块与密钥服务器进行密钥协商,重新生成一个新的加密密钥。密钥协商可以采用本领域公知的任意一种密钥协商算法,本发明对此不作限制。
2)该保护模块使用新密钥重新加密代码段,并将计算机中保存的软件程序的代码段更新为该重新加密的代码段。完成后,保护模块清除新密钥,结束软件程序。
3)密钥服务器删除原有的密钥,并保存新密钥,即将新密钥与该标识符对应保存。
通过上述的重新加密步骤,使得破解者每次都将面对不同的加密代码段,因此其对代码段的静态分析变得非常困难。并且,由于软件在每次运行时都更改了密钥,且密钥只能从密钥服务器获得,软件盗版者即使获得了一份软件拷贝,由于密钥已经发生变化,其也无法运行软件。
代码段加密算法:
设计一个好的代码段加密算法是困难的,它一方面要尽量不影响软件的执行效率,另一方面要保证相当强度的抗破解能力,从理论上来说,这两个要求具有内在的矛盾性,需要在其中寻求一个平衡点。本发明提出了一个新的代码段加密算法,一方面,经过大量的程序验证,其解密速度快,即使对于大体积的程序,也不会过于影响用户的体验,在现有的主流计算机配置下,其解密耗时几乎不会被察觉;另一方面,配合不断变更的密钥,其对代码段的保护强度也较高,使得对代码段的静态分析变的几乎不可能。
本发明的代码段加密算法如下:
1)由于现有计算机都是32位或64位,因此将代码段按照32位分组,共分为n组,设分组结果为P1,P2,……,Pn。使用的密钥同样为32位,加密的结果设为C1,C2,……,Cn。
2)计算C1=P1⊕K,C2=P2⊕K,K为密钥;
3)计算Ci=Pi⊕Ci-2⊕Pi-1⊕K,其中3≤i≤n。
基于上述加密算法,代码段解密算法如下:
1)计算P1=C1⊕K,P2=C2⊕K;
2)计算Pi=Ci⊕Ci-2⊕Pi-1⊕K。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。
Claims (4)
1.一种软件的安全保护方法,其特征在于,该方法包括初始加密阶段、启动运行阶段和结束运行阶段,其中,初始加密阶段的具体步骤如下:
步骤1:当用户向软件公司购买软件程序时,软件公司针对该用户生成一个全局唯一标识符,并将该标识符植入该软件程序的数据段;
步骤2:软件公司针对该用户生成一个初始的加密密钥,使用该密钥对该软件程序的代码段进行加密,该密钥与该标识符对应地保存在软件公司的密钥服务器上;
步骤3:在软件程序中添加一个保护模块,该保护模块可以对所述代码段进行解密和加密;
步骤4:保存软件程序的入口地址,并修改该入口地址,使其指向添加的保护模块;
步骤5:软件公司将通过上述步骤1-4修改后的软件程序发送给用户计算机,即该软件程序实际上包括三部分:加密后的代码段、植入了标识符的数据段、保护模块;
在启动运行阶段,用户在用户计算机上启动运行该软件程序,软件程序调用保护模块自动解密代码段并执行;
在结束运行阶段,用户结束运行软件程序,软件程序再次调用保护模块,重新生成新的密钥,使用该新密钥加密代码段并保存;
其中启动运行阶段的具体步骤如下:
1)用户启动运行软件程序,软件程序首先调用保护模块,该保护模块从数据段获取该软件程序的全局唯一标识符;
2)保护模块通过网络连接软件公司的密钥服务器,获取该密钥服务器的数字证书,使用该数字证书与该密钥服务器建立加密连接;
3)通过该加密连接,保护模块将所述标识符发送给密钥服务器,密钥服务器查找与该标识符对应的密钥,并通过该加密连接将密钥发送给保护模块;
4)保护模块使用该密钥对代码段进行解密,然后根据保存的所述入口地址,将控制转移到代码段的真正起点。
2.如权利要求1所述的软件的安全保护方法,其中结束运行阶段的具体步骤如下:
1)当用户结束运行软件程序时,软件程序调用保护模块,该保护模块与密钥服务器进行密钥协商,重新生成一个新的加密密钥;
2)该保护模块使用新密钥重新加密代码段,并将用户计算机中保存的软件程序的代码段更新为该重新加密的代码段,然后保护模块清除新密钥,结束软件程序的运行;
3)密钥服务器删除原有的密钥,并保存新密钥,即将新密钥与该标识符对应保存。
3.如权利要求1-2任意一项所述的软件的安全保护方法,其中对代码段进行加密的具体步骤如下:
1)将代码段按照32位分组,共分为n组,设分组结果为P1,P2,……,Pn,密钥同样为32位,加密的结果设为C1,C2,……,Cn;
2)计算
K为密钥;
3)计算
4.如权利要求3所述的软件的安全保护方法,其中解密代码段的具体步骤如下:
1)计算
2)计算
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510649035.2A CN105184119B (zh) | 2015-10-09 | 2015-10-09 | 一种软件的安全保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510649035.2A CN105184119B (zh) | 2015-10-09 | 2015-10-09 | 一种软件的安全保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105184119A CN105184119A (zh) | 2015-12-23 |
CN105184119B true CN105184119B (zh) | 2017-10-24 |
Family
ID=54906193
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510649035.2A Active CN105184119B (zh) | 2015-10-09 | 2015-10-09 | 一种软件的安全保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105184119B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107832589B (zh) * | 2017-11-29 | 2020-05-12 | 苏州科达科技股份有限公司 | 软件版权保护方法及其系统 |
CN112131536B (zh) * | 2020-05-19 | 2021-07-20 | 北京天德科技有限公司 | 一种防止Java程序被反编译的方法 |
CN112149192B (zh) * | 2020-09-30 | 2024-02-27 | 南京工程学院 | 一种基于运行时锚点的移动存储介质软件保护方法 |
CN112579990A (zh) * | 2020-12-23 | 2021-03-30 | 深圳市兆威机电股份有限公司 | 一种电机控制程序的加密方法、装置及终端设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101206704A (zh) * | 2006-12-20 | 2008-06-25 | 汤姆森许可贸易公司 | 用于安全软件安装的方法及设备 |
CN103235904A (zh) * | 2013-04-26 | 2013-08-07 | 中国联合网络通信集团有限公司 | 应用软件数字版权保护方法、装置及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8627112B2 (en) * | 2010-03-30 | 2014-01-07 | Novell, Inc. | Secure virtual machine memory |
-
2015
- 2015-10-09 CN CN201510649035.2A patent/CN105184119B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101206704A (zh) * | 2006-12-20 | 2008-06-25 | 汤姆森许可贸易公司 | 用于安全软件安装的方法及设备 |
CN103235904A (zh) * | 2013-04-26 | 2013-08-07 | 中国联合网络通信集团有限公司 | 应用软件数字版权保护方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105184119A (zh) | 2015-12-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426708B (zh) | 一种Android系统的应用程序的加固方法 | |
CN102760103B (zh) | 信息处理装置、安全模块、信息处理方法和计算机产品 | |
CN110750802A (zh) | 基于拟态防御针对关键数据进行保护的架构 | |
US20030221116A1 (en) | Security framework for protecting rights in computer software | |
CN110210190A (zh) | 一种基于二次汇编的代码混淆方法 | |
US7970133B2 (en) | System and method for secure and flexible key schedule generation | |
CN105184119B (zh) | 一种软件的安全保护方法 | |
Chang et al. | A blind dynamic fingerprinting technique for sequential circuit intellectual property protection | |
US20170099144A1 (en) | Embedded encryption platform comprising an algorithmically flexible multiple parameter encryption system | |
CN105468940B (zh) | 软件保护方法及装置 | |
CN109033869A (zh) | 加密文件系统挂载方法及装置 | |
CN103853943B (zh) | 程序保护方法及装置 | |
CN108134671A (zh) | 一种基于量子真随机数的透明加密系统及其加解密方法 | |
CN104135531B (zh) | 一种Web软件的升级方法及装置 | |
CN110138557A (zh) | 数据处理装置及数据处理方法 | |
CN109165531A (zh) | 一种aes掩码方法、电子设备及存储介质 | |
CN109510702A (zh) | 一种基于计算机特征码的密钥存储及使用的方法 | |
CN106326733A (zh) | 管理移动终端中应用的方法和装置 | |
CN109325322B (zh) | 用于嵌入式平台的软件知识产权保护系统和方法 | |
CN110138556A (zh) | 数据处理装置及数据处理方法 | |
Alrehily et al. | Computer security and software watermarking based on return-oriented programming | |
CN108427889A (zh) | 文件处理方法及装置 | |
CN104504310A (zh) | 基于壳技术的软件保护方法和装置 | |
CN105022651B (zh) | 一种设备生产过程中的防盗版方法及固件烧写装置 | |
CN117201120A (zh) | 一种信息加密方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20180703 Address after: 210000 room A318, Nanjing Institute of Technology complex, 1 Jiangning Science Park, Nanjing, Jiangsu. Patentee after: Nanjing friend Bo network technology Co., Ltd. Address before: 211167 1 Hong Kong Avenue, Jiangning Science Park, Nanjing, Jiangsu Patentee before: Nanjing Institute of Technology |
|
TR01 | Transfer of patent right |