数字数据保护设备的制作方法

文档序号:6472406阅读:341来源:国知局
专利名称:数字数据保护设备的制作方法
技术领域
本发明涉及用于数字数据的保护设备。
数字数据包括软件文件以及数据文件,由于各种原因需要对它进行保护。例如,需要进行保护以防备未授权复制。就软件来说,需要进行保护以防备由于病毒的攻击、黑客等等引起的损坏。
本发明试图提供一种用于数字数据的改进保护设备。
本发明提供一种数字数据保护设备,包括可执行代码,该代码加入了与受保护数据相关的充分信息,以用于当它被执行时,能以可用形式创建包含该受保护数据的深一层代码。
该设备可以包括安全装置,该安全装置可操作用于检测受保护数据的受损情况,深一层代码包括至少一条用来调用该安全装置以便评估任何受损情况的指令。该调用指令最好包含在一组可执行代码需要的位置的深一层代码内,其中当该安全装置执行时,该安全装置可操作用于重新创建可执行代码组,以取代该调用指令。如果检测到任何损坏,该安全装置最好可操作用于删除深一层代码。
该设备可进一步包括重定位装置,该重定位装置可操作用于对该安全装置位置进行改变以及对该调用指令进行修改以便指向新位置。该重定位装置可以包含于受保护数据内,以便当受保护代码在使用中时,重复地进行操作。
该可执行代码可以包含用来创建受保护代码的可执行指令。该可执行代码的执行最好安装那些用于执行的解密指令,该解密指令的后续执行将引起对受保护数据的解密。最初该解密指令可采用不可执行形式进行存储,并且它需要执行以便授权受保护软件执行,该设备进一步包括转换装置,该转换装置可操作用于通过需要至少一个转换密钥的算法将所述代码转换成可执行形式,并且还可操作用于通过参考可执行或是不可执行形式的目标代码块来导出供该算法使用的转换密钥,因此只有该目标块未被修改的情况下,才可导出适当的转换密钥。
该安全装置可包括许多按照不可执行形式存储的可执行代码块,且每个代码块需要执行以便授权受保护软件的执行,该转换装置可操作用于将每个块转换成可执行形式。每个块的转换最好通过从各自目标块而导出的转换密钥来完成。在执行时,最好至少有一个代码块可操作用于将另一个块转换为可执行形式以便后续执行。在执行时,最好每个块都可操作用于将另一个块转换为可执行形式以便后续执行。
所述或每个目标块可以包含在受保护软件或第一安全装置之内。
用于转换代码的所述或每个算法可以包括CRC算法。该可执行代码可以将加密形式的受保护数据和用于解密的可执行指令合并在一起。该受保护数据可以包含可执行代码和/或数据文件。该设备包括可操作用于执行代码的处理装置,以及包括所述可执行代码存储于其中的存储装置,该可执行代码存储在该存储装置中,其中在所述设备中指示的存储位置的起始点是受保护数据的起始点,因此当试图访问该受保护数据时,该处理装置将使所述可执行代码得以执行。该可执行代码最好可操作用于重新创建基本上不加密形式的受保护数据。
该受保护数据包含至少一条可执行指令,该条指令包含多个步骤,这些步骤能够以不止一种顺序来执行该指令,并且该可执行代码可操作用于通过以改变所述可执行代码的每步执行的顺序创建步骤,从而创建该指令。步骤的顺序最好是在每次执行时以基本上随机的方式加以选定。这些步骤包括至少一个启动安全装置操作的步骤,该安全装置可操作用于检测受保护数据的受损情况。该可执行代码可被执行用于在每次要执行可执行指令时创建这些步骤。
在每次执行时,对该可执行代码能够进行安排,以便提供一部分可用形式受保护数据和受损形式的其它数据,由此需要不止一次地执行,从而提供可用形式的全部受保护数据。每个部分可以对应于受保护数据内的完整的可执行例程,从而构成受保护数据的完整例程组能够通过重复执行该可执行代码来创建。可执行代码的每次执行最好能导致以前创建的可用代码被损坏,由此在该设备操作期间只有由最近的一次执行所创建的代码才会成为可用形式。
本发明还提供了包含有存储装置的计算机系统,该计算机系统包括根据前述定义中任意一项的数字保护设备。
本发明还提供了包括软件的数据载体,当它被安装到计算机系统时,该软件可操作作为前面定义中任意一项的数字数据保护设备。
本发明还提供了计算机软件,当它安装到计算机系统时,该软件可操作作为前面定义中任意一项的数字数据保护设备。
本发明还提供了可操作用于实现对计算机软件二级条目进行保护的计算机软件,该保护软件包括安全装置,该装置可操作用于授权受保护软件的执行,以响应一项或多项安全检查的成功执行,且具有至少一个以不可执行的形式存储的可执行代码块,且它需要执行以便授权受保护软件的执行,并且该受保护软件进一步包括转换装置,该转换装置可操作用于通过需要至少一个转换密钥的算法将所述代码块转换成可执行形式,并且所述转换装置还可操作用于通过参考可执行或是不可执行形式的目标块来导出供该算法使用的转换密钥,因此只有该目标块未被修改的情况下,才可导出合适的转换密钥。
本发明还提供了包括上述计算机软件的计算机存储设备。
本发明还提供了通过上述计算机软件受到保护的计算机软件条目。
现在将根据附图仅通过实例的形式,更详细地描述本发明的实施例,其中

