一种软件保护方法和装置的制作方法

文档序号:6423163阅读:142来源:国知局
专利名称:一种软件保护方法和装置的制作方法
技术领域
本发明涉及软件版权保护技术领域,特别涉及一种软件保护方法和装置。
背景技术
软件由于其纯数字化的特征,一直遭受盗版的困扰,在现有技术中,通常采用两种软件保护方法防止盗版,一种为基于硬件的保护方法,例如,采用加密锁进行软件保护,另一种为基于软件的保护方法,例如,采用虚拟机机制进行软件保护。下面,对现有技术中这两种软件保护方法进行介绍。加密锁是一种具有一定处理能力的硬件设备,其通过应用程序编程(API)接口和软件平台相连,受保护软件的运行环境为所述软件平台,将受保护软件的部分代码移植至加密锁中,取而代之地,受保护软件中被移植代码部分用调用函数替换,调用函数用于表示调用加密锁中的被移植代码。受保护软件在软件平台上运行的过程中,当运行至原有的被移植代码部分时,采用调用函数调用加密锁中被移植代码,被移植代码在加密锁中运行完毕后,再将结果再返回至软件平台上的受保护软件。为了对加密锁的上述工作过程进行详细说明,下面举例说明。假设软件平台为计算机上的S系统,受保护软件用于依次连续执行步骤1、2、3、4, 步骤1对应代码段a,步骤2对应代码段段b,步骤3对应代码段c,步骤4对应代码段d,加密锁与计算机上的S系统连接后,可将受保护软件中的代码段c转化为加密锁可识别的指令移植至加密锁中,受保护软件中的代码段c用调用函数f(x)替换,f(x)用于表示调用加密锁中的代码段c,当受保护软件在计算机上的S系统运行完毕代码段a后,运行f (χ)调用加密锁中的代码段b,代码段b在加密锁中运行完毕后,将结果返回至计算机上的S系统中的受保护软件,然后受保护软件在计算机上的S系统中再运行代码段c、d。由上述方法可知,由于受保护软件的一部分在加密锁硬件中运行,脱离加密锁的受保护软件是不完整的,破解者必须还原出加密锁内运行的代码才能实现对软件的破解, 因此受保护软件的保护强度就依赖于加密锁硬件内运行的那部分代码的保护强度,而加密锁硬件通常会使用安全性极高的安全处理器或者智能卡,确保内部代码无法跟踪,显然这种保护方式具有极高的保护强度。现有的虚拟机保护技术和上述的加密锁保护技术非常相似,也是通过将软件的部分代码置于安全环境中运行来实现对软件的保护,与加密锁保护方法的主要区别在于所述的安全环境并不是由额外的硬件提供,而是由和受保护软件同一硬件中的虚拟机提供。为了对虚拟机的上述工作过程进行详细说明,下面举例说明。假设受保护软件和虚拟机均运行于某计算机上的S系统中,受保护软件用于连续执行步骤1、2、3、4,步骤1对应代码a段,步骤2对应代码b段,步骤3对应代码c段,步骤 4对应代码段d,可将受保护软件中的代码段c转化为虚拟机指令移植至虚拟机中,受保护软件中的代码段c用调用函数f(x)替换,f(x)用于表示调用虚拟机中的代码段c,当受保护软件在计算机上的S系统运行完毕代码段a后,运行f (χ)调用S系统中的虚拟机的代码段b,代码段b在虚拟机中运行完毕后,将结果返回至S系统中的受保护软件,然后受保护软件在计算机上的S系统中再运行代码段c、d。需要强调的是,本发明所述的虚拟机和VMWare,QEMU等虚拟机不同,本发明所述的虚拟机是指一组指令集和执行此指令集所需的运行环境,而并不需要对应某种真实机器,类似于自定义指令集的高级语言虚拟机,下文中称为安全虚拟机。此安全虚拟机为软件保护目的而设计,可以嵌入到受保护软件中运行,且安全虚拟机的指令集和运行机制等技术细节完全不公开,从而使安全虚拟机指令的跟踪和分析难度明显提高,这样运行在安全虚拟机中的代码就得到了保护。由于此安全虚拟机和受保护软件运行在相同的平台中,不会遇到类似加密锁保护技术那样的性能和资源瓶颈,因此可以从受保护软件中选择的代码范围和运行效率大大增加。然而,上述两种软件保护方法均存在一些缺陷,详细论述如下对于基于加密锁的软件保护方法来说,在选择足够复杂的代码的情况下,其能实现的保护强度显然是最高的,但在实际应用中,由于受限于加密锁的硬件性能和可用资源等原因,在很多保护方案中,受保护软件中最终可以移植到加密锁中的代码是有限的,也就是说,这种情况下,被移植代码的复杂度有可能达不到要求,破解者通过跟踪、分析受保护软件和加密锁之间交互的规律,有可能还原出被移植代码的功能,从而实现破解。对于基于虚拟机的软件保护方法来说,由于虚拟机技术其自身由软件实现,且运行在和受保护软件相同的平台中,并不能摆脱破解者的跟踪和分析,一旦破解者分析出安全虚拟机的指令集和运行特征,仍然可以如同普通的软件破解一样,对安全虚拟机中运行的指令进行跟踪和分析,还原出安全虚拟机中运行的代码的功能,甚至可以对安全虚拟机中运行的代码直接进行篡改,从而实现破解。综上,现有技术中基于加密锁和安全虚拟机的保护技术各有缺陷,都不能完全满高强度的软件保护需求。

