CN1588265A - 一种基于函数加密的软件保护方法 - Google Patents

一种基于函数加密的软件保护方法 Download PDF

Info

Publication number
CN1588265A
CN1588265A CN 200410073699 CN200410073699A CN1588265A CN 1588265 A CN1588265 A CN 1588265A CN 200410073699 CN200410073699 CN 200410073699 CN 200410073699 A CN200410073699 A CN 200410073699A CN 1588265 A CN1588265 A CN 1588265A
Authority
CN
China
Prior art keywords
function
file
encryption
encryption function
library file
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.)
Granted
Application number
CN 200410073699
Other languages
English (en)
Other versions
CN1288526C (zh
Inventor
吴起
毕经平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Institute of Computing Technology of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CN 200410073699 priority Critical patent/CN1288526C/zh
Publication of CN1588265A publication Critical patent/CN1588265A/zh
Application granted granted Critical
Publication of CN1288526C publication Critical patent/CN1288526C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明涉及计算机应用技术领域,防止软件被破解,特别是一种基于函数加密的软件保护方法。包括步骤:首先选定被加密的文件,摘要函数,加密函数,加密函数的初始化常数,加密函数所在的库文件。使用摘要函数生成被保护文件的摘要;根据摘要生成包含加密函数的初始化常数的矩阵;修改加密函数,使用摘要和矩阵对其初始化;重新编译加密函数所在的库文件,使用编译后的库文件替换原来的库文件,即完成对可执行文件的保护。本发明给计算机软件的可执行文件提供了抗破解能力。本发明加密后的函数不需要还原出加密函数就可以执行,使得破解者无法得到加密函数,也就无法进行破解。

Description

一种基于函数加密的软件保护方法
技术领域
本发明涉及计算机应用技术领域,在计算机应用中软件的保护,防止软件被破解,特别是一种基于函数加密的软件保护方法。
技术背景
计算机软件的重要性越来越得到的全社会的认可,如何防止软件不被破解是保护计算机软件不被盗版的关键技术。虽然发布的软件大多是二进制格式的可执行文件,但许许多多的反编译工具如W32Dasm,IDA Pro等可以把这些二进制文件反编译成为汇编程序,使得一个具有一定计算机基础的人可以对可执行文件进行修改。功能强大的SoftICE调试器的出现使得人们可以对程序运行的整个过程进行跟踪,并随意设置断点进行调试。
目前常用的软件保护方法有序列号保护,警告窗口,时间限制,菜单功能限制,钥匙文件保护等等,这些方法大都可以通过在反编译后的汇编代码中寻找相应条件跳转语句,然后把条件跳转改成无条件跳转即可解除软件保护。更难以破解一些的保护方法主要包括反跟踪技术和加壳技术。其中反跟踪技术通过在程序代码中加入一些特殊的指令(称之为花指令),使得反编译工具无法正确的对二进制文件进行反编译。加壳技术是对可执行文件进行变换,变换之后的文件无法进行反编译。这两种技术虽然能够防止简单的修改跳转指令的方法,但是他们仍然有着明显的缺陷。对于反跟踪技术来说,如果破解者也掌握了花指令的技巧,修改这些花指令之后就可以很容易得对程序进行反编译。加壳技术后的文件不能被编译的同时也不能被的执行,因此执行的时候需要先进行脱壳,破解者通过监视程序运行时的内存就可以很容易的获得加壳之前的二进制代码,从而能够进行反编译。
发明内容
本发明的目的是为了给计算机软件提供防止可执行文件被修改的能力。在计算机应用中软件的保护,防止软件被破解,特别提出一种基于函数加密的软件保护方法。
为了实现该目的,基于函数加密的软件保护方法包括下列步骤:
选定被保护的文件,摘要函数,加密函数,加密函数的初始化常数,加密函数所在的库文件;(摘要函数和加密函数是两个函数,摘要函数生成被保护文件的摘要,而加密函数使用摘要对被保护文件进行保护)
使用摘要函数生成被保护文件的摘要;
根据摘要生成包含加密函数的初始化常数的矩阵;
修改加密函数,使用摘要和矩阵进行初始化;
重新编译加密函数所在的库文件,使用编译后的库文件替换原来的库文件,即完成对可执行文件的保护。
加密函数不在可执行文件中。
使用修改加密函数的初始化赋值语句的方法对函数进行加密。
加密函数的初始化常量隐藏在一个由随机数构成的矩阵中。
使用可执行文件的摘要从矩阵中还原出初始化常量。
加密后的函数本身也是可执行的。
程序执行的过程中不需要还原出加密函数进行调用执行。
加密后的函数和加密函数的复杂度相同。
设文件E是我们想要保护的可执行文件,f(w1,...,wm)是我们选用的加密函数,该函数存在于E运行时所需要的库文件L中。设f(w1,...,wm)有n个局部变量v1,...,vn需要初始化。只有当v1,...,vn分别取c1,...,cn时,函数才能够给出正确的输出,其他情况下,函数给出的输出结果将是错误的。设对可执行文件E进行摘要得到了n字节长的数据块h(E)=<p1,...,pn>,其中pi为第i字节的数值(0≤pi<256),h为摘要函数。构造矩阵
Figure A20041007369900051
其中 a i , p i + 1 = c i , 其他位置上的为随机产生的数。即我们把c1,...,cn存放在随机矩阵中向量<p1,...,pn>所指定的位置上。构造函数f*(w1,...,wm,wm+1),其中wm+1为新增的n维向量参数。除了增加了一个向量参数外,f*和f的另一个不同就在于f*使用矩阵A和向量wm+1来初始化局部变量v1,...,vn,即在f*中令
v i = a i , w m + 1 [ i ]
除此外,f*和f完全相同。显然有
          f*(w1,...,wm,<p1,...,pn>))=f(w1,...,wm)
