CN100428262C - 一种基于改进的一次一密乱码本的软件保护方法 - Google Patents
一种基于改进的一次一密乱码本的软件保护方法 Download PDFInfo
- Publication number
- CN100428262C CN100428262C CNB2006101222917A CN200610122291A CN100428262C CN 100428262 C CN100428262 C CN 100428262C CN B2006101222917 A CNB2006101222917 A CN B2006101222917A CN 200610122291 A CN200610122291 A CN 200610122291A CN 100428262 C CN100428262 C CN 100428262C
- Authority
- CN
- China
- Prior art keywords
- function
- key
- encryption
- software
- encrypted
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006870 function Effects 0.000 claims description 79
- PLQDLOBGKJCDSZ-UHFFFAOYSA-N Cypromid Chemical group C1=C(Cl)C(Cl)=CC=C1NC(=O)C1CC1 PLQDLOBGKJCDSZ-UHFFFAOYSA-N 0.000 claims description 7
- 238000002203 pretreatment Methods 0.000 claims description 5
- 230000002452 interceptive effect Effects 0.000 description 3
- 238000005336 cracking Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000007850 degeneration Effects 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开一种基于改进的一次一密乱码本的软件保护方法。本方法包括加密和解密两个过程,摒弃了传统的一步解密的方式,在运行时通过即时解码器以函数为单位一步步解密软件,仅对一次运行中必须的部分解密,使得攻击者难以获得完整的解密后程序,难以篡改并绕过未解密部分中的软件保护功能,增强了抗攻击性,在运行效果上,由于解密分散进行,就解决了启动延时长的问题。用基于一次一密加密技术,与传统的对称密钥加密算法相比,进一步减少了运行时开销,使得该技术在目前处理器上可以流畅运行。该方法增强了基于加密的软件保护的实用性,增大了破解的难度。
Description
技术领域
本发明属于软件加密解密保护技术领域,具体是一种基于改进的一次一密乱码本的软件保护方法。
背景技术
软件盗版是指非法拷贝并转售软件。盗版给整个软件产业带来巨大的损失盗版者最基本的技术手段就是通过逆向工程来破解程序,进而对软件进行非法的篡改,用来去掉软件中的合法性自检程序片断等软件保护手段。从技术上对软件进行保护,有着重要的工程应用价值,为了增加盗版者进行逆向工程的难度,提出过混淆技术,抗反汇编技术,反调试技术。然而,没有任何一种技术在理论上是不可攻破的。软件保护的意义在于增加盗版者的法律风险或者增加工程上非法复制软件的技术难度。简单的抗反汇编技术,通过在目标文件中增加无用的随机字节来迷惑反汇编器,相对容易破解。使用加密技术来保护软件,对程序进行加密,运行前自动解密。这样由于可执行程序的磁盘映像中保存的是加密后的程序,反汇编器由于无法获得程序的明文就无法进行反汇编操作。然而使用加密技术进行软件保护,面临着2个必须解决的难题:①加密后的软件要在运行时自行解密,带来运行时开销,对大型的可执行程序更为严重,有较长的启动延时。②程序最终要转化成处理器能够理解的二进制代码流,一方面要对处理器暴露这些信息,另一方面对攻击者隐藏这些信息,这是一个两难问题。通常攻击者对被加密软件的攻击并不是针对密码算法的攻击,而是通过逆向工程手段破解软件的自引导程序片断,找到密钥进行解密,或者,直接利用自引导程序解密之后形成的存储器中的映像。
通过加密来保护软件,是防止盗版者通过逆向工程破解程序的一种有效方式。传统加密保护方式,运行时解密开销大,又由于采用一次性解密方式,易受到攻击而直接从存储器中获得解密后的程序映像。
发明内容
本发明的目的是提供一种基于改进的一次一密乱码本的软件加密方法。本发明方法摒弃了传统的一步解密的方式,在运行时通过即时解码器以函数为单位一步步解密软件,仅对一次运行中必须的部分解密,使得攻击者难以获得完整的解密后程序,难以篡改并绕过未解密部分中的软件保护功能,增强了抗攻击性,在运行效果上,由于解密分散进行,就解决了启动延时长的问题。用基于一次一密加密技术,与传统的对称密钥加密算法相比,进一步减少了运行时开销,使得该技术在目前处理器上可以流畅运行。该方法增强了基于加密的软件保护的实用性,增大了破解的难度。
本发明实现上述发明目的所采用的技术方案如下:本方法包括加密和解密两个过程,加密过程包括以下步骤:
a.为当前处理函数在改进的一次一密乱码本中随机选取加密密钥,在全局数据结构“已加密函数表”中标记该函数已被加密处理,并记录加密密钥;
b.在函数体之前为函数添加一个跳板;
c.扫描当前处理函数的每一条指令,对于函数调用做特殊处理,为其增加传递隐式参数的指令;
d.对函数体的指令逐条扫描结束后,使用步骤a中产生的密钥对函数体使用改进的一次一密乱码本加密。
解密过程是:在软件运行时,每个函数当第1次被调用的时候进行解密操作,即时解码器负责解密每个函数,解密后的函数体仍在主存中原来的位置,然后把函数体前面的跳板打上补丁去掉,当第2次执行的时候直接执行解密后的函数体,无须再次解密。
所述步骤a中的一次一密乱码本是一个足够大的二进制密钥池K,设其大小为N个字节,每个字节的编址为0,1,…,N-1;这个二进制密钥池中的密钥为N个介于[0,255]之间的随机数。
所述步骤a中密钥的选取过程如下:首先生成一个[0,N-1]之间的随机数x,以K[x]作为密钥的第一个字节,然后根据被加密方法体的二进制编码长度,选取K[x]的后续字节,如果到达密钥池的结尾,则从密钥池的开始位置继续选取,直到密钥长度等于被加密方法体的二进制编码长度。
所述步骤c中隐式参数是指被调用函数的加密密钥,如果被调用函数已经在此之前被加密保护,则加密密钥可以从全局数据结构“已加密函数表”中获得,对于被调用函数还没有被加密的情况,递归调用本算法首先处理被调用函数。
所述步骤d中使用后的一次一密乱码本以某种形式存在于加密后的程序当中,可以以明文的形式,也可以以使用某种加密算法加密后的密文形式存在。
所述解密过程中用于解密的具体密钥(密钥在乱码本中的起始位置)并不以明文的形式在代码中存在,而是由被解密函数的调用者在调用时作为一个隐式参数来提供。
与普通加密方法相比,本发明软件保护方法的优点在于:
1、在运行时通过即时解码器以函数为单位一步步揭开隐藏在软件中的秘密。仅对一次运行中必须的部分解密,使得攻击者难以获得完整的解密后程序,难以篡改并绕过未解密部分中的软件保护功能,增强了抗攻击性。
2、在运行效果上,由于解密分散进行,就解决了启动延时长的问题。用基于一次一密加密技术,与对称密钥加密算法相比,进一步减少了运行时开销,使得该技术在目前处理器上可以流畅运行。该方法增强了基于加密的软件保护的实用性,增大了破解的难度。
3、用于解密的具体密钥并不以明文的形式在代码中存在,而是由被解密函数的调用者在调用时作为一个隐式参数来提供。所以只有解密了一个函数的某一调用者才可以进一步解密被调用的函数。
4、即时解密技术一步步揭开隐藏在代码中的秘密。在软件的执行过程中,没有使用到的软件片断的逻辑不会被揭秘,这就避免了攻击者一次性通过调试器等工具获得解密后应用程序在主存中的映像。
5、即时解密技术仅仅对一次运行中需要的代码进行解密,对没有运行到的代码并不解密,这又进一步减少了解密所需的时间。与传统的一次性解密方法相比较,解密的操作分为多次进行,也有效地减小了软件启动的时间。由于采用退化的一次一密乱码本加解密,解密的运算仅仅是简单的异或操作,即使对于交互性应用也感觉不到明显的延时。
附图说明
图1是解密过程示意图;
图2是本方法和传统软件加密保护方法的运行时间开销比较图。
具体实施方式
下面结合附图对本发明作进一步说明。
本发明方法是采用用改进的一次一密乱码本来实现软件加密的。一次一密乱码本使用一个大的不重复的真随机密钥字母集,这个密钥字母集被称为乱码本。本发明方法是将一次一密乱码本加密算法进行推广,用二进制数字组成的一次密乱码本代替由字母组成的一次一密乱码本,用异或代替明文字母加法。解密时只需对照一次一密乱码本再次异或即可。在使用加密方法对软件进行保护时,解密是在软件运行时自动完成的,所以解密时间要占用软件的运行时间。用一次一密乱码本,解密的操作仅仅是一个简单的异或操作,与传密码算法相比,解密时间有大幅提高。改进的一次一密乱码本,是一个足够大的二进制密钥池K,设其大小为N个字节,每个字节的编址为0,1,…,N-1。这个二进制密钥池中的密钥为N个介于[0,255]之间的随机数。对软件的加密保护,以程序中的函数为单位,对每个函数体分别加密,并且在密钥池中随机选取不同的密钥。密钥的选取过程如下,生成一个[0,N-1]之间的随机数x,以K[x]作为密钥的第一个字节,根据被加密方法体的二进制编码长度,选取K[x]的后续字节,如果到达密钥池的结尾,则从密钥池的开始位置继续选取,直到密钥长度等于被加密方法体的二进制编码长度。设程序中共有方法F个,即使攻击者清楚加密保护算法的原理,但是如果无法准确获得每个方法的密钥,而尝试破解软件需要进行F×N次试验,而且每次试验结果是否正确很难判断,从而无法自动完成。由于N是足够大的数,并且在一个实际的软件中F一般也很大,这就使破解加密的尝试在实际的工程中不可行。对于软件的保护并不依赖于算法的保密性是本算法的一个良好性质。
软件加密过程如下,从软件的入口函数开始,以函数为单位递归进行:①为当前处理函数随机选取加密密钥,在全局数据结构“已加密函数表”中标记该函数已被加密处理,并记录加密密钥。②在函数体之前为函数添加一个跳板。③扫描当前处理函数的每一条指令,对于函数调用做特殊处理,为其增加传递隐式参数的指令。这个隐式参数为被调用函数的加密密钥。如果被调用函数已经在此之前被加密保护,则加密密钥可以从全局数据结构“已加密函数表”中获得。对于被调用函数还没有被加密的情况,递归调用本算法首先处理被调用函数。④对函数体的指令逐条扫描结束后,使用①中产生的密钥对函数体使用乱码本加密。退化的一次一密乱码本就以某种形式存在于加密后的程序当中。可以以明文的形式,也可以以使用某种加密算法加密后的密文形式存在。本发明的健壮性不依赖于保守乱码本的秘密,由于每个方法采用不同密钥加密,即使获得乱码本也难以轻易破解。这与传统的使用一个密钥加密软件,并且依靠保守密钥的秘密来防范破解的方法是本质不同的。传统的基于加密的软件保护方法,在软件自引导的时候,一次性对软件进行解密。这种方法的一个显著弱点是解密后的软件以明文的形式存在于主存当中,很容易让攻击者通过调试器等工具直接从主存获得解密后的软件。本发明方法采用即时解密技术,每个函数当第1次被调用的时候才进行解密操作,解密结束之后交处理器执行。本发明在每个加密后的函数体的前面都添加了一个跳板,调用即时解码器。即时解码器负责在运行时解密每个函数,解密后的函数体仍在主存中原来的位置,只不过前面的跳板已经被打上补丁去掉,当第2次执行的时候直接执行解密后的函数体,无须再次解密,如图1所示。
用于解密的具体密钥(密钥在乱码本中的起始位置)并不以明文的形式在代码中存在,而是由被解密函数的调用者在调用时作为一个隐式参数来提供。所以只有解密了一个函数的某一调用者才可以进一步解密被调用的函数。即时解密技术一步步揭开隐藏在代码中的秘密,在软件的执行过程中,没有使用到的软件片断的逻辑不会被揭秘,这就避免了攻击者一次性通过调试器等工具获得解密后应用程序在主存中的映像。现代软件的功能是强大而复杂的,一个软件系统可以完成若干项主要功能,软件的一次运行仅使用其中一部分功能。并且软件中有很大一部分的逻辑是用来处理各种异常和例外情况的,在通常情况下这些代码并不运行。这就保证了一个攻击者,即使多次运行软件也很难把软件解密完全。未被解密的代码中,就可以隐藏用于软件合法性自检和自毁的程序片断。这些程序片断如果不被盗版者成功的去除,盗版的非法拷贝的使用价值就会大大降低。现代软件是庞大的,即时解密技术仅仅对一次运行中需要的代码进行解密,对没有运行到的代码并不解密,这又进一步减少了解密所需的时间。与传统的一次性解密方法相比较,解密的操作分为多次进行,也有效地减小了软件启动的时间。由于采用退化的一次一密乱码本加解密,解密的运算仅仅是简单的异或操作,即使对于交互性应用也感觉不到明显的延时。
为了验证基于退化的一次一密乱码本的软件加密技术和即时解密技术在运行时开销方面的优势,将其与传统的软件加密保护方法进行了比较。选择不同大小的应用程序映像,以考察不同规模应用程序应用这项技术的可行性。对于使用的加密算法,采用了本文中建议的退化的一次一密乱码本加密,标准DES,3DES。而没有采用基于公开密钥的RSA等算法,这是因为软件实现的RSA算法比DES算法要慢100倍[2],运行时开销过大。使用AMD Athlon XP 2500+处理器512MDDR存储器的计算机为试验平台,DES、3DES算法采用cryptlib的高效软件实现,所得试验数据如图2中所示。其中,DES,3DES,OTP分别对应采用相应算法一次性解密的总时间,其后的列对应着采用JIT(Just-In-Time,运行时编译执行)方式解密一个函数的平均时间。对于现代的微处理器,其计算能力已很强大。对于对称密钥加密和一次一密乱码本加密的解密时间均有不错的实验结果。对于较小的应用程序,即使用DES/3DES进行加密并一次解密也不会带来大的启动时延。对于较大的应用程序,用DES/3DES进行加密并且一次解密就会略感时延,这就体现出一次一密乱码本比DES、3DES分别快约3倍、9倍的优势。使用即时解密更能大大缩短启动时延,用上述3种算法启动时时延均不明显。解密每个函数的时间根据采用的加密算法而变化,以一次一密乱码本最短。对于交互式应用,用一次一密乱码本加密JIT解密方式,运行中无停滞感。对于对称密钥加密,如用JIT解密,运行时偶有停滞感,这是集中解密造成的时延。
Claims (6)
1、一种基于改进的一次一密乱码本的软件保护方法,本方法包括加密和解密两个过程,其特征是:所述加密过程步骤如下:
a.为所保护软件正在运行的函数在改进的一次一密乱码本中随机选取加密密钥,在全局数据结构“已加密函数表”中标记该函数已被加密处理,并记录加密密钥;
b.在函数体之前为函数添加一个跳板;
c.扫描当前处理函数的每一条指令,对于函数调用做特殊处理,为其增加传递隐式参数的指令;
d.对函数体的指令逐条扫描结束后,使用步骤a中产生的密钥对函数体使用改进的一次一密乱码本加密;
所述解密过程是:在软件运行时,当每个函数第1次被调用的时候进行解密操作,即时解码器负责解密每个函数,解密后的函数体仍在主存中原来的位置,然后把函数体前面的跳板打上补丁去掉,当第2次执行所述函数的时候直接执行解密后的函数体,无须再次解密。
2、根据权利要求1所述的软件加密解密方法,其特征是所述步骤a中的一次一密乱码本是一个足够大的二进制密钥池K,假设其大小为N个字节,每个字节的编址为0,1,…,N-1;这个二进制密钥池中的密钥为N个介于[0,255]之间的随机数。
3、根据权利要求1或2所述的软件加密解密方法,其特征是所述步骤a中密钥的选取过程如下:首先生成一个[0,N-1]之间的随机数x,以K[x]作为密钥的第一个字节,然后根据被加密方法体的二进制编码长度,选取K[x]的后续字节,如果到达密钥池的结尾,则从密钥池的开始位置继续选取,直到密钥长度等于被加密方法体的二进制编码长度。
4、根据权利要求1所述的软件加密解密方法,其特征是所述步骤c中隐式参数是指被调用函数的加密密钥,如果被调用函数已经在此之前被加密保护,则加密密钥可以从全局数据结构“已加密函数表”中获得,对于被调用函数还没有被加密的情况,首先递归调用本算法,处理被调用函数。
5、根据权利要求1所述的软件加密解密方法,其特征是所述步骤d中使用后的一次一密乱码本以某种形式存在于加密后的程序当中,可以以明文的形式,也可以以使用某种加密算法加密后的密文形式存在。
6、根据权利要求1所述的软件保护方法,其特征是所述解密过程中用于解密的具体密钥,并不以明文的形式在代码中存在,而是由被解密函数的调用者在调用时作为一个隐式参数来提供,其中,密钥位于乱码本中的起始位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101222917A CN100428262C (zh) | 2006-09-22 | 2006-09-22 | 一种基于改进的一次一密乱码本的软件保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101222917A CN100428262C (zh) | 2006-09-22 | 2006-09-22 | 一种基于改进的一次一密乱码本的软件保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1952949A CN1952949A (zh) | 2007-04-25 |
CN100428262C true CN100428262C (zh) | 2008-10-22 |
Family
ID=38059290
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101222917A Expired - Fee Related CN100428262C (zh) | 2006-09-22 | 2006-09-22 | 一种基于改进的一次一密乱码本的软件保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100428262C (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8862893B2 (en) * | 2008-06-11 | 2014-10-14 | Microsoft Corporation | Techniques for performing symmetric cryptography |
CN101986663A (zh) * | 2010-11-29 | 2011-03-16 | 北京卓微天成科技咨询有限公司 | 一种基于otp的云存储数据存储方法、装置及系统 |
CN102819702B (zh) | 2012-07-19 | 2015-11-25 | 腾讯科技(深圳)有限公司 | 文件加密运行方法和文件加密运行系统 |
CN105049203B (zh) * | 2015-06-17 | 2018-06-29 | 复旦大学 | 一种支持多工作模式的可配置3des加解密算法电路 |
CN106599620A (zh) * | 2016-11-16 | 2017-04-26 | 中国人民解放军国防科学技术大学 | 一种基于动态代码变换的二进制软件保护方法 |
CN113380016A (zh) * | 2021-06-09 | 2021-09-10 | 贵州电网有限责任公司 | 一种基于手持设备的计量自动化系统及其使用方法 |
CN117454438B (zh) * | 2023-12-25 | 2024-04-09 | 深圳鼎智通讯有限公司 | 一种受攻击自毁系统及智能支付终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1064558A (zh) * | 1992-03-23 | 1992-09-16 | 天宇光电技术开发有限公司 | 计算机软件的函数加密方法及其装置 |
WO1997003398A1 (en) * | 1995-07-13 | 1997-01-30 | Sigbjoernsen Sigurd | Protection of software against use without permit |
US6236727B1 (en) * | 1997-06-24 | 2001-05-22 | International Business Machines Corporation | Apparatus, method and computer program product for protecting copyright data within a computer system |
CN1541375A (zh) * | 2001-06-12 | 2004-10-27 | 双重通行费系统 | |
CN1588265A (zh) * | 2004-09-01 | 2005-03-02 | 中国科学院计算技术研究所 | 一种基于函数加密的软件保护方法 |
-
2006
- 2006-09-22 CN CNB2006101222917A patent/CN100428262C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1064558A (zh) * | 1992-03-23 | 1992-09-16 | 天宇光电技术开发有限公司 | 计算机软件的函数加密方法及其装置 |
WO1997003398A1 (en) * | 1995-07-13 | 1997-01-30 | Sigbjoernsen Sigurd | Protection of software against use without permit |
US6236727B1 (en) * | 1997-06-24 | 2001-05-22 | International Business Machines Corporation | Apparatus, method and computer program product for protecting copyright data within a computer system |
CN1541375A (zh) * | 2001-06-12 | 2004-10-27 | 双重通行费系统 | |
CN1588265A (zh) * | 2004-09-01 | 2005-03-02 | 中国科学院计算技术研究所 | 一种基于函数加密的软件保护方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1952949A (zh) | 2007-04-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9053300B2 (en) | Device and a method for generating software code | |
TWI478050B (zh) | 編譯式電腦碼指令組之編密碼方法及裝置 | |
CN100428262C (zh) | 一种基于改进的一次一密乱码本的软件保护方法 | |
CN101682506B (zh) | 用于确定在保护数据时应用的可编程处理步骤的系统和方法 | |
CN102138300B (zh) | 消息认证码预计算在安全存储器中的应用 | |
CN104660590B (zh) | 一种文件加密安全云存储方案 | |
KR20180037254A (ko) | 비보안 단말기로부터의 트랜잭션을 보안화하는 방법 | |
KR20100120671A (ko) | 스마트 카드의 보안 | |
US20170046280A1 (en) | Data processing device and method for protecting a data processing device against attacks | |
Falcarin et al. | Exploiting code mobility for dynamic binary obfuscation | |
KR20130093557A (ko) | 적어도 하나의 암호화 명령어를 포함하는 소프트웨어 애플리케이션의 협력 실행을 위한 시스템, 장치, 및 방법 | |
CN114826590B (zh) | 一种分组模式加密方法、解密方法及其装置、设备 | |
CN100446019C (zh) | 一种软件版权保护方法 | |
CN105184119B (zh) | 一种软件的安全保护方法 | |
CN110138556A (zh) | 数据处理装置及数据处理方法 | |
KR20100048323A (ko) | 스니핑 방지를 위한 키보드 보안 장치 및 방법 | |
CN104504312A (zh) | 软件反调试保护方法 | |
EP3662613A1 (en) | Method to secure a software code performing accesses to look-up tables | |
US20210026935A1 (en) | High performance compute ip encryption using unique set of application attributes | |
CN106599620A (zh) | 一种基于动态代码变换的二进制软件保护方法 | |
CN1558593A (zh) | 采用密码技术来防止网络游戏外挂的方法 | |
CN105007156A (zh) | 一种基于app加固的动态配置系统 | |
CN101562521A (zh) | 一种密钥更新方法 | |
CN102087689B (zh) | 一种软件重用模块的保护方法及装置 | |
KR101625018B1 (ko) | 데이터 암호화 장치 및 방법, 그를 이용한 컴퓨팅 장치 및 통신 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20081022 Termination date: 20140922 |
|
EXPY | Termination of patent right or utility model |