图1以高度简化的形式举例说明供实施本发明使用的计算机系统;图2是用于把软件存储在RAM中的公知设备的高层原理表示;图3举例说明依照本发明的RAM的使用;图4举例说明依照本发明且结合重定位装置的RAM的使用;
图5举例说明依照本发明且结合嵌入式安全程序的RAM的使用;图6举例说明依照本发明且结合自修改装置的RAM的使用;图7举例说明依照本发明且结合用于受保护数据的局部解密装置的RAM的使用;图8是使用独立的安全块来实现本发明的另一个实施例的系统中RAM内容的示意图;图9与图8一致,示出了一个替换图8的实施例方案;图10示意性举例说明图8和图9中安全软件列表的一部分;图11示意性举例说明图8和图9中安全软件列表的末尾;图12示意性举例说明实现本发明的另外的形式。
为了解释本发明,首先简要描述一下能实现本发明的简单计算设备是很有帮助的。图1示出了由常规硬件组件组成的计算设备10,它包括处理器12,它与适当的输入及输出设备诸如键盘14和显示器16相连接。存储器配备的形式是硬盘驱动器18或类似的大容量存储器设备,以及在软件执行期间供处理器12使用的RAM(随机访问存储器)20。该设备类型可以是公知的IBM PC,或者等效或类似的机器。
图2举例说明了如何按照惯例使用RAM20来运行存储于设备10的硬盘驱动器18上的软件。起初,该软件由处理器12从硬盘驱动器18装载到RAM20中,产生序列机器代码步骤22(如STEP(步骤)1,STEP(步骤)2等所示),该序列代码步骤按顺序存储在RAM20当中。这些序列步骤以退出指令24结束。将会意识到在实际例子中,从图示来看步骤的数目是可以变化的,而且通常在数目上是非常大的。
按照惯例,第一个步骤即STEP(步骤)1之前是代码块26的装入程序,当它被执行时,引发其它资源被识别并且使那些资源对于RAM中软件而言是可利用的,诸如输入/输出设备14、16的驱动程序,或者由各种不同的应用程序共享的其它软件资源。
在将该软件装载到如图2所示结构的过程中,设备10的处理器12将会记录所述可执行数据块的起始点,也就是在RAM20中装入程序26起始的存储器位置。在图2(以及在其它图中)中,通过使用箭头28来示意性说明该起始点。
当指示设备10运行已包含于RAM20中的软件时,处理器12首先定位到RAM20中被认定为起始点28的位置上,并开始执行在那个位置所发现的可执行数据。因而,处理器12将首先执行该装入程序26,接着执行步骤22,最后在退出步骤24结束。
从图2中很明显看到,RAM20中的软件以未加密形式暴露,因此容易遭到病毒软件攻击、未授权复制,或是被某个试图通过创建病毒或其它方式来攻击该软件的恶意用户进行分析。
实施例1图3举例说明了根据本发明的基本设备,软件保护通过该基本设备被改进。图3A举例说明了当依照本发明受保护软件被首次从硬盘驱动器18装载时,RAM20的状态。
在图3A所示情况中,RAM20包含一初始的可执行代码块,它在此被称为引擎30,并且定位在由处理器12为受保护软件标示的起始点位置28。在引擎30的下方,RAM20在32处为空。
正如所描述的那样,引擎30是可执行代码。然而,不能执行引擎30来实现受保护软件。相反,当引擎30被执行时,该引擎30可执行用于重新创建受保护软件并将其写入RAM20的空白区域32当中。因此,以一种简单的形式,引擎30可以由受保护数据的加密版本(或者可获得加密版本的地址),连同用于解密该软件并将其写入区域32的可执行软件共同组成。
将会清楚认识到,在这篇文章中,术语加密和相关术语均涉及到任何技术,包括压缩,通过进行压缩,数据从其可用形式转换成另一种不可立即执行的形式。使用解密和相关术语来提及反向过程,包括解压缩过程。
在图3A中注意到,该引擎30位于起始点28。因而,当调用受保护软件时,处理器12将首先定位到位置28,并由此开始执行形成引擎30的代码。因此,如图3B中所示,起初将以未加密形式重新创建受保护软件,以便填充空间32。
在图3B中的34所示,随着处理器12继续执行该引擎30,程序指针将最终到达步骤1的起始位置,到那时,步骤1和剩余的受保护数据将在空间32被重新创建,从而接下来开始执行该受保护软件。
将会明白,与图2中所示的常规设备相比,该引擎30的执行包括一个附加步骤。然而,应该正视到,机器代码形式的引擎30的操作将足够快速到防止该附加步骤被用户察觉。
因为已解释了如图3所示的基本操作,能够看出该受保护数据比在图2常规设备中更不易遭到复制或分析。这是由于,在引擎30已经执行之前,也就是已经调用了该受保护软件之前,该受保护数据不会遭到攻击、复制或分析。仅仅将受保护数据从硬盘驱动器18装载到RAM20还不足够导致强受保护数据暴露以遭到攻击、复制以及分析。
虽然附图3A和3B中的设备在图2的设备基础上作出了改进,但是显而易见,一旦引擎30已经运行,接着受保护数据就会像其曾经以图2中的形式暴露在RAM中那样,以同样方式暴露于图3B中。为了进一步改进这种保护,可以按照下列方式修改引擎30从而在空间32中重新创建数据。
实施例2与图3A所示的相同,在图3C至3E的实例中,RAM20最初仅包含一个在该实例中标记为30A的引擎,以及空白RAM32。引擎30A的执行再一次对该空间32进行填充。然而,通过图3D和图3B的比较显示出两点改变。首先是步骤2已由调用指令36代替,其次是在退出指令24之后已由引擎30插入了保护块38。这将按照下面的方式来完成。
在引擎30A正在运行以解密受保护数据的同时,引擎30A监控作为结果的被解密代码,并寻找确定的模式或代码序列。它的进一步细节将在下面结合实施例3加以解释。引擎30A可能正在寻找一个序列或更多的序列。当然,这些所寻找序列的长度将会影响到正在定位的序列的可能性。此例中,引擎30A一直在寻找与步骤2相一致的序列。假如像步骤2这样,当该预定代码组被定位时,引擎30A不写入该预定代码组,而反之写入一条调用指令36,来指明保护块38将被调用。因此,当引擎30A已经运行时,受保护数据并非全部可见,在这里调用指令36代替步骤2。
当受保护软件运行时,在某一点,程序将到达步骤2所预期的起始位置,并将遇到调用指令36。保护块38的执行于是开始。该保护块38具有两个功能,在一个功能中,将创建步骤2的代码(按照类似于引擎30操作的方式)并且重写调用指令36,从而完成受保护代码的解密。另外,保护块38也将进行安全检查,诸如通过咨询常规的病毒防护或类似方式,来确保该病毒防护已彻底运行并且未检测出受损坏情况。如果没有任何故障,则该保护块38结束,并将执行返回至上述起始位置,其中在该起始位置发生对保护块38的调用。现在,那个位置就成为步骤2中代码的起始位置。接下来,操作将按正常顺序继续进行,首先是步骤2。
此外,应该正视到,通过完全以机器代码形式进行操作,此附加步骤能够十分快速的执行,从而不会被用户察觉。
因此可以理解,直到该代码运行时,该受保护代码才完全被解密,因而显著地降低了遭受病毒侵袭、未授权复制或恶意分析的风险。
如果当检查时该保护块38发现某些故障,则可以采取适当的措施。在一个简单的实例中,为了特别有效的防止病毒攻击,保护块38将会删除包含于RAM20中的受保护数据版本(即RAM区域32的全部内容),由此删除该病毒或是删除已经感染了受保护数据的病毒结果。
显然,当采用机器代码和在包括许多行代码的现实环境中进行操作时,许多调用指令36可以由引擎30A来创建,并且在对于恶意监视者而言很难预测的位置、或是难以从机器代码的复杂块内找到的常规调用指令当中区分出来的位置,创建上述指令36。因而,对于恶意监视者来说分析该保护的操作、或是对于病毒来说使该保护的操作失效都变得更加困难了。通过大约在每次插入一条调用指令时,让引擎30A监视(自身发生变化的)代码块,而使得这种保护被进一步增强,因而使调用指令的插入操作对于外部观测者而言是伪随机的。
实施例3图4A和4B举例说明了一个具有与图3C、3D、3E中设备类似之处的保护设备,但是如下文所述,它提供了附加安全。
尽管实施例2中的设备使用了可独立识别的块38,它被定位到将要保护的块末端。此实例,使用了一个按照与块38类似方式进行操作的块,但是其嵌入于受保护软件内。可以首先借鉴图4A来对这种嵌入过程加以解释。图4A举例说明了当处于下述几种情况时的RAM20,即当引擎(此时标记为30B)已经创建了受保护软件的许多行代码、但仍然未完全执行并且仍然未创建符合该块38的保护时。尽管图4A也是图解,它比图3C至3E更为详细的示出了RAM20的状态。特别是,在RAM20左侧所示的数字,它表明相应机器代码列表的行数,以及表示由机器代码提供的各种程序间的边界,这些边界也可以由RAM20分区的行来表示。因此,在引擎30B的下方,第一进程PROC1的代码向下延至第1000行,紧跟其后的第二进程PROC2的代码向下延至第1500行,第三进程PROC3向下延至第2500行,而最终第四进程PROC4向下延至第3200行。
为了完成执行,引擎30B试图把对应于块38的指令插入到RAM20当中,即插入引擎30B与第3200行的列表末端之间。这将通过首先察看RAM20中的内容来完成,从而识别出未包含数据的区域。虽然进程PROC1等在RAM20中是连续示出的,但是由于各种原因存储区仍会不包含数据。特别是,汇编程序和编译软件通常在其例程中是无效的,从而导致RAM中无数据区域的产生。该引擎30B试图识别这些区域。然而,使引擎30B发挥作用的算法必须也要考虑到由于其它原因也可能会出现无数据区域。例如,进程PROC1等,有可能需要访问用于记录变量当前值、或是用于记录在执行期间置位标志状态的高速暂存存储器。由于这些RAM存储区可以最初设置成仅包含零,因而会出现无数据。
因此,引擎30B将首先查看RAM20来识别所有看似好像无数据的区域。每次定位到一个明显无数据区域时,它的位置将由引擎30B记录下来,以供将来参考。例如在图4A中,相对较大的区域明显位于进程PROC2内,且仅仅包含零,因此很明显它是无数据的。含有零的较小区域,很显然位于进程PROC3内。在实际例子中,很可能会定位更多的无数据区域。
一旦已识别了所有这些无数据区域,接下来该引擎30B就会对他们进行分析,从而确定哪些是真正无数据的区域,哪些仅仅是看似无数据。例如,引擎30B可以对全部软件进行反汇编,并且对反汇编的列表进行评估,查找调用那些被鉴定为明显无数据区域的任何指令,或是查找跳转到那些区域上的任何指令,再或者查找读取或写入这些区域的指令。如果任何这种指令对那些区域进行识别,则很可能相应区域将被软件使用,例如像高速暂存存储器。由于该区域在软件执行期间至少间歇地应用于数据,因此将该区域从明显无数据区域的列表中移除。
一旦按照这种方式检查了每一个明显无数据区域,引擎30B就能开始使用这些无数据区域。在此实例中,可以假定发现了位于进程PROC3内的两个区域均具有识别它们的调用指令或跳转指令,且因而将这两个区域从无数据区域的列表中移除,反之位于进程PROC2内的区域将保留在该列表上。
然后,位于进程PROC2内的无数据区域,将通过引擎30B插入一个或多个保护块38的函数来进行填充,其中函数可以是安全检查等等,以及通过代表解密算法的可执行代码来进行填充。此填充操作,起始于第1300行,由图4B中的阴影来表示。
为了利用目前在第1300行上创建的代码块,引擎30B于是对软件内其它地方诸如位于进程1内第800行的数据块进行修改块。起始于第800行的区域内容由引擎30B来读取。这包括一个用于对区域的原始内容进行加密的加密算法。接着,将该加密版本写回到起始于第800行的区域。这在图4B中由一组加密数据E来表示。由引擎30B插入的调用指令C位于该组加密数据之前。
该调用指令C调用位于第1300行的代码。因而,当进程1执行到第800行时,接着调用第1300行,执行该安全函数,接着执行位于第1300行区域的解密例程。将这些解密例程写入从而作用于该调用指令产生的区域,由此将引擎30B操作进行反向,从而对位于第800行上的区域进行解密,并将进程PROC1的解密部分写回位于第800行的区域上。
一旦执行了来自于第1300行区域的解密例程,控制就会返回到允许执行解密代码的调用指令源(第800行)。
如果引擎30B在软件内没有发现足够的无数据区域,以用来嵌入它所有的函数,则在第3200行写入附加函数。
这个实例可以通过借鉴下表更详细地加以解释,在左栏中示出行数,在中间栏中示出十六进制的机器代码字节,而在右栏中示出反汇编指令
表1
从中可以看出,表1中列表的简略部分包含三个调用指令,它们将在一个复杂软件内频繁出现。每个调用指令由两个字节E8组成,紧跟着是给出了所调用地址的四个字节。
因此表1示出了受保护软件的真实列表,比如在进程PROC1内起始于第800行的部分。
如上文所述,当引擎30B已插入一条调用指令时,诸如在行01007B45,下面列表示出结果为
表2将表2和表1相对照的结果显示出无论如何,被插入作为表2第一行的调用指令并未突出显现。因此,为了使那些安全函数失效而识别对安全函数的调用,将会变成一项极为复杂的工作,以至于在实施过程中无法实现。举例来说,即便潜在黑客明白安全函数已被嵌入到软件中,但为了识别正在调用的安全函数(如果有的话)且为了它们失效,通过该软件内每一个调用指令而有系统地进行工作也会是十分必要的。复杂的现代软件应用程序的机器代码列表将包括大量的调用指令。
通过上文描述可以很明显看出,表2示出了调用指令(图4B中的C)已被插入而其后的代码部分未经加密的中间阶段。
还应该理解,少数几行合法代码已由新的调用指令进行重写。这些行可被记录在安全函数当中,以用于当安全函数运行时被重新创建,或作为选择,到特定安全函数的调用指令仅仅用来代替代码的特定目标行,以便于在每次调用该特定安全函数的情况下,需要相同代码来代替该调用指令。
同样很显然的是,调用指令不应该改写代码块,对所述代码块的调用可能是从软件内的别处合法产生,这会导致使软件失败的效果。因此,引擎30b被配置成用于查找调用指令被写入的位置,从而按照上文关于识别明显无数据区域的描述方式,来对所有这种位置进行识别。
实施例4图5A和5B举例说明了与实施例2的设备有些类似的另外的保护设备。特别是,再次使用了保护块40。
图5A举例说明了当受保护代码已经从硬盘驱动器18装载到RAM20时的初始情况。此例中,受保护代码是装载在42的程序,它的起始点由处理器12标记为28。此例中,仅仅为了举例说明,将该起始点标注为存储器位置10,000。
除了安装程序42之外,如图5A所示,从硬盘驱动器18的下载操作也要安装起始于存储器位置12,000的保护块40。由于将作解释的原因,该保护块40加入了一引擎44。到保护块40的调用,按照类似于上文关于实施例2所描述的处理方式,被写入到程序42当中。
该保护块40按照与图3D中块38类似的方式进行操作。也就是,为了评估受损情况,程序42将跳转到块40。
或许认为这种类型的保护跳转容易被那些恶意监视者或监视调用的病毒进行攻击和禁止,还识别这样的调用以及通过重写禁止这些调用指令,其中所述调用会有规律地定位到包含代码(本身以保护代码的形式出现)的存储器位置上。
此例中,这种类型的攻击由于下述事件而受到阻碍。当遇到对保护块40的第一条调用指令时,该保护块会运行以进行损坏情况评估,并且当它成功结束时,引擎44则开始运行。该引擎44完成两个功能。在其中一个功能中,引擎44将程序42内的调用指令重写以便参考不同的存储器位置,比如此例中的位置13,000。在做这件事之前,该引擎44会执行一个程序,以确保在位置13,000存在足够的空白存储区来容纳块40。引擎44的另一个功能是从存储器位置13,000开始,重新创建保护块40(以及引擎本身44)。为此,该保护块40进行了移动,并且存储器位置12,000的调用指令已经由到指令进行了重写以便调用位置13,000。因此,当程序42运行时,对该安全函数的调用指令能够持续变化,因而极大程度地增加了恶意用户或病毒进行识别和使对保护块40的调用失效的难度。
例如,如果某个黑客坚信他们通过分析到此位置的调用已经识别出安全代码的所在位置,则该黑客可以写一段简单代码来识别所有到该位置的调用,并使这些指令失效。然而,由于每个软件都将在不同位置具有自身的安全块,因而上述方案一般不适用于特定软件的所有复制。
重定位的保护块40在图4B中举例说明。
实施例5图6A和6B举例说明了数据保护另外的实施例。在此例中,利用引擎50在空白RAM区域52中创建代码块,并按照类似于上文所描述的有关实施例1以及图3A和3B的方式来进行创建。因此,当首次将受保护代码从硬盘驱动器18装载到RAM20时,图6A左边的位置适合于引擎50在RAM中安装的位置,在52该RAM剩余的空间为空。此例中,将引擎50定位在子例程或主程序内的其它辅助操作的起始点处。当调用此子例程时,执行引擎50来创建多个步骤从而填充区域52。然后该位置如图6A右边所示,属于4个步骤步骤1、步骤2等,并按数字顺序位于区域52之内。当引擎50运行时,这些步骤(步骤1等)接着运行以执行该子例程。
图6B举例说明了当该子例程被后续调用时的情形。最初,如图6B左侧所示,当子例程首次执行结束时,RAM20将处于左侧的状态,就如同图6A右侧所示的那样。尤其是,该引擎50依然存在于该代码块的起始位置。因此,当子例程下次被调用时,引擎50将再次执行。然而,在每种情况下将引擎50写入,从而按照不同顺序来创建步骤,最好按随机或伪随机顺序进行创建。这能够在对子例程的执行没有不利影响的情况下来完成,因为许多常规的例程,诸如PRINT语句,当采用机器代码写入时也许有几千行长,实际上任何行都能够以任何实际顺序来执行。如果有必须以特定顺序写入的行组,那么这些行可以作为块来对待,并以单一步骤来写入,以便于保持该块内的顺序,但是该块的位置会随着引擎50的每一次执行而改变。
可以写入一个或多个步骤,以用于执行或调用防止病毒侵袭或损坏的保护例程。假如是这样的话,该步骤将在子例程每次运行时出现在不同位置上。因此,恶意监视者将看到持续变化的代码,因而难以或不可能进行分析以对保护进行定位而来禁止它。换句话说,如果恶意监视者识别出包含于保护中的步骤,并且通过诸如重写该步骤使其失效,那么此种恶意干涉本身将会在子例程下次被调用时,通过引擎50的操作被重写,而由此来恢复该保护的操作。
实施例6当RAM20处于图3B或者图6A及6B中右侧所示出的情形时,全部受保护数据按照解密形式是可视的。应该正视,上文所述的保护形式将仍然对代码进行保护,但是还要意识到在某些情况中,完全未加密代码的暴露可能表明在保护中存在的弱点,而不论该暴露多么短的时间。另外的实施例举例说明了如何克服上述困难。图7A从图3A所示情形下的RAM20开始,其中引擎60位于子例程起始点,RAM20在62为空。
当子例程被调用时,处理器12到达该起始点28并且开始执行引擎60。在该引擎60首次执行时,三个代码块在空间62内被创建(此例中,选择三个来说明本发明的原理,并非对发明范围的限定)。这些块在图7B中示出。因此,在图7B中,已经在64创建了步骤1,随后是由星号(*)表示的受损数据或无意义数据的两个块66。作为选择,该块66也允许为空,但应该正视,由于提供了用于分析的更大数量代码,创建受损或伪造数据,可能会给恶意监视者或病毒带来更大困难。
由引擎60创建的步骤1,以返回语句68结束,该返回语句将执行返回到引擎60的起始位置。因此,当执行完步骤1时,引擎60再次执行。引擎60将设置一个寄存器用以记录首次执行已经发生。因而,识别该第二次执行已在进行中,该引擎60在70创建步骤2,连同该块70之前和之后的受损块66。
此外,该块66允许为空。
此时,步骤2可以执行,跟着的是在72的返回,来返回至引擎60。接着,该引擎60的第三次执行在74创建步骤3和两个受损块66,允许执行步骤3。
因此,通过重复引擎60在此种方式下的操作,步骤1;步骤2;步骤3的完整序列可由处理器12执行,但是该整个序列从RAM20中是绝对看不到的,所以使得分析该序列、或将其损坏、或使该序列失效或者使它包含的任何保护均失效,都变得困难或无法实现。此外,恶意监视者将看到持续变化(或“变异”)的代码,因此,实际上不可能对它们进行充分的分析从而进行攻击。
现在描述另外的实施例,特别是,适合于加强用来防止那些使用调试软件的黑客的保护。黑客为了攻击软件的安全性,经常使用调试软件。调试程序的最初目的是用于检查复杂软件故障的合法操作。通常,调试程序是通过在操作者期望复查的软件断点插入中断命令来进行操作。当软件的执行过程到达该中断命令时,把控制传递给该调试程序,它接着考虑下一个代码块,并用高级或低级语言向操作者显示结果,且在允许主程序的执行继续之前,先允许操作者检查该块。
黑客所使用的一种试图阻止安全例程实现的手段,就是使用一个调试程序来查找主程序内的断点,其中在此断点调用安全程序。当主程序执行时,将跳转命令插入到此断点以便于跳过这些例程。许多现代软件都十分复杂,以至于在主程序内定位这些断点的工作十分费力,但是尽管如此,技术纯熟且意志坚决的黑客们最终还是可能会找到它们。一旦找到,黑客就能使安全例程失效,它们甚至会导致最复杂的例程无效。
实施例7图8举例说明了完成本发明另外的实施例。在图8中,RAM116示出包含有两个软件块120、122。第一个块120是由本发明的设备保护的软件。块122是执行本发明设备的安全块。受保护软件20包括位于24的应用程序24(诸如文字处理应用程序),它由安全标题26开头。
应用程序124以加密方式存储,并且也被压缩。因此,直到将应用程序124转换成可执行方式时,才能够使用它,在由先前方案中的安全标题126提供的控制之下,它导致在进行各种安全检查之后,应用程序124被解密和解压缩,这些安全检查诸如检查计算机系统内所持有软件许可的详细资料,用户的详细资料,当前日期及时间(软件在指定周期内被许可的情况下)等等。一旦那些检查已经成功完成,该标题126就会对应用程序124进行解密和解压缩,并将处理器的程序指针移动到应用程序124的起始位置,从而将控制传递至应用程序124。这种类型的保护在许多情况下都有效,但是它容易受到黑客通过插入跳转命令来欺骗由安全标题126进行的一个和多个检查正如上文所述的那样,因此,会使应用程序124在未执行完全部正常安全检查的情况下就被运行。
提供安全块122来解决这种缺陷。
该安全块122是一个代码块,它提供了两个主要功能。第一,当该块122执行时,产生由安全标题126正常提供的一个或多个此类型的安全检查。这些检查可以是由该标题126执行的完全相同的检查,或者是除此之外的检查。按照在安全标题126与块122之间划开安全检查的这种方式能够有多种变化,而这种方式本身并不是本发明的重点。
然而,在这个例子中,解密该应用程序124的函数不再由标题126来指示,而是在块122的控制之下。当执行时,应用程序124的解密最好是该块122的最后动作,在上述动作之后将控制从块122传递至所解密的应用程序124。
这样,除非该块122成功到达程序末尾,否则该应用程序124的解密将不会发生,从而允许解密被授权和执行。
因此,安全块122很可能是黑客试图阻止本发明所提供保护的目标。依照下文,将阻止对该块122成功进行攻击的发生。
最初(执行之前),该安全块122是加密的形式。加密要借助于加密算法,所述加密算法需要至少一个用来解密的转换密钥。众所周知,许多加密算法都需要用来解密的转换密钥。转换密钥一般是数字,或是在算法内转换成数字形式后以数字方式来使用,诸如通过字母数字混合编制字符的机器代码值而形成的转换密钥。用于本发明的一类算法已知为CRC(循环冗余码校验)算法。CRC算法对代码的目标代码块进行评估,以产生表示该目标块特征的数值。因而,简单的CRC算法将目标代码块每个字符的机器代码值加起来。其它CRC算法可能会比简单的求和法过程更为复杂。然而,十分重要的是,应注意到每一次将CRC算法应用于目标代码块时,都将返回相同的值,而在该目标代码块中的任何改变都将导致返回不同的值。
在这个例子中,安全块122是使用CRC加密算法的加密形式。因而,当首次运行该块122时,需要一个解密步骤。这个解密步骤试图解密该块122的剩余部分,使其从不可执行成为可执行形式。这要通过执行基于转换密钥的解密例程来完成,其中该转换密钥是从目标代码块求出的CRC值。该目标代码块最好是被加密的块122。
这些设备的重要性,可以通过解释当应用程序被调用时各事件顺序来更好的理解。
最初,处理器12的程序指针将指向安全标题126的起始位置,安全标题126将在将控制传递至块122之前执行安全检查。在此阶段,应用程序124依然处于加密形式。块122同样处于加密形式并且首先被解密。该解密步骤经由需转换密钥的算法来完成。该转换密钥是从块122本身求出的CRC值。如果块122没有被修改,则将返回适当的CRC值以允许转换。块122于是正常运行,作为其结果,将通过块122的操作来对应用程序124进行解密。当块122被完全执行后,将把控制传递至应用程序124,于是该应用程序以正常方式运行。然而,如果块122以任何方式被修改,则块122的CRC值也将改变。因此,在解密算法中作为转换密钥使用的值,将不适用于进行正确解密。块122的解密版本将被损坏。在任何实际情况下,人们总是期待该转换密钥的任何改变会导致足够的损坏,以至于阻止块122的任何进一步的执行。这将使应用程序124处于加密形式。
正如上文所述,任何使用调试程序来分析块122的尝试,都将在块122内引入中断命令。使用调试程序来查看块22的动作,将因此而自身改变块122的CRC值,甚至是在使用该调试程序进行改变之前。CRC值的改变将阻止应用程序124被解密。因此,通过试图观察由块22提供的安全性来阻止应用程序124的操作,即使检查结果为安全块未修改。
意图阻止安全实现的黑客,将对查看那些看似担负安全检查工作的代码块最为感兴趣。因此优选的是,为安全块122的解密产生CRC值的目标块至少包括这样的部分块,该部分块在许可该应用程序124解密之前,实施一项或多项安全检查。由此,所有这些安全检查可以由被解密的块122来执行,在这种情况下,CRC转换密钥可以从所有或部分该加密块122中求出。作为选择,一些检查也可以由块124来执行,在这种情况下,该CRC值可以整体地或部分地从所有或部分标题126得出。
实施例8图9举例说明了比实施例7更为复杂的可供选择方案。在图9中所述的许多特征均与图8中的特征相一致,并且采用相同数字来表示这些特征。
图8和图9的实施之间的原理区别之处在于,安全块122的加密方式。该块122由多个子块130来表示。这些子块130一起提供了块122的加密形式,但是每个子块130是被单独加密的。每个子块可以使用相同算法和各自转换密钥,或者使用不同的算法,每个算法需要相同转换密钥,再或者使用需要不同转换密钥的不同算法来加密。
当图9的实例运行时,操作顺序极大程度上同上文关于图8所述的操作顺序相同,而除了以下内容。当首次调用块122时,执行解密算法从而只对最顶端的子块130进行解密。这可以借助于正被解密的子块的CRC值、或者另一个子块、再或是其它地方的目标块(诸如所有或部分安全标题126)。解密之后,接着可以执行该第一个子块30。这样可以完成安全检查,或其它初始例程。该第一子块130的执行,以一条对第二子块130进行解密的指令结束。这通过需要转换密钥的解密算法来完成,其中该转换密钥将最好是在解密时求出的,即使该转换密钥与用来解密该第一子块130的转换密钥相同。因此,由于第一子块解密带来的目标块中的任何干扰引起CRC代码的改变,从而导致该第二子块130的解密受损。
这些操作在图10中做了更详尽地说明。图10举例说明了位于该第一和第二子块130A、130B之间边界处的三行代码。子块130A在第99行以最后一行结束,它的性质对于本发明来说并不重要。然后执行第100行。这是一条解密指令。该指令指定将被解密的数据块,在此处是第101到200行,它代表该第二子块130B。指令100也对将要使用的算法进行识别,在此处是算法A。最后,指令100对将由指定行(在此处指定为第101-200行)使用的转换密钥进行识别,其中这些指定行将用作目标块,以用来求出供算法A使用的转换密钥。
一旦第100行已被执行,执行将转移至第101行。如果第100行成功完成解密,那么第101行将正确指示该第二子块130B的第一次动作。如果该子块130B未被修改,则会出现成功解密,从而是使用正确的CRC值作为密钥的。然而,如果该第二子块30B已被修改,或是在计算CRC值的同时受到调试程序的检查,则错误的CRC值就会在第101行用来解密,该子块130B将会受损,并且会在断点停止执行。这将使应用程序124处于加密形式。
随着安全块122的继续执行,以刚才所述的方式和在图9中用箭头132所示的,每个子块130按次序经由它前面的子块进行解密。如果在块122内没有损坏,并且当时并未使用调试程序,则块122将以无受损形式完全解密,并且成功执行而到达最后的子块130末尾处,这在图11中已作了说明。在最后的子块130的末尾处,换言之,在块122执行的末尾处,有用于解密应用程序124的指令(第998行),其后是转到应用程序124的指令(第999行)。为了进一步应用本发明的原理,在第998行的解密可以基于需解密密钥的算法,如上文所描述,该解密密钥是作为CRC值被求出的。只有当正确解密全部的子块130,才会到达第999行且进行正确执行。
实施例9如图8和9所示,上文所述的实施例7和8假设软件的执行从单独安装在RAM20中的安全块122开始。在图12A和12B中所示的第三个例子包括如下所述的进一步解密和解压缩步骤。
最初,RAM20只包括软件的单一块120A(图12A)。该块包括加密的应用程序124、安全标题126、以及安全存根140,在此例中该安全存根附加于该应用程序124的末尾。该安全存根140包括了实施例7或8中安全块122的压缩和加密版本。该安全标题126包括对该存根140进行解密和/或解压缩以及将结果作为单独块进行安装的指令,以构成安全块122(图12B)。当安全标题126已全部执行,接着控制将传递至该安全块122。随后的执行将如上文关于实施例7或实施例8所描述的那样进行。
这个例子的有益效果在于,允许把要提供的存根140作为已授权给合法用户的软件的一部分,以便于当授权应用程序被安装时,块120如图9A中所示那样将被安装,且包括分支140。这样确保了应用程序124的合法授权版本总是附随有安全存根140,由此利用本发明软件保护设备的优势就确保了授权副本仍然受到保护。
特别是,许多不同解密算法和用于计算CRC值的算法能够用在这些实施例中。
总结上文所描述的每一个实施例中,RAM内的代码在可执行代码执行期间进行改变。在最简单的实施例(实施例1)中,该代码发生一次改变就创建例程。在其它实施例中,该代码经常会改变,并且在一个实施例中,恶意监视者将看到好像持续变化的代码。
在每一种情况下,受保护数据最初无法以可用形式获得。然而,其它可执行代码与受保护代码相关联,并且加入了关于该受保护数据的信息。这可以是有关其位置、加密技术或密钥、加密密钥的位置、或是处于加密形式的全部代码的信息。这允许深一层的可执行代码来创建深一层的代码,所述深一层代码从该保护中释放该受保护代码,允许以可用形式存取数据。
许多变化和修改能够用于上文所述的设备。特别是,通过上文陈述的说明书的整体理解很容易看出,这里所述的各种技术能够以各种组合并用。例如,在与实施例3有关的描述中的重定位原理能够加入到实施例5中,以至于除实施例5中仅被临时创建的步骤之外,能够改变所创建的位置,该改变最好是随机的,或者伪随机的。
上文所陈述的例子中,受保护数据已经是可执行的,但是此技术可以容易地被调整来保护不可执行的数据文件。
虽然认为,在前述说明书中努力引起对本发明这些特征的注意是非常重要的,但是应该明白申请人所要求的保护是关于任何的可获得专利保护的特征,或在上文中所涉及的和/或在图中所示的特征的结合,无论在其上是否赋予了特别强调。
权利要求
1.一种数字数据保护设备,包括可执行代码,所述可执行代码中包含了与受保护数据相关的足够信息,以便在执行时能够创建包含了可用形式的受保护数据的深一层代码。
2.根据权利要求1所述的设备,包括安全装置,所述安全装置可操作地用于检测受保护数据的受损情况,所述深一层代码包括至少一条用来调用所述安全装置以便评估任何受损情况的指令。
3.根据权利要求2所述的设备,其中所述调用指令被包含在一组可执行代码需要的位置的深一层代码内,并且其中所述安全装置在执行时可操作地用于重新创建所述可执行代码组,以代替所述调用指令。
4.根据权利要求2或3所述的设备,其中如果检测到任何损坏,则所述安全装置可操作地用于删除所述深一层代码。
5.根据权利要求2至4中任意一项所述的设备,其中所述安全装置可操作地用于对位于所需位置上的加密代码进行解密,以及用于把所述加密代码替换为相应的解密代码。
6.根据权利要求2至4中任意一项所述的设备,其中所述安全装置被嵌入所述深一层代码之中。
7.根据权利要求6所述的设备,其中所述安全设备被嵌入于所述深一层代码不使用的位置。
8.根据权利要求7所述的设备,其中当所述可执行代码执行时,至少识别出一个嵌入位置,将所述安全装置写入到所述嵌入位置。
9.根据权利要求8所述的设备,其中通过反汇编所述深一层代码以及分析所述反汇编代码来识别嵌入位置。
10.根据权利要求2至9中任意一项所述的设备,所述设备进一步包括重定位装置,所述重定位装置可操作地用于改变所述安全装置的位置,以及可用于修改所述调用指令从而指向新位置。
11.根据权利要求10所述的设备,其中所述重定位装置被包含于受保护数据内,以便当所述受保护数据在使用时,重复进行操作。
12.根据前述任意一项权利要求所述的设备,其中所述可执行代码包含用于创建受保护代码的可执行指令。
13.根据前述任意一项权利要求所述的设备,其中所述可执行代码将加密形式的受保护数据与用于解密的可执行指令合并在一起。
14.根据权利要求13所述的设备,其中所述可执行代码的初始执行可进行用于执行的解密指令的安装,所述解密指令的后续执行将导致受保护数据的解密。
15.根据权利要求14所述的设备,其中所述解密指令最初以不可执行形式被存储,并且它需要执行以便授权执行受保护软件,所述设备进一步包括转换装置,所述转换装置可操作地用于通过需要至少一个转换密钥的算法来将所述代码块转换成可执行形式,并且还可操作地用于通过参考可执行形式或不可执行形式的目标代码块来导出供所述算法使用的转换密钥,因此只有所述目标块未被修改的情况下,才可导出适当的转换密钥。
16.根据权利要求15所述的设备,其中所述安全装置包括多个以不可执行形式存储的可执行代码块,且每个代码块需要执行以便授权执行受保护软件,以及所述转换装置可操作地用于将每个块转换成可执行形式。
17.根据权利要求16所述的设备,其中每个代码块的转换通过从各自目标块而导出的转换密钥来完成。
18.根据权利要求16所述的设备,其中在执行时,至少有一个代码块可操作地用于将另一个块转换成可执行形式以便后续执行。
19.根据权利要求18所述的设备,其中在执行时,每个块可操作地用于将另一个块转换成可执行形式以便后续执行。
20.根据权利要求15至19任意一项所述的设备,其中所述或每个目标块被包含在受保护软件内。
21.根据权利要求15至19任意一项所述的设备,其中所述或每个目标块被包含在所述第一安全装置内。
22.根据权利要求15至21任意一项所述的设备,其中用于转换代码的所述或每种算法包括CRC算法。
23.根据前述任意一项权利要求所述的设备,其中所述受保护数据包含可执行代码和/或数据文件。
24.根据前述任意一项权利要求所述的设备,包括处理装置,所述处理装置可操作地用于执行代码,还包括存储装置,所述可执行代码存储在所述存储装置中,其中所述设备中指示的存储位置的起始点是受保护数据的起始位置,因此当试图访问受保护数据时,所述处理装置将使所述可执行代码得以执行。
25.根据前述任意一项权利要求所述的设备,其中所述可执行代码可操作地用于重新创建基本上不加密形式的受保护数据。
26.根据前述任意一项权利要求所述的设备,其中所述受保护数据包含至少一个可执行指令,所述指令包括多个步骤,所述步骤按照不止一种顺序来执行所述指令,并且所述可执行代码可操作地用于通过以改变所述可执行代码的每次执行的顺序来创建所述步骤,从而创建所述指令。
27.根据权利要求26所述的设备,其中所述步骤的顺序在每次执行时被随机选取。
28.根据权利要求26或27所述的设备,其中所述步骤包括至少一个启动所述安全装置操作的步骤,其中所述安全装置可操作地用于检测受保护数据的受损情况。
29.根据权利要求26至28中任意一项所述的设备,其中所述可执行代码可被执行地用于在每次要执行所述可执行指令时创建所述步骤。
30.根据前述任意一项权利要求所述的设备,其中在每次执行时,所述可执行代码被安排成提供一部分可用形式的受保护数据和受损形式的其它数据,由此需要不止一次的执行,从而提供可用形式的全部受保护数据。
31.根据权利要求30所述的设备,其中每个部分对应于受保护数据中的完整的可执行例程,从而一个构成了受保护数据的完整例程组能够通过重复执行所述可执行代码而被创建。
32.根据权利要求30或31所述的设备,其中对所述可执行代码的每次执行都导致先前创建的可用代码被损坏,由此在设备操作期间,只有由最近一次执行创建的代码才会成为可用形式。
33.一种包含存储装置的计算机系统,所述计算机系统包括根据前述任意一项权利要求所述的数字数据保护设备。
34.一种包括软件的数据载体,当所述软件安装到计算机系统时,所述软件可操作地作为根据权利要求1至32中任意一项所述的数字数据保护设备。
35.一种计算机软件,当它安装到计算机系统上时,所述软件可操作地作为根据权利要求1至32中任意一项所述的数字数据保护设备。
36.一种可操作用于实现对计算机软件二级条目进行保护的计算机软件,该保护软件包括安全装置,所述装置可操作用于授权对受保护软件的执行,以响应一项或多项安全检查的成功完成,且具有至少一个以不可执行的形式存储的可执行代码块,且它需要被执行以便授权受保护软件的执行,并且所述受保护软件进一步包括转换装置,所述转换装置可操作用于通过需要至少一个转换密钥的算法将所述代码块转换成可执行形式,并且所述转换装置还可操作地用于通过参考可执行或是不可执行形式的目标块来导出供所述算法使用的转换密钥,因此只有所述目标块未被修改的情况下,才可导出合适的转换密钥。
37.一种计算机存储设备,包含根据权利要求36所述的计算机软件。
38.一种计算机系统,包含计算机软件条目,所述计算机软件条目受到根据权利要求36或37所述的计算机软件的保护。
39.一种数字数据保护设备,其如上文所充分描述的那样与所述附图相关。
40.任何新颖的主题或者包括这里所公开的新颖的主题的组合体,不论是否其被包括在与任何前述权利要求相同的发明范围内、或不论是否其相关于与前述任何前述权利要求相同的发明。
全文摘要
当软件最初被装载到RAM(20)时,引擎(30A)被安装在RAM(20)另外的空白区域的起始位置。当受保护应用程序被调用时,该引擎首先创建一系列步骤(附图3D),包括用于保护块(38)的调用命令。在到达该调用(36)时,执行该保护块(38),以便完成各种安全检查。如果这些操作均能成功执行,则创建步骤(2)并改写该调用(36),以便于步骤(2)和(3)的执行能够以正常方式继续。因此,除非该安全检查已被成功完成,否则该受保护软件(步骤1、2和3)不会受到详细审查。
文档编号G06F21/12GK1575445SQ01815806
公开日2005年2月2日 申请日期2001年7月13日 优先权日2000年7月18日
发明者J·A·萨法 申请人:比特阿兹有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1