f*即为我们使用n字节长的数据块<p1,...,pn>对函数f进行加密后的结果,即f*隐含了数据<p1,...,pn>。加密在源代码级进行。如果对可执行文件进行摘要时所使用的函数h具有不可逆性(例如使用SHA哈希算法),即在实际中任意给定一个摘要结果想要构造一段特定的报文使得对该报文进行摘要恰好得到上面的摘要结果在计算上是非常困难的。同样,软件破解者修改了可执行文件之后保持该文件的摘要不变同样也是非常困难的。即我们的算法能够有效的防止对被保护文件A的修改。最后,我们对函数f进行加密的过程中没有任何跳转语句,常数的赋值语句在加密后也变成了到处可见变量赋值语句,编译成二进制之后更加强了这些语句的隐蔽性,因此破解者想从加密之后的f*恢复出f在计算上也是非常困难的,即破解者也很难通过修改库文件来达到破解软件的目的。
上面的讨论说明了我们的保护是有效的,即破解者想要修改可执行文件或库文件在计算上都是非常困难的。下面我们对f*的一些性质进行讨论。首先,加密后的f*本身也是可执行函数,程序运行的过程中不需要先还原出f函数然后调用,即f函数永远不会出现。这个特性使得本文中的方法有别于普通的加壳保护方法。在加壳保护的过程中,首先对f函数进行加壳生成
Figure A20041007369900062
是一段不可执行的二进制代码。程序运行的时候需要先运行脱壳程序把变换 成为f然后进行调用。加壳保护方法的重要弊端是破解者只需要监视程序运行时的内存就可以很容易得到f函数本身,使用f替换 后,无论加壳和脱壳算法有多么复杂和难以破解,加壳保护就完全失去了效果。由于本文中的方法运行时不需要还原出加密函数f,所以破解者无法通过监视内存来进行破解。
加密后函数f*的性能也是我们非常关心的。如果f*的性能比f有着较大的性能下降,那么加密方法的适用范围将大大降低。通过加密过程可以看到,f*和f相比只是把常数赋值改成了变量复制,因此f*和f的性能完全一致。也就是说,本文的加密方法可以用于任何的函数。
本发明给计算机软件的可执行文件提供了抗破解能力。本发明在可执行文件安装到计算机上以后,对可执行文件进行保护。通过使用本发明所提供的函数加密技术,计算机即具有了对该可执行文件进行保护的能力。目前的方法可通过监视程序运行时的内存来还原出的可执行函数,从而能够进行破解。本发明加密后的函数不需要还原出加密函数就可以执行,使得破解者无法得到加密函数,也就无法进行破解。
本发明是在计算机网络中传送文件时,对文件提供保护。使用的技术手段,就是通过本发明权利要求书所限定技术方案,通过函数加密。通过计算机工具及其网络的使用来完成本发明的方法。并且达到了加密后的函数不需要还原出加密函数就可以执行,使得破解者无法得到加密函数,也就无法进行破解的技术效果。
附图说明
图1是本发明的函数加密过程示意图。
具体实施方式
图1给出了本发明方法具体例子过程的示意图。
下面我们使用一个例子来说明本方法的处理过程,其详细步骤如下:
步骤1、选定被加密的文件E,摘要函数h,加密函数f,加密函数所在的库文件L,加密函数的n个变量v1,...,vn和对这些变量进行初始化的常数c1,...,cn
步骤2、使用摘要函数对E进行摘要得到h(E)=<p1,...,pn>,其中0≤pi<256;
步骤3、构造n×256大小的矩阵A=(ai,j)n×256,其中
Figure A20041007369900071
rand为随机数生成函数;
步骤4、修改函数的源代码,把变量初始化赋值语句vi=ci替换为
v i = a i , w m + 1 [ i ] ;
步骤5、编译修改后的源代码,设所得到的新库文件为L*,在安装程序中用L*替换原来的库文件L,则可完成对可执行文件的保护。

