CN102136052A - 一种软件的保护方法 - Google Patents
一种软件的保护方法 Download PDFInfo
- Publication number
- CN102136052A CN102136052A CN2011101101487A CN201110110148A CN102136052A CN 102136052 A CN102136052 A CN 102136052A CN 2011101101487 A CN2011101101487 A CN 2011101101487A CN 201110110148 A CN201110110148 A CN 201110110148A CN 102136052 A CN102136052 A CN 102136052A
- Authority
- CN
- China
- Prior art keywords
- encryption lock
- software
- code
- protected software
- api interface
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 39
- 238000006243 chemical reaction Methods 0.000 claims description 34
- 230000003993 interaction Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 6
- 230000009466 transformation Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000002834 transmittance Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
Images
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/121—Restricting unauthorised execution of programs
- G06F21/123—Restricting unauthorised execution of programs by using dedicated hardware, e.g. dongles, smart cards, cryptographic processors, global positioning systems [GPS] devices
-
- 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/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Technology Law (AREA)
- Radar, Positioning & Navigation (AREA)
- Remote Sensing (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种软件的保护方法,包括:受保护软件在运行过程中通过加密锁API接口调用连接在该受保护软件所在计算机上的加密锁,若返回结果正确,则受保护软件继续运行,若返回结果错误,则受保护软件终止运行,所述受保护软件中用于调用加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始代码进行变换生成的新代码。在本发明提供的软件的保护方法中,受保护软件中用于调用加密锁的代码已被转换成破解者难以分析的代码,使破解者无法跟踪受保护软件调用加密锁时的输入数据和输出数据,因而使受保护软件和加密锁API接口之间的数据交互得到了保护,提高了破解者分析的难度,从而提高了基于加密锁的软件保护方法的安全强度。
Description
技术领域
本发明涉及软件版权保护技术,特别涉及一种软件的保护方法。
背景技术
软件由于其纯数字化的特征,一直遭受盗版的困扰,而使用加密锁是实现商业软件版权保护的一种主要手段。其中,加密锁是一个连接在计算机的并口或者通用串行总线(USB)等外部接口上的硬件设备。加密锁作为一种硬件设备,复制的难度较大,从而起到防止受保护软件被非法使用的作用。
图1为现有技术的软件的保护方法的示意图。如图1所示,现有技术的基于加密锁的软件保护方法是:受保护软件在运行过程中通过加密锁API接口(Application Programming Interface,应用程序编程接口)调用连接在该受保护软件所在计算机上的加密锁,若返回结果正确,则受保护软件继续运行,若返回结果错误,则受保护软件终止运行。根据图1可以看出,现有技术的基于加密锁的软件保护方案中存在两个明显的数据交换的边界:受保护软件和加密锁API接口之间以及加密锁API接口和加密锁之间。
由于现代操作系统的开放性,破解者可以对软件层运行过程中的任何一个环节进行跟踪和分析,这样一来,特征明显的边界就成为破解者最容易实施攻击的位置。
对于加密锁API接口和加密锁之间的交互,可以通过有加密锁硬件参与的通信加密等手段实现有效的保护,由于加密锁硬件的安全性很高,因此攻击的难度很高。而受保护软件和加密锁API接口则全部是软件代码构成,不能摆脱破解者的监控,破解者可以通过跟踪受保护软件调用加密锁的相关代码,包括受保护软件调用加密锁API接口的代码、调用时的输入数据、加密锁返回的结果、以及对加密锁返回结果的处理代码,最终通过篡改或者欺骗受保护软件来实现脱离加密锁运行。
因此,现有技术的基于加密锁的软件保护方案只能保证加密锁硬件部分的安全,软件部分的安全仍然存在比较严重的问题。
发明内容
本发明的目的是提供一种软件的保护方法,以解决现有技术的基于加密锁的软件保护方案中软件部分容易被破解者跟踪和分析破解的问题。
为了实现上述目的,本发明提供了一种软件的保护方法,包括:受保护软件在运行过程中通过加密锁API接口调用连接在该受保护软件所在计算机上的加密锁,若返回结果正确,则受保护软件继续运行,若返回结果错误,则受保护软件终止运行,所述受保护软件中用于调用加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始代码进行变换生成的新代码。
作为优选,所述受保护软件中用于调用加密锁的代码包括:为调用所述加密锁准备输入数据的代码和对所述加密锁的返回结果进行处理的代码。
作为优选,所述加密锁API接口的代码是在加密锁API接口被交付用户之前对加密锁API接口的原始代码进行变换生成的新代码。
作为进一步地优选,所述加密锁API接口的代码包括加密锁API接口的入口的代码。
作为进一步地优选,对所述原始代码进行变换的方法是:将所述原始代码进行指令变形或将所述原始代码变换为虚拟机代码。
作为进一步地优选,对所述受保护软件中用于调用加密锁的原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。
作为进一步地优选,对所述加密锁API接口的原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。
与现有技术相比,本发明具有以下有益效果:
本发明提供的软件的保护方法中,受保护软件中用于调用加密锁的代码和加密锁API接口的代码已被转换成破解者难以分析的代码,使破解者无法跟踪受保护软件调用加密锁时的输入数据和输出数据,因而使受保护软件和加密锁API接口之间的数据交互得到了保护,提高了破解者分析的难度,从而提高了基于加密锁的软件保护方案的安全强度;此外,由于对所述受保护软件中用于调用加密锁的原始代码和加密锁API接口的原始代码进行变换的规则都是动态的,所以每次变换生成的新代码均不一样,进一步提高了软件保护的安全性。
附图说明
图1为现有技术的软件的保护方法的示意图。
图2为本发明的软件的保护方法的实施例一的示意图。
图3为本发明的软件的保护方法的实施例二的示意图。
具体实施方式
下面结合附图对本发明的实施例进行详细说明。
实施例一:
本实施例提供的软件的保护方法包括如下步骤:
利用计算机中的软件开发工具计算明文T的变换结果C;
在受保护软件中存储明文T和变换结果C;
受保护软件通过加密锁API接口调用加密锁,输入明文T,返回变换结果C1;
受保护软件对比C和C1,若相等,则受保护软件继续运行,否则受保护软件终止运行。
软件开发商在将受保护软件交付用户之前,经过编译,受保护软件中用于调用加密锁的原始代码可能是:
PUSH offset_C1_buff
PUSH offset_T_buff
CALL?LIV_encrypt?
这三行原始代码用于通过加密锁API接口的LIV_Encrypt函数调用加密锁计算C1;
PUSH offset_C1_buff
PUSH Offset_C_buff
CALL?MEMCMP?
JNZ?EXIT?
这四行原始代码用于比较C和C1。
根据上述代码,破解者能够很容易地找到CALL?LIV_encrypt?指令并设置断点,并跟踪参数传递过程获得LIV_encrypt函数的输入数据和输出数据,最终通过模拟LIV_encrypt函数来直接返回明文T对应的输出C,欺骗受保护软件。
图2为本发明的软件的保护方法的实施例一的示意图。如图2所示,在本实施例提供的软件的保护方法中,用户使用的软件是经过指令变形的软件,所述软件中用于调用加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始代码进行变换生成的新代码,对所述原始代码进行变换的方法是:对所述原始代码进行指令变形。经过变换后,受保护软件中用于调用加密锁的新代码可能是:
PUSH offset_C1_buff
PUSH offset_T_buff
PUSH OFFSET_?LIV_encrypt?
RET
...
显然,原来特征明显的CALL指令被PUSH和RET组合指令替代,破解者无法直接搜索到对应的指令,显然无法直接获得LIV_encrypt函数的输入和输出,软件保护方案的安全性得到了提升。
其中,所述受保护软件中为调用所述加密锁准备输入数据的代码和对所述加密锁的返回结果进行处理的代码是进行代码变换的重点。
此外,为了进一步提高本实施例提供的软件的保护方法的安全性,所述加密锁API接口也是经过指令变形的加密锁API接口,所述加密锁API接口的代码是在加密锁API接口被交付用户之前对加密锁API接口的原始代码进行变换生成的新代码,尤其是加密锁API接口的入口部分的代码,通过该变换使受保护软件和加密锁API接口之间的界限难以区分。
最后,对所述受保护软件中用于调用加密锁的原始代码和所述加密锁API接口的原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。
实施例二:
本实施例提供的软件的保护方法包括如下步骤:
利用计算机中的软件开发工具计算明文T的变换结果C;
在受保护软件中存储明文T和变换结果C;
受保护软件通过加密锁API接口调用加密锁,输入明文T,返回变换结果C1;
受保护软件对比C和C1,若相等,则受保护软件继续运行,否则受保护软件终止运行。
软件开发商在将受保护软件交付用户之前,经过编译,受保护软件中用于调用加密锁的原始代码可能是:
PUSH offset_C1_buff
PUSH offset_T_buff
CALL?LIV_encrypt?
这三行原始代码用于通过加密锁API接口的LIV_Encrypt函数调用加密锁计算C1;
PUSH offset_C1_buff
PUSH Offset_C_buff
CALL?MEMCMP?
JNZ?EXIT?
这四行原始代码用于比较C和C1。
根据上述代码,破解者能够很容易地找到CALL?LIV_encrypt?指令并设置断点,并跟踪参数传递过程获得LIV_encrypt函数的输入数据和输出数据,最终通过模拟LIV_encrypt函数来直接返回明文T对应的输出C,欺骗受保护软件。
图3为本发明的软件的保护方法的实施例二的示意图。如图3所示,在本实施例提供的软件的保护方法中,用户使用的软件是经过虚拟机代码变换的软件,所述受保护软件中用于调用加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始代码进行变换生成的新代码,对所述原始代码进行变换的方法是:将所述原始代码变换为虚拟机代码,使分析反编译后的代码和破解变得极为困难,甚至无法设置有效的断点。
经过这样的处理之后,破解者想要分析受保护软件和加密锁之间的交互关系,则必须要先将转换后的代码完全分析出来才能进行,这就就增加了整个保护方案的安全性。
其中,所述受保护软件中为调用所述加密锁准备输入数据的代码和对所述加密锁的返回结果进行处理的代码是进行代码变换的重点。
此外,为了进一步提高本实施例提供的软件的保护方法的安全性,所述加密锁API接口也是经过虚拟机代码变换的加密锁API接口,所述加密锁API接口的代码是在加密锁API接口被交付用户之前对加密锁API接口的原始代码进行变换生成的新代码,尤其是加密锁API接口的入口部分的代码,通过该变换使受保护软件和加密锁API之间的界限难以区分。
最后,对所述受保护软件中用于调用加密锁的原始代码和所述加密锁API接口的原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。
以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。
Claims (7)
1.一种软件的保护方法,包括:受保护软件在运行过程中通过加密锁API接口调用连接在该受保护软件所在计算机上的加密锁,若返回结果正确,则受保护软件继续运行,若返回结果错误,则受保护软件终止运行,其特征在于,所述受保护软件中用于调用加密锁的代码是在软件被交付用户之前对该软件中用于调用加密锁的原始代码进行变换生成的新代码。
2.根据权利要求1所述的软件的保护方法,其特征在于,所述受保护软件中用于调用加密锁的代码包括:为调用所述加密锁准备输入数据的代码和对所述加密锁的返回结果进行处理的代码。
3.根据权利要求1所述的软件的保护方法,其特征在于,所述加密锁API接口的代码是在加密锁API接口被交付用户之前对加密锁API接口的原始代码进行变换生成的新代码。
4.根据权利要求3所述的软件的保护方法,其特征在于,所述加密锁API接口的代码包括加密锁API接口的入口的代码。
5.根据权利要求1或3所述的软件的保护方法,其特征在于,对所述原始代码进行变换的方法是:将所述原始代码进行指令变形或将所述原始代码变换为虚拟机代码。
6.根据权利要求1至4中任一项所述的软件的保护方法,其特征在于,对所述受保护软件中用于调用加密锁的原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。
7.根据权利要求3或4所述的软件的保护方法,其特征在于,对所述加密锁API接口的原始代码进行变换的规则是动态的,每次所述变换生成的新代码均不相同。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101101487A CN102136052A (zh) | 2011-04-29 | 2011-04-29 | 一种软件的保护方法 |
PCT/CN2012/071520 WO2012146079A1 (zh) | 2011-04-29 | 2012-02-23 | 一种软件的保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101101487A CN102136052A (zh) | 2011-04-29 | 2011-04-29 | 一种软件的保护方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102136052A true CN102136052A (zh) | 2011-07-27 |
Family
ID=44295836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011101101487A Pending CN102136052A (zh) | 2011-04-29 | 2011-04-29 | 一种软件的保护方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102136052A (zh) |
WO (1) | WO2012146079A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012146079A1 (zh) * | 2011-04-29 | 2012-11-01 | 北京深思洛克软件技术股份有限公司 | 一种软件的保护方法 |
CN102855422A (zh) * | 2012-08-21 | 2013-01-02 | 飞天诚信科技股份有限公司 | 一种盗版加密锁的识别方法和装置 |
CN105849698A (zh) * | 2013-12-20 | 2016-08-10 | 微软技术许可有限责任公司 | 动态编程中的执行防护 |
CN106850819A (zh) * | 2017-02-17 | 2017-06-13 | 深圳市中博睿存信息技术有限公司 | 一种提高对象存储安全性的方法及系统 |
CN107423582A (zh) * | 2017-03-31 | 2017-12-01 | 合肥民众亿兴软件开发有限公司 | 一种维护软件的方法 |
CN112559981A (zh) * | 2020-12-11 | 2021-03-26 | 北京深思数盾科技股份有限公司 | 一种软件保护方法及装置 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103646205B (zh) * | 2013-12-24 | 2016-04-06 | 飞天诚信科技股份有限公司 | 一种控制加密锁工作的方法 |
CN105635082A (zh) * | 2014-11-12 | 2016-06-01 | 北大方正集团有限公司 | 动态授权方法和系统以及授权中心、授权客户端 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1856759A (zh) * | 2003-08-20 | 2006-11-01 | 麦克罗维西恩欧洲公司 | 代码扰乱以及通过仿真来控制处理器 |
CN101038611A (zh) * | 2006-03-14 | 2007-09-19 | 北京深思洛克数据保护中心 | 一种软件保护的方法 |
CN101216873A (zh) * | 2007-12-29 | 2008-07-09 | 北京深思洛克数据保护中心 | 基于加密锁的软件版权保护方法和系统及加密锁 |
CN101216775A (zh) * | 2008-01-03 | 2008-07-09 | 北京深思洛克数据保护中心 | 一种软件程序的保护方法、装置及系统 |
CN101404056A (zh) * | 2008-10-29 | 2009-04-08 | 金蝶软件(中国)有限公司 | 一种软件的保护方法、装置及设备 |
CN101673328A (zh) * | 2009-09-25 | 2010-03-17 | 北京中企开源信息技术有限公司 | 一种数字电影制作系统认证方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1819512A (zh) * | 2006-03-17 | 2006-08-16 | 北京飞天诚信科技有限公司 | 基于网络软件的信息安全保护方法及其装置 |
CN101782948A (zh) * | 2009-01-15 | 2010-07-21 | 欧阳鹏 | 一种防护模式的切换方法及防护系统 |
CN102136052A (zh) * | 2011-04-29 | 2011-07-27 | 北京深思洛克软件技术股份有限公司 | 一种软件的保护方法 |
-
2011
- 2011-04-29 CN CN2011101101487A patent/CN102136052A/zh active Pending
-
2012
- 2012-02-23 WO PCT/CN2012/071520 patent/WO2012146079A1/zh active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1856759A (zh) * | 2003-08-20 | 2006-11-01 | 麦克罗维西恩欧洲公司 | 代码扰乱以及通过仿真来控制处理器 |
CN101038611A (zh) * | 2006-03-14 | 2007-09-19 | 北京深思洛克数据保护中心 | 一种软件保护的方法 |
CN101216873A (zh) * | 2007-12-29 | 2008-07-09 | 北京深思洛克数据保护中心 | 基于加密锁的软件版权保护方法和系统及加密锁 |
CN101216775A (zh) * | 2008-01-03 | 2008-07-09 | 北京深思洛克数据保护中心 | 一种软件程序的保护方法、装置及系统 |
CN101404056A (zh) * | 2008-10-29 | 2009-04-08 | 金蝶软件(中国)有限公司 | 一种软件的保护方法、装置及设备 |
CN101673328A (zh) * | 2009-09-25 | 2010-03-17 | 北京中企开源信息技术有限公司 | 一种数字电影制作系统认证方法 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012146079A1 (zh) * | 2011-04-29 | 2012-11-01 | 北京深思洛克软件技术股份有限公司 | 一种软件的保护方法 |
CN102855422A (zh) * | 2012-08-21 | 2013-01-02 | 飞天诚信科技股份有限公司 | 一种盗版加密锁的识别方法和装置 |
CN102855422B (zh) * | 2012-08-21 | 2015-03-04 | 飞天诚信科技股份有限公司 | 一种盗版加密锁的识别方法和装置 |
CN105849698A (zh) * | 2013-12-20 | 2016-08-10 | 微软技术许可有限责任公司 | 动态编程中的执行防护 |
CN106850819A (zh) * | 2017-02-17 | 2017-06-13 | 深圳市中博睿存信息技术有限公司 | 一种提高对象存储安全性的方法及系统 |
CN107423582A (zh) * | 2017-03-31 | 2017-12-01 | 合肥民众亿兴软件开发有限公司 | 一种维护软件的方法 |
CN112559981A (zh) * | 2020-12-11 | 2021-03-26 | 北京深思数盾科技股份有限公司 | 一种软件保护方法及装置 |
CN112559981B (zh) * | 2020-12-11 | 2021-09-17 | 北京深思数盾科技股份有限公司 | 一种软件保护方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2012146079A1 (zh) | 2012-11-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102136052A (zh) | 一种软件的保护方法 | |
US10176324B2 (en) | System, method and computer program product for protecting software via continuous anti-tampering and obfuscation transforms | |
US9454456B2 (en) | Method for separately executing software, apparatus, and computer-readable recording medium | |
CN103218549B (zh) | 一种Java源代码加解密的方法及装置 | |
EP3455764B1 (en) | Method and apparatus for dynamic executable verification | |
CN103020495B (zh) | 一种嵌入式软件防盗版加密方法 | |
CN110210190A (zh) | 一种基于二次汇编的代码混淆方法 | |
CN101216775A (zh) | 一种软件程序的保护方法、装置及系统 | |
CN101986326A (zh) | 保护软件安全的方法及装置 | |
CN110866255B (zh) | 一种智能合约漏洞检测方法 | |
CN108154032A (zh) | 一种基于可信执行环境的具有内存完整性保障功能的计算机系统信任根构建方法 | |
CN103164643A (zh) | 一种通过硬件进行反调试的方法和装置 | |
CN107111511B (zh) | 访问控制的方法、装置和系统 | |
Kim et al. | SGX-LEGO: Fine-grained SGX controlled-channel attack and its countermeasure | |
CN103679060A (zh) | 加密方法及加密装置 | |
CN106682493B (zh) | 一种防止进程被恶意结束的方法、装置及电子设备 | |
CN102880818A (zh) | 一种软件保护方法 | |
CN107423582A (zh) | 一种维护软件的方法 | |
Dunaev et al. | Aspects of intermediate level obfuscation | |
Kim et al. | Fast and space-efficient defense against jump-oriented programming attacks | |
CN107423586A (zh) | 软件保护方法和软件保护装置 | |
EP2202661B1 (en) | Apparatus and method for protecting asset in computer system | |
CN109284638B (zh) | 一种安全芯片运行环境的防护方法及系统 | |
CN106295259B (zh) | 一种利用不可屏蔽中断提高物联网产品安全性的方法 | |
Zhang et al. | COVER: Enhancing virtualization obfuscation through dynamic scheduling using flash controller-based secure module |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20110727 |