发明内容
有鉴于此,本发明提供一种软件保护方法和装置,能够提高软件保护强度。为实现上述发明目的,本发明的技术方案是这样实现的一种软件保护方法,该方法用于对受保护软件进行保护,所述受保护软件包括依次按照执行顺序排列的代码段1、2. ..N, N为正整数,所述受保护软件运行于软件平台,在所述软件平台中设置安全虚拟机,所述加密锁还与软件平台连接,该方法包括将N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码转化为安全虚拟机的指令并移植至安全虚拟机中,将所述第一被移植代码中的一个或多个代码段作为第二被移植代码,将第二被移植代码转化为加密锁的指令并移植至加密锁中。将第一被移植代码转化为安全虚拟机的指令并移植至安全虚拟机中,且将所述第一被移植代码中的一个或多个代码段作为第二被移植代码,将第二被移植代码转化为加密锁的指令并移植至加密锁中之后,该方法进一步包括受保护软件依次执行N个代码段,其中,若欲执行的代码段为第一被移植代码时, 受保护软件调用安全虚拟机执行所第一被移植代码,安全虚拟机执行完毕后将执行结果返回至受保护软件,当安全虚拟机执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机调用加密锁执行所述第二被移植代码,加密锁执行完毕后将执行结果返回至安全虚拟机。该方法进一步包括预先将安全虚拟机本身的实现代码中的一部分代码移植至加密锁中。一种软件保护装置,该装置用于对受保护软件进行保护,所述受保护软件包括依次按照执行顺序排列的代码段1、2. ..N, N为正整数,该装置包括软件平台和加密锁,所述软件平台包括安全虚拟机单元、执行单元、移植单元和接口单元;其中,所述执行单元,用于存储受保护软件;所述移植单元,将N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码通过接口单元移植至安全虚拟机单元中,将所述第一被移植代码中的一个或多个代码段作为第二被移植代码通过接口单元移植至加密锁中;所述安全虚拟机单元,用于接收所述第一被移植代码,将其转化为自身的指令;所述加密锁,用于接收所述第二被移植代码,将其转化为自身的指令。所述执行单元,进一步用于控制受保护软件依次执行N个代码段,其中,若欲执行的代码段为第一被移植代码时,执行单元通过接口单元调用安全虚拟机单元执行所第一被移植代码,安全虚拟机单元执行完毕后通过接口单元将执行结果返回至执行单元,当安全虚拟机单元执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机单元通过接口单元调用加密锁执行所述第二被移植代码,加密锁执行完毕后通过接口单元将执行结果返回至安全虚拟机单元。根据本发明所提供的技术方案,将受保护软件的N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码转化为安全虚拟机可识别的指令并移植至安全虚拟机中,将所述第一被移植代码中的一个或多个代码段作为第二被移植代码,将第二被移植代码转化为加密锁可识别的指令并移植至加密锁中,当受保护软件执行代码的过程中,若欲执行的代码段为第一被移植代码时,受保护软件调用安全虚拟机执行所第一被移植代码, 当安全虚拟机执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机调用加密锁执行所述第二被移植代码。显然,本发明中,受保护软件可以选择的移植代码范围与虚拟机保护技术相同,而保护强度则相当于虚拟机保护技术的基础上再增加加密锁的保护。进一步地,在安全虚拟机中运行的代码可以为对运行效率要求高的代码,在加密锁中运行的代码可以为效率要求不高,但逻辑足够复杂的代码,则本发明中代码运行的效率能够接近虚拟机保护技术所能达到的最高效率,而保护强度能够接近虚拟机保护技术和加密锁保护技术的理论最高保护强度之和,运行效率和安全都可以兼顾。可见,本发明将基于虚拟机的软件保护技术和基于加密锁的保护技术有效结合在一起,充分汲取了两种保护技术的优点,并相互弥补的各自的缺点,扩大了代码保护的范围,提高了软件保护的强度。