Claims (9)

1.一种基于函数加密的软件保护方法,包括步骤:
● 选定被保护的文件,摘要函数,加密函数,加密函数的初始化常数,加密函数所在的库文件;
● 使用摘要函数生成被保护文件的摘要;
● 根据摘要生成包含加密函数的初始化常数的矩阵;
● 修改加密函数,使用摘要和矩阵进行初始化;
● 重新编译加密函数所在的库文件,使用编译后的库文件替换原来的库文件,即完成对可执行文件的保护。
2.根据权利要求1所述的方法,其特征在于,加密函数不在可执行文件中。
3.根据权利要求1所述的方法,其特征在于,使用修改加密函数的初始化赋值语句的方法对函数进行加密。
4.根据权利要求1所述的方法,其特征在于,加密函数的初始化常量隐藏在一个由随机数构成的矩阵中。
5.根据权利要求1所述的方法,其特征在于,使用可执行文件的摘要从矩阵中还原出初始化常量。
6.根据权利要求1所述的方法,其特征在于,加密后的函数本身也是可执行的。
7.根据权利要求1所述的方法,其特征在于,程序执行的过程中不需要还原出加密函数进行调用执行。
8.根据权利要求1所述的方法,其特征在于,加密后的函数和加密函数的复杂度相同。
9.根据权利要求1的基于函数加密的软件保护方法,其特征在于,具体步骤如下:
步骤1、选定被加密的文件E,摘要函数h,加密函数f,加密函数所在的库文件L,加密函数的n个变量v1,...,vn和对这些变量进行初始化的常数c1,...,cn
步骤2、使用摘要函数对E进行摘要得到h(E)=<p1,...,pn>,其中0≤pi<256;
步骤3、构造n×256大小的矩阵A=(ai,j)n×256,其中rand为随机数生成函数;
步骤4、修改函数的源代码,把变量初始化赋值语句vi=ci替换为
v i = a i , w m + 1 [ i ] ;
步骤5、编译修改后的源代码,设所得到的新库文件为L*,在安装程序中用L*替换原来的库文件L,则可完成对可执行文件的保护。
CN 200410073699 2004-09-01 2004-09-01 基于函数加密的软件保护方法 Expired - Fee Related CN1288526C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200410073699 CN1288526C (zh) 2004-09-01 2004-09-01 基于函数加密的软件保护方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200410073699 CN1288526C (zh) 2004-09-01 2004-09-01 基于函数加密的软件保护方法

Publications (2)

Publication Number Publication Date
CN1588265A true CN1588265A (zh) 2005-03-02
CN1288526C CN1288526C (zh) 2006-12-06

Family

ID=34604762

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200410073699 Expired - Fee Related CN1288526C (zh) 2004-09-01 2004-09-01 基于函数加密的软件保护方法

Country Status (1)

