一种基于函数加密的软件保护方法.pdf

上传人:32 文档编号:643128 上传时间:2018-03-01 格式:PDF 页数:9 大小:422.93KB
返回 下载 相关 举报
摘要
申请专利号:

CN200410073699.0

申请日:

2004.09.01

公开号:

CN1588265A

公开日:

2005.03.02

当前法律状态:

授权

有效性:

有权

法律详情:

专利权人的姓名或者名称、地址的变更IPC(主分类):G06F 1/00变更事项:专利权人变更前:北京飞天诚信科技有限公司变更后:飞天诚信科技股份有限公司变更事项:地址变更前:100083 北京市海淀区学清路9号汇智大厦B座17层变更后:100085 北京市海淀区学清路9号汇智大厦B座17层|||专利权的转移IPC(主分类):G06F 1/00变更事项:专利权人变更前权利人:中国科学院计算技术研究所变更后权利人:北京飞天诚信科技有限公司变更事项:地址变更前权利人:100080 北京市中关村科学院南路6号变更后权利人:100083 北京市海淀区学清路9号汇智大厦B座17层登记生效日:20110121|||授权|||实质审查的生效|||公开

IPC分类号:

G06F1/00

主分类号:

G06F1/00

申请人:

中国科学院计算技术研究所;

发明人:

吴起; 毕经平

地址:

100080北京市中关村科学院南路6号

优先权:

专利代理机构:

中科专利商标代理有限责任公司

代理人:

周国城

PDF下载: PDF下载
内容摘要

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

权利要求书

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,则可完成对可执行文件的保护。

说明书

一种基于函数加密的软件保护方法
技术领域
本发明涉及计算机应用技术领域,在计算机应用中软件的保护,防止软件被破解,特别是一种基于函数加密的软件保护方法。
技术背景
计算机软件的重要性越来越得到的全社会的认可,如何防止软件不被破解是保护计算机软件不被盗版的关键技术。虽然发布的软件大多是二进制格式的可执行文件,但许许多多的反编译工具如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为摘要函数。构造矩阵

其中 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函数进行加壳生成是一段不可执行的二进制代码。程序运行的时候需要先运行脱壳程序把变换成为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,其中rand为随机数生成函数;
步骤4、修改函数的源代码,把变量初始化赋值语句vi=ci替换为
v i = a i , w m + 1 [ i ] ; ]]>
步骤5、编译修改后的源代码,设所得到的新库文件为L*,在安装程序中用L*替换原来的库文件L,则可完成对可执行文件的保护。

一种基于函数加密的软件保护方法.pdf_第1页
第1页 / 共9页
一种基于函数加密的软件保护方法.pdf_第2页
第2页 / 共9页
一种基于函数加密的软件保护方法.pdf_第3页
第3页 / 共9页
点击查看更多>>
资源描述

《一种基于函数加密的软件保护方法.pdf》由会员分享,可在线阅读,更多相关《一种基于函数加密的软件保护方法.pdf(9页珍藏版)》请在专利查询网上搜索。

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1