图1为本发明所提供的一种软件保护方法的实施例的流程图。图2为本发明所提供的一种软件保护装置的实施例的结构图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。本发明的核心思想为将受保护软件中的一部分代码移植至安全虚拟机中,同时, 将移植至安全虚拟机中的代码的一部分移植至加密锁中,因此将基于虚拟机的软件保护技术和基于硬件的保护技术有效地结合在一起,充分汲取了两种保护技术的优点,并相互弥补的各自的缺点,提高了软件保护的强度。图1为本发明所提供的一种软件保护方法的实施例的流程图,该方法用于对受保护软件进行保护,所述受保护软件包括依次按照执行顺序排列的代码段1、2. ..N, N为正整数,所述受保护软件运行于软件平台,在所述软件平台中设置安全虚拟机,所述加密锁还与软件平台连接。如图1所示,该方法包括以下步骤步骤101,将N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码转化为安全虚拟机的指令并移植至安全虚拟机中,将所述第一被移植代码中的一个或多个代码段作为第二被移植代码,将第二被移植代码转化为加密锁的指令并移植至加密锁中。在本步骤中,指令转化方法以及移植方法为现有技术中的内容,此处不予赘述。例如,将第一被移植代码转化为安全虚拟机的指令并移植至安全虚拟机中的过程可能是手工进行的,也可能是自动进行的。手工方式就是用户自己用安全虚拟机的指令重新编写代码, 自动方式可以通过现有工具处理受保护软件源代码或者编译好的二进制代码,将其转换为安全虚拟机的指令,例如可以将编译好的文件中的x86指令逐一转换为虚拟机指令序列 (例如x86指令ADD EAX, 2可以转换成虚拟机指令序列SET Ml、SET M2和ADD Ml, M2),这样可以降低开发保护方案的难度。同理,第二被移植代码转化为加密锁的指令并移植至加密锁中的移植过程可以是手工也可以是自动的,例如加密锁也能提供安全虚拟机指令运行环境的情况下,那么就可以直接从安全虚拟机中自动选择部分代码放到加密锁中执行。由于加密锁的优点在于安全性比较高,缺点在于受限于硬件性能的局限性,被移植代码对运行效率和资源不能要求太高,而安全虚拟机的优点在于运行效率比较高,缺点在于安全性比较低,因此,在安全虚拟机中运行的第一被移植代码可以为对运行效率要求高的代码,在加密锁中运行的第二被移植代码可以为效率要求不高,但逻辑足够复杂的代码。例如,第二被移植代码对安全性的要求可以高于第一被移植代码对安全性的要求,第一被移植代码对运行效率的要求可以高于第二被移植代码对运行效率的要求。第一被移植代码和第二被移植代码的选择也可以是动态的,例如在受保护软件运行的时候安全虚拟机根据当前平台的运行速度、存储空间、运算能力来决定哪些代码在加密锁中执行。当然,本发明不对第一被移植代码和第二被移植代码的具体特性进行限定,上述第一被移植代码和第二被移植代码的特性仅为实施例。步骤102,受保护软件依次执行N个代码段,其中,若欲执行的代码段为第一被移植代码时,受保护软件调用安全虚拟机执行所第一被移植代码,安全虚拟机执行完毕后将执行结果返回至受保护软件,当安全虚拟机执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机调用加密锁执行所述第二被移植代码,加密锁执行完毕后将执行结果返回至安全虚拟机。其中,调用加密锁、安全虚拟机以及结果返回的方法为现有技术的内容,此处不予赘述。可见,本发明从安全性的角度来看,破解者首先必须找到第一被移植代码对应的安全虚拟机指令和受保护软件指令的映射关系才能对安全虚拟机中的代码进行分析,而即使分析出映射关系,第二被移植代码又在加密锁中运行,基于加密锁硬件的安全性,破解者无法跟踪这段代码,显然,这样整体方案的安全级别是有保障的。至此,本流程结束。本发明还可进一步包括在步骤101之前,本发明还可将安全虚拟机本身的实现代码中的一部分代码也移植至加密锁中,由于加密锁内的代码无法跟踪,所以还原安全虚拟机架构的工作就会有比较大的门槛,从而也能提高受安全虚拟机保护的代码的安全。所述一部分代码的长度没有限定,根据具体情况而定。下面,通过一个实施例对本发明的技术方案进行详细说明。假设软件平台为计算机上的S系统,受保护软件和安全虚拟机均运行于该计算上的S系统中,加密锁与计算机上的S系统连接,受保护软件用于连续执行步骤1、2、3、4、5,步骤1对应代码段a,步骤2对应代码段b,步骤3对应代码段c,步骤4对应代码段d,步骤5 对应代码段e。可将代码段a、b、C、d作为第一被移植代码,将第一被移植代码转化为虚拟机可识别的指令并移植至安全虚拟机中。同时,受保护软件中的代码段a、b、c、d用调用函数f(xl) 替换,f (xl)用于表示调用虚拟机中的代码段a、b、c、d。 若代码段a对安全性要求比较高,则可将代码段a作为第二被移植代码,将第二被移植代码转化为加密锁可识别的指令并移植至加密锁中。虚拟机中的代码段a用调用函数 f(x2)替换,f(x2)用于表示调用加密锁中的代码段a。当受保护软件在计算机上的S系统欲执行代码段a、b、c、d、e时,首先运行f(xl)调用安全虚拟机执行,当安全虚拟机欲执行代码段a时,运行f (U)调用加密锁执行,加密锁执行完毕后将执行结果返回至虚拟机,然后安全虚拟机接着执行代码段b、c、d,安全虚拟机执行完毕后将执行结果返回至受保护软件,然后受保护软件执行代码段e。至此,对本实施例介绍完毕。图2为本发明所提供的一种软件保护装置的实施例的结构图,该装置用于对受保护软件进行保护,所述受保护软件包括依次按照执行顺序排列的代码段1、2. ..N, N为正整数,如图2所示,该装置包括软件平台201和加密锁202,所述软件平台201包括安全虚拟机单元203、执行单元204、移植单元205和接口单元206。所述执行单元204,用于存储受保护软件;所述移植单元205,将N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码通过接口单元移206植至安全虚拟机单元203中,将所述第一被移植代码中的一个或多个代码段作为第二被移植代码通过接口单元206移植至加密锁202中;所述安全虚拟机单元203,用于接收所述第一被移植代码,将其转化为自身的指令;所述加密锁202,用于接收所述第二被移植代码,将其转化为自身的指令。所述执行单元204,进一步用于控制受保护软件依次执行N个代码段,其中,若欲执行的代码段为第一被移植代码时,执行单元通过接口单元206调用安全虚拟机单元203 执行所第一被移植代码,安全虚拟机单元203执行完毕后通过接口单元206将执行结果返回至执行单元204,当安全虚拟机单元203执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机单元203通过接口单元206调用加密锁202执行所述第二被移植代码,加密锁执202行完毕后通过接口单元将执行结果返回至虚拟机单元203。关于装置部分的详细介绍可参考方法部分的说明,此处不予赘述。综上,在本发明中,首将受保护软件的N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码转化为安全虚拟机可识别的指令并移植至安全虚拟机中,将所述第一被移植代码中的一个或多个代码段作为第二被移植代码,将第二被移植代码转化为加密锁可识别的指令并移植至加密锁中,当受保护软件执行代码的过程中,若欲执行的代码段为第一被移植代码时,受保护软件调用安全虚拟机执行所第一被移植代码,当安全虚拟机执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机调用加密锁执行所述第二被移植代码。可见,本发明将基于安全虚拟机的软件保护技术和基于硬件的保护技术有机地结合在一起,充分汲取了两种保护技术的优点,并相互弥补的各自的缺点,提高了软件保护的强度。进一步地,在安全虚拟机中运行的代码可以为对运行效率要求高的代码,在加密锁中运行的代码可以为效率要求不高,但逻辑足够复杂的代码,则本发明中代码运行的效率能够接近虚拟机保护技术所能达到的最高效率,而保护强度能够接近虚拟机保护技术和加密锁保护技术的理论最高保护强度之和,运行效率和安全都可以兼顾。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种软件保护方法,该方法用于对受保护软件进行保护,所述受保护软件包括依次按照执行顺序排列的代码段1、2. ..N, N为正整数,所述受保护软件运行于软件平台,其特征在于,在所述软件平台中设置安全虚拟机,所述加密锁还与软件平台连接,该方法包括将N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码转化为安全虚拟机的指令并移植至安全虚拟机中,将所述第一被移植代码中的一个或多个代码段作为第二被移植代码,将第二被移植代码转化为加密锁的指令并移植至加密锁中。
2.根据权利要求1所述的方法,其特征在于,将第一被移植代码转化为安全虚拟机的指令并移植至安全虚拟机中,且将所述第一被移植代码中的一个或多个代码段作为第二被移植代码,将第二被移植代码转化为加密锁的指令并移植至加密锁中之后,该方法进一步包括受保护软件依次执行N个代码段,其中,若欲执行的代码段为第一被移植代码时,受保护软件调用安全虚拟机执行所第一被移植代码,安全虚拟机执行完毕后将执行结果返回至受保护软件,当安全虚拟机执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机调用加密锁执行所述第二被移植代码,加密锁执行完毕后将执行结果返回至安全虚拟机。
3.根据权利要求1或2所述的方法,其特征在于,该方法进一步包括预先将安全虚拟机本身的实现代码中的一部分代码移植至加密锁中。
4.一种软件保护装置,该装置用于对受保护软件进行保护,所述受保护软件包括依次按照执行顺序排列的代码段1、2. ..N, N为正整数,其特征在于,该装置包括软件平台和加密锁,所述软件平台包括安全虚拟机单元、执行单元、移植单元和接口单元;其中,所述执行单元,用于存储受保护软件;所述移植单元,将N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码通过接口单元移植至安全虚拟机单元中,将所述第一被移植代码中的一个或多个代码段作为第二被移植代码通过接口单元移植至加密锁中;所述安全虚拟机单元,用于接收所述第一被移植代码,将其转化为自身的指令;所述加密锁,用于接收所述第二被移植代码,将其转化为自身的指令。
5.根据权利要求4所述的装置,其特征在于,所述执行单元,进一步用于控制受保护软件依次执行N个代码段,其中,若欲执行的代码段为第一被移植代码时,执行单元通过接口单元调用安全虚拟机单元执行所第一被移植代码,安全虚拟机单元执行完毕后通过接口单元将执行结果返回至执行单元,当安全虚拟机单元执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机单元通过接口单元调用加密锁执行所述第二被移植代码,加密锁执行完毕后通过接口单元将执行结果返回至安全虚拟机单元。
全文摘要
本发明公开了一种软件保护方法,将受保护软件的N个代码段中的多个代码段作为第一被移植代码,将第一被移植代码转化为安全虚拟机的指令并移植至安全虚拟机中,将第一被移植代码中的一个或多个代码段作为第二被移植代码,将第二被移植代码转化为加密锁的指令并移植至加密锁中,当受保护软件执行代码的过程中,若欲执行的代码段为第一被移植代码时,受保护软件调用安全虚拟机执行所第一被移植代码,当安全虚拟机执行所述第一被移植代码时,若欲执行的代码段为第一被移植代码中的第二被移植代码时,安全虚拟机调用加密锁执行所述第二被移植代码。同时,本发明还公开了一种软件保护装置,本发明公开的方法和装置提高了软件保护的强度。
文档编号G06F21/00GK102214281SQ20111010669
公开日2011年10月12日 申请日期2011年4月27日 优先权日2011年4月27日
发明者孙吉平, 韩勇 申请人:北京深思洛克软件技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1