Country Link
CN (1) CN1288526C (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100428262C (zh) * 2006-09-22 2008-10-22 中山大学 一种基于改进的一次一密乱码本的软件保护方法
WO2011134207A1 (zh) * 2010-04-28 2011-11-03 北京飞天诚信科技有限公司 软件保护方法
CN109033763A (zh) * 2018-08-01 2018-12-18 苏州浪潮智能软件有限公司 一种程序加密方法、装置、可读介质及存储控制器
CN109992935A (zh) * 2019-03-15 2019-07-09 同盾控股有限公司 一种源代码保护方法及装置
CN110826066A (zh) * 2019-10-30 2020-02-21 腾讯科技(深圳)有限公司 代码摘要的生成方法、装置和计算机存储介质

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100428262C (zh) * 2006-09-22 2008-10-22 中山大学 一种基于改进的一次一密乱码本的软件保护方法
WO2011134207A1 (zh) * 2010-04-28 2011-11-03 北京飞天诚信科技有限公司 软件保护方法
CN109033763A (zh) * 2018-08-01 2018-12-18 苏州浪潮智能软件有限公司 一种程序加密方法、装置、可读介质及存储控制器
CN109992935A (zh) * 2019-03-15 2019-07-09 同盾控股有限公司 一种源代码保护方法及装置
CN109992935B (zh) * 2019-03-15 2021-05-25 同盾控股有限公司 一种源代码保护方法及装置
CN110826066A (zh) * 2019-10-30 2020-02-21 腾讯科技(深圳)有限公司 代码摘要的生成方法、装置和计算机存储介质
CN110826066B (zh) * 2019-10-30 2024-05-31 腾讯科技(深圳)有限公司 代码摘要的生成方法、装置和计算机存储介质

Also Published As

Publication number Publication date
CN1288526C (zh) 2006-12-06

Similar Documents

Publication Publication Date Title
CN110750802B (zh) 一种基于拟态防御针对关键数据进行保护的架构
Behera et al. Different obfuscation techniques for code protection
CN105681039B (zh) 用于生成密钥及对应解密的方法和设备
EP2398182B1 (en) A device and a method for generating software code
Kanzaki et al. Exploiting self-modification mechanism for program protection
CN110929234B (zh) 一种基于代码虚拟化的Python程序加密保护系统与方法
CN107341374B (zh) 一种不透明谓词的插入方法及装置
CN108509772B (zh) 基于执行顺序和单点逻辑的源代码加固方法及装置
EP2383653A2 (en) Method for separately executing software, apparatus, and computer-readable recording medium
CN105787305A (zh) 一种抵抗符号执行和污点分析的软件保护方法
CN111240654A (zh) 一种Python代码加固保护的方法及其系统
CN105718765A (zh) 一种利用有限自动机实现代码混淆的方法
CN112613037B (zh) 一种代码校验方法及装置
US8707053B2 (en) Performing boolean logic operations using arithmetic operations by code obfuscation
Zubair et al. Control logic obfuscation attack in industrial control systems
CN1588265A (zh) 一种基于函数加密的软件保护方法
CN1742247A (zh) 用于加密的应用程序安装的结构
US7000119B1 (en) Instruction/data protection employing derived obscuring instruction/data
CN110147238B (zh) 一种程序编译方法、装置及系统
CN105184119A (zh) 一种软件的安全保护方法
CN113626773A (zh) 一种基于中间语言的代码保护方法
Drape et al. Slicing aided design of obfuscating transforms
Capiluppi et al. Code defactoring: Evaluating the effectiveness of java obfuscations
EP3944106A1 (en) Obfuscating method of protecting code
CN105426702A (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
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: BEIJING FEITIAN CHENGXIN SCIENCE + TECHNOLOGY CO.

Free format text: FORMER OWNER: INST. OF COMPUTING TECHNOLOGY, CHINESE ACADEMY OF SCIENCES

Effective date: 20110121

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100080 NO. 6, KEXUEYUAN SOUTH ROAD, ZHONGGUANCUN, BEIJING TO: 100083 17/F, TOWER B, HUIZHI BUILDING, NO. 9, XUEQING ROAD, HAIDIAN DISTRICT, BEIJING

TR01 Transfer of patent right

Effective date of registration: 20110121

Address after: 100083 Beijing city Haidian District Xueqing Road No. 9 Ebizal building B block 17 layer

Patentee after: FEITIAN TECHNOLOGIES Co.,Ltd.

Address before: 100080 No. 6 South Road, Zhongguancun Academy of Sciences, Beijing

Patentee before: Institute of Computing Technology, Chinese Academy of Sciences

C56 Change in the name or address of the patentee

Owner name: FEITIAN TECHNOLOGIES CO., LTD.

Free format text: FORMER NAME: BEIJING FEITIAN CHENGXIN TECHNOLOGIES CO., LTD.

CP03 Change of name, title or address

Address after: 100085 Beijing city Haidian District Xueqing Road No. 9 Ebizal building B block 17 layer

Patentee after: Feitian Technologies Co.,Ltd.

Address before: 100083 Beijing city Haidian District Xueqing Road No. 9 Ebizal building B block 17 layer

Patentee before: FEITIAN TECHNOLOGIES Co.,Ltd.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20061206

CF01 Termination of patent right due to non-payment of annual fee