专利名称:软件程序保护机制的制作方法
技术领域:
本发明涉及防止非法修改与/或重发送计算机软件程序的一种保护机制。
在商业软件尤其是消费者个人计算机或“PC”的软件的领域中,为了达到更好销售的目的,通常都要免费或低价发送销售用的软件程序的演示版本。软件发行商发送大量这样的演示版本,以便对许多潜在的购买者展示他们的软件。其理由是,低价发送的损失可能由试用该软件、喜欢该软件并且决定购买该软件的用户所产生的追加购买收益来补偿。这样的演示版本有时是在因特网上发送的,但更多的是使用例如软盘、CD-ROM或DVD(通用数字盘)这样的物理介质。这样的物理介质很便宜,可以方便地对准某类特定的用户,并且,与需要通过大多数消费者因特网连接来支持的下载不同,他们有足够的容量来发送一个大的全功能的演示版本,以便启动销售。
这样的演示软件程序具有以下的特性I.演示软件程序的发送形式包括该软件程序的全功能版本;II.演示软件程序的所有发送拷贝都是一致的;III.一旦正常安装,软件程序提供包含一个或多个限制(功能,时间,用户数,等等)的演示模式;IV.提供一种手段,通过这种手段,用户可以获得该软件的完全许可使用版本,并且把演示版本转换为全功能版本,而不需要递交其他的介质;V.演示软件程序不依赖任何特定的硬件支持,而是运行在常规的消费者PC上(并且转换为全功能的版本)。
通常,大多数这样的演示发送软件实际上都包含全价版本的全部功能,其中嵌入了软件保护机制,该保护机制被设计来防止对完整版本的访问,直到该软件被销售出去。这样做有两个理由,首先,软件发行商为了避免不同软件开发流的费用开支,其中一个用于演示,而一个则是该软件的“全”版本。其次,软件发行商希望为用户提供一种手段,把演示版本转换为全版本,而不需要进一步为该用户提供软件。
虽然至此描述的系统可能是一种有效的销售工具,但具有严重的缺陷。这样的演示介质是软件盗版者工作材料的主要来源。软件盗版者通常能够修改该演示版本,以便破解被软件发行商嵌入的任何保护机制的内容。当软件的演示版本被如此修改时,潜伏在该程序的发送版本中的全部程序功能就被释放,而发行商却接收不到接收任何信息。而且,一旦软件盗版者破解了软件发行商使用的保护机制,就可以建立一个称为“裂缝”的盗版辅助软件包,帮助其他人同样把演示软件程序转换为一个完整的版本,而不用付钱给发行商。免费发送“裂缝”的做法已经十分广泛,软件发行商认为这是造成收益损失的一个重要原因。
在该技术领域中有已知的几种著名的保护对策,目的是使软件程序的演示形式能抵抗盗版的攻击。通常,这样的保护技术包括将附加的内部功能加到该二进制可执行形式的软件程序上,迫使演示受到限制。希望得到的结果是,企图逃避演示限制的任何非法修改都应该被检测到,并且导致,例如,显示特定的屏幕,或者自动程序失败。然而,二进制可执行程序(例如视窗操作系统中具有扩展名“.EXE”的文件)通常只是整个软件程序的一个非常小的部分。在大多数消费者软件应用中,可执行文件容量约为一兆字节,而数据文件和程序执行所需的其他文件容量总共可能超出几百兆字节。因此,只保护软件程序的核心二进制可执行文件,实际上只保护该软件演示版本的一个非常小的比例部分免受盗版。
如果根据当前技术保护的软件程序被自由发送,则“裂缝”的最简单形式很容易用未保护的等价版本来替换被保护的核心二进制可执行文件,而这样的未保护版本可以通过一次合法的购买来得到。这种形式的“裂缝”很容易产生,不需要很高的技术。这就构成了当前技术在软件保护模式方面的一个显著的缺陷。
代替的软件保护机制使用加密技术。虽然加密技术足以解决计算机信息一次传输的问题,但一般不适合于作为一种软件保护机制。这是因为加密系统所需的密钥本质上容易被发现,因为每当运行被保护的软件程序时,都必须使用这些密钥。
因此,需要一种改进的软件保护机制。
本发明提供了一种用于计算机软件程序的改进的软件保护机制。所公开的是一个这样的系统,用于变换软件程序的“财产文件”(即数据文件)并且修改核心的可执行程序本身,这样就使得对被修改的可执行程序的任何重发送也要求重发送对应的被变换的财产文件。由被修改的可执行文件和没有被变换(即原始形式)的财产文件(并且反过来也一样)组成的重发送版本将无法操作。
为了建立被保护软件应用的发送形式,该应用首先被分成其主要构成元件,即核心可执行程序,和财产文件(只读数据文件和/或读/写数据文件)。利用变换钥将变换功能作用到财产文件上以建立被变换的数据文件。然后把变换钥存放起来以便后面使用。接着,通过在核心可执行程序中嵌入一个执行保护模块程序的调用,以形成被修改的可执行程序。仅当执行所述的被修改可执行程序时才能调用保护模块程序,否则在任何其他的条件下都不运行。接着产生文件变换模块程序并且加到软件元件包上。变换钥和被变换的数据文件表可以任意选择地加到保护模块程序上。接着,把该软件元件包(包含被变换的数据文件、变换钥、被修改的可执行程序、保护模块程序和文件变换模块程序)传送到某个介质上以便发送给用户。
当计算机系统操作时,装入被修改的可执行程序,自动导致保护模块程序被运行。保护模块调用文件变换模块的操作,这被用来截取文件操作的请求(例如读文件、写文件、打开文件和关闭文件),这些操作是由被修改的可执行程序对计算机系统的操作系统实现的。利用变换钥,仅当文件操作请求被识别为是用于被变换的数据时,文件变换模块才执行所要求的反向变换。
通过使用保护模块程序,本发明将被修改的可执行程序和被变换的数据文件联系起来。这样,除非具有被修改的可执行程序并且在其控制下,否则,在其他的任何情况下,文件变换模块都不会执行被请求的反向变换。
参考以下结合附图对本发明特定实施例的描述后,一般熟悉这一技术的人都能理解本发明的其他方面和特征。
现在将结合
本发明的最佳实施例,在附图中图1是不带保护机制的软件程序典型安装和运行结构的方块图;图2是加上典型的软件保护机制的软件程序安装和运行结构的方块图;图3是加上用于财产文件的软件保护机制的软件程序安装和运行结构的方块图;图4是本发明的软件保护机制的一个实施例的方块图;图5A是本发明初始化步骤的流程图;图5B是本发明变换模块所采取的操作步骤的流程图;图5C是本发明终止步骤的流程图;图6是一个方块图,表示软件程序用来根据本发明方法变换其财产文件的过程;和图7是图6所示文件变换过程的流程图。
图1是一个方块图,表示不带保护机制的软件程序的典型安装和运行结构。这样的软件程序一般是在CD-ROM 10或其他的物理介质上被发送的。是否为CD-ROM以外的发送源(例如DVD、因特网下载等)对本发明并不重要,但使用CD-ROM是为了便于描述。
以CD-ROM 10运行安装程序20,它读(11)CD-ROM 10,并且将核心可执行程序30和若干文件集合40、41、50和51拷贝(21、22、23、24和25)到用户PC机的内部磁盘上。核心可执行程序30通常依赖于支持核心可执行程序的可执行的操作系统代码41,它可以被更新或者最初由安装程序20来安装,或者也可以已经被放在用户的PC机中。例如微软公司视窗系统的DirectXTM图形软件工具。核心可执行程序30通常还依赖于核心可执行支持文件40,这些文件通常也由安装程序20安装。例如用于视窗操作系统中的特定应用的一个或多个动态链接库(DLL)。
为了正确运行,核心可执行程序30通常需要与数据文件交互作用,并且操纵该文件。例如,通过文件系统界面61访问所示的读/写文件集合51,并且通过文件系统界面60访问所示的只读文件集合50。文件集合50和51被称为“财产文件”。图1中没有表示软件保护机制,这意味着该软件可以很容易被拷贝和发送。
图2是一个方块图,表示加上采用已知技术的典型软件保护机制的软件程序的安装和运行结构。除了被修改的可执行文件30A和保护模块程序31(此后称为“保护模块31”)以外,图2中所有的元件都与图1所示的元件相同。部件30A和31的虚线轮廓是为了直观地说明这些部件是被保护的事实。
在图2中,被修改可执行程序30A是相对于图1中的原始核心可执行文件30以某种方式来修改的,以保护文件的完整性。通常,另一个保护支持模块可执行部件(“保护模块”)31是在被修改的可执行程序30A的控制下被安装(26)并且在运行时间(62)被使用的。保护模块31并不总是在程序执行期间使用,而是在某个典型的实现中,监视和/或设置被修改可执行程序30A的功能,以保证当程序处于演示模式时,能服从预先设置的限制。
图2所示系统的缺陷在于,如果被保护的可执行程序30A被其原始的核心可执行程序30的拷贝所替换,则所有的保护功能都失去,并且所得到的是非法的具有完整功能的应用软件。即使该模块还存在,由保护模块31提供的保护功能也将失去。这是因为这些保护功能只能由被修改的可执行程序30A调用,并且如果使用未保护的原始核心可执行程序30,代替了被修改的可执行程序30A,则保护功能仍不起作用。
图3也是一个方块图,表示增加了对财产文件的软件保护机制的软件程序安装和运行结构。该图中只有元件20、40和41与图1和图2中所描述的元件相同。除了CD-ROM 10A,其他的元件都用虚线轮廓表示,这意味着它们都按照本发明的软件保护机制被保护起来。CD-ROM10A是被保护软件的发送介质。如图2所示,被修改的可执行程序30A是相对于图1的原始核心可执行程序30以某种方式进行修改的,以保护文件的完整性。通常,另一个保护支持模块可执行部件(“保护模块”)31是在被修改的可执行程序30A的控制下被安装(26)并且在运行时间被使用(62)。
在图3中,图2的文件集合50和51(“财产文件”)被变换了的文件集合50A和51A所代替。在被变换的文件集合50A和51A中可能有一个或多个被变换数据文件。被变换的文件集合50A和51A可以包含任何格式的文件,甚至包括可执行文件,由被修改的可执行程序30A通过界面读/写功能60A和界面只读功能61A(通过图4所示的变换模块70)来访问这些文件集合,这些界面提供了合适的运行时间变换和反变换。熟悉这一技术的人将理解,变换和反变换的准确性质对于本发明来说不是根本的问题。例如,变换可以包含加密和解密法,可以采用如数据加密标准(DES)或RSA(里维斯特-沙米尔-阿德菜曼方法)算法这样的标准算法,也可以采用其他较为简单的加密和解密算法。不同变换的混合也可以用于同一个应用。唯一实际的要求是,变换是可逆的,这样就能在该软件程序的性能和安全性之间提供一个合理的平衡。例如,简单的变换可以包含逐个字节的逻辑操作,例如用安全字节值对被变换的缓冲区数据进行位移或异或操作,以产生明文数据。界面功能60A和61A提供了所需的运行时间变换,可以采用各种方式来实现。例如,所需的变换可以内置于源代码中,也可以是被修改可执行程序30A的程序库层次。可以内在地由操作环境提供,也可以连接特定的介质。
图4是本发明软件保护机制一个实施例的方块图。图4给出了被变换的文件集合50A和51A、被修改的可执行程序30A以及保护模块31,这些都与图3的相同。为了看起来清楚,图4省略了图3中的一些元件,但逻辑上是存在的,并且在图4的方案中没有变化。界面只读功能60B、60C、60D和界面读/写功能61B、61C、61D根据本发明提供了合适的运行时间变换和逆变换。
在本实施例中,界面功能60B、60C、60D和61B、61C、61D是以对被修改的可执行程序30A透明的方式提供的。即,使用被变换文件集合50A和51A的被修改可执行程序30A中的代码可以保留其原始的形式,因为根据本发明,由这些代码看到的文件输入/输出和没有安排保护时所看到的是一致的。这是通过操作系统71和文件变换模块程序70(此后称为“文件变换模块70”)来实现的,通过界面60B、60C和61B、61C介入文件的读写操作。操作系统71(例如微软公司的视窗95TM或98)和文件变换模块70是将文件变换透明地附加到文件操作上的手段。
文件变换模块70的实现有各种不同的方法。然而,根据本发明的这个最佳实施例,该模块的目标是I.使得文件变换对被修改的可执行程序30A完全透明,即,文件变换的结果对程序不作任何修改;并且,II.仅在适当的情况下提供文件变换服务,在这里就是仅对合法的被修改可执行程序30A提供文件变换服务。对于其他的可执行程序,例如原始的核心可执行程序30,或者对例如属于不相关程序的文件这样没有受到影响的财产文件,将不执行变换。满足这些目标的手段是通过文件变换模块70的初始化和执行逻辑来实现的,如下所述。
图5A、5B和5C的流程图给出了文件变换模块70的操作逻辑。有三个不同的操作阶段初始化(图5A),文件挂钩处理(图5B)和结束(图5C)。
文件变换模块70在可以截取来自操作系统71的任何活动之前必须被初始化。注意到这一点是很重要的仅当被修改的可执行程序30A存在并且运行后,保护模块31才是激活的。例如,对于视窗操作系统,保护模块31可能是一个动态链接库(DLL)文件,可以被加到原始可执行程序30的“入口表”上,作为用来产生被修改的可执行程序30A的转换过程的一部分。通过视窗操作系统的“装入程序”内在行为,这将具有以下的作用在执行被修改的可执行程序的任何实际运行时间二进制指令之前,当第一次调用被修改的可执行程序30A时,自动运行保护模块31中的特定代码。没有其他的程序能导致保护模块31运行。并且由于保护模块31通过这里讨论的调用来设置文件变换模块70,因此,文件变换模块70将不会被设置来对任何其他的程序提供服务。注意,原始的核心可执行程序30将不会调用保护模块31或它所触发的变换服务。
如图5A中的流程图所示,在501和502步,保护模块31首先初始化文件变换模块70。在这个阶段上,保护模块31应该将信息传送给文件变换模块70。这些信息应该包括财产表(即被变换的文件集合50A和51A的元素),调用过程识别信息,变换钥以及可选择的其他信息,例如变换算法。调用过程信息将从操作系统71获取,而与财产文件相关的信息可以被嵌入保护模块31,或者由保护模块31通过读其他文件来获取。注意,与财产文件相关的信息也可以由文件变换模块70通过其他手段得到,例如,可以由文件变换模块70直接从文件中读取,或者被嵌入文件变换模块70本身中。在本实施例中,保护模块31在503步中利用可用的操作系统服务功能,将文件变换模块70“挂钩”到文件系统中。例如在视窗95TM或视窗98TM中,文件变换模块70可以是一个虚拟设备驱动器(VxD),而且保护模块31可以利用视窗系统的“虚拟文件系统”调用来安排操作系统调用文件变换模块70,作为随后的文件系统调用所执行的低级操作系列的一部分。作为另一个例子,在用于十六进制中断13的“终止和等待驻留”(TSR)程序中的软件中断处理程序可以被用于微软公司的磁盘操作系统(MS-DOS)。参考图4,通过挂钩机制这样一种手段,文件变换模块70就能够以界面功能60C和61C为操作系统71截取界面读/写功能61B和界面只读功能60B。在本实施例中,无论何时执行读文件、写文件、打开文件或关闭文件操作,都会用到这样的“挂钩”(或截取)。初始化过程在553步完成。在挂钩已经被建立和文件变换模块70被初始化以后,就可应随后的任何文件请求,自动调用文件变换模块70。
一旦被初始化,文件变换模块70将接收针对操作系统71的文件操作请求。仅当针对操作系统71的调用请求被识别为属于或来自被修改可执行程序30A的被变换数据时,文件变换模块70才执行所要求的逆变换(即“变换服务”)。如果文件变换模块70确定该请求不针对属于或来自被修改可执行程序30A的被变换数据,则被截取的请求将被返回操作系统进行正常处理。无论如何,都必须用这样的方式来调用文件变换模块70与该操作有关的文件数据(如果有的话)已经被操作系统71放在文件变换模块70知道的一个存储器缓冲区中。接着,文件变换模块70具有选择项可对这些缓冲区数据进行变换,或者只是返回操作系统而让这些数据保持未变换(as-found)状态。
关于文件变换模块70准确的文件操作集合,应该随本发明的不同实现方案而变化。但至少涉及打开文件、读文件和关闭文件操作。其他的操作,包括写文件操作,也可以被用作触发器,通过相同的操作系统挂钩,调用文件变换模块70。
与这些文件操作有关的进一步信息如下(I)打开文件例如微软的DOSTM视窗系统、和UnixTM这样的操作系统环境都采用整数文件标识符来跟踪被打开的文件。打开文件请求来自被保护的过程(即被修改的可执行程序30A),因为被列在所处理的财产表中的文件(即被变换的文件集合50A和51A),将导致文件变换模块70记录操作系统71为该被打开的文件指定的唯一性文件标识符,以便和相关的变换钥记录在一起,并且把该文件加到一个活动的文件表上;(II)读文件当具有在上述的打开文件阶段中建立的唯一文件标识符的读文件操作,为某个被保护的财产文件的唯一标识符而发生时,文件变换模块70对操作系统71返回的数据进行解密。其实现方法是,允许操作系统71对由调用过程指定的目标缓冲区执行读操作,接着,用该财产文件的相关密钥在原处(即在相同的目标缓冲区)对这些数据进行变换;(III)写文件虽然图5B中没有给出写文件操作的处理,但与打开文件的操作是类似的。在调用操作系统环境之前,变换模块70在调用过程的数据缓冲区中原处对数据进行逆变换,以执行实际的写文件操作;以及(IV)关闭文件当文件变换模块70接收到关闭该文件的请求时,放弃用来为被打开的被保护财产文件存放文件标识符和密钥的资源。
图5B是本发明的文件变换模块70所采取的操作步骤的流程图。在510步中,操作系统71激活了对文件变换模块70的一个“挂钩”。如果文件变换模块70确定该请求不针对属于或来自被修改可执行程序30A的被变换数据,则这个被截取的请求将被返回操作系统71,以便在523和525步中进行正常处理。
然而,如果该调用过程被保护(即该请求是针对属于或来自被修改的可执行程序30A的被变换数据的),则在步512中执行该文件操作的分析。注意,在图5B中,受到影响的只是打开文件、关闭文件和读文件的操作。其他的操作,包括“写文件”操作也可以同样地被截取。
如果该操作为读文件,则在516步确定文件标识符是否在激活的文件表中。如果不在,则被截取的请求将被返回给操作系统71,以便在517和525步中正常处理。如果文件标识符在激活的文件表中,则文件变换模块70在521步返回操作系统71,允许操作系统以正常的方式完成低级读取,但随后在522步中返回文件变换模块70的控制(通过图中没有给出的文件变换模块70的逻辑)。522步确定该财产文件的正确变换钥,并且在523步中对读缓冲区中的数据进行变换。操作系统71在被“挂钩”来调用文件变换模块70的读操作正常过程中已经将所述的数据放在这里。接着在525步完成该过程。
如果该操作是关闭文件,则518步确定文件标识符是否在激活的文件表中。如果不在,则被截取的请求将被返回到操作系统71,以便在517和525步中进行正常处理。如果文件标识符在激活的文件表中,则在519步中将文件标识符和变换钥从激活的文件表中删除。在520步执行关闭文件操作。该过程在525步结束。
图5C是本发明结束步骤的流程图。为了终止,在551步释放为该调用过程配置的所有资源,并且在552步中删除操作系统环境的挂钩机制。然后在553步完成结束过程。
图6是一个方块图,表示软件程序根据本发明的方法变换其财产文件的过程。这是预发送变换过程,它将软件程序变换为其发送状态(见图4)。首先,软件程序的原始发送形式10被过程100分解为若干关键部分,即安装程序20、只读文件集合50、读写文件集合51、核心可执行支持文件40、一般可执行系统资源41以及原始的核心可执行程序30。
接着运行软件转换程序101(图7的流程图说明其逻辑)。这个软件程序,通常带有用户输入,从运行时间非可执行部分只读文件集合50、读/写文件集合51中选择特定的财产文件。软件转换程序101将为每个所选择的财产文件选择变换算法和密钥。接着,利用为特定文件选择的密钥,把所选择的加密算法应用到每个文件。
还要求修改原始的核心可执行程序30。具体来说,原始核心可执行程序30被变换为被修改的可执行程序30A,该程序调用保护模块31。例如,在视窗环境中,其完成方法是将一个引用加到原始核心可执行程序30的入口表的扩展版本中的DLL库上。保护模块31和文件变换模块70必须被加到该文件集合中。变换钥和财产表也必须被加到该文件集合中。它们可以被作为独立文件存储,或者为了安全起见,也可以被嵌入到其他的文件中,例如文件31A、31和/或70中。
最后,还要求对非运行时间部分进行修改。具体来说,软件程序的安装程序20必须被增强以便包括上述新的或被修改的部分,从而得到一个被修改的安装程序20A。
当该过程完成时,存在一组新的运行时间部件,即被修改的可执行程序30A、保护模块31、文件变换模块70以及被变换的文件集合50A和51A。接着,利用过程102将这些部件传送到CD-ROM 10A或者其他的介质上,以便发送给软件用户。在以后的应用软件运行时,这些部件将根据需要被调用。
所有上述的修改是否都由软件转换程序101来实现,或者,某些转换,例如在原始核心可执行程序30和/或安装程序20上实现的转换是否都由独立但有关的过程来完成,这些对于本发明来说,都不重要。用来产生被修改的可执行程序30A的任何其他变换的性质是什么,准确来说也不重要,只要它调用(一般通过保护模块31)文件变换模块70。
还有其他的方法能把核心可执行程序30转换为被修改的可执行程序30A,并且还能有效地控制文件变换模块70的变换行为。例如,用来建立被修改可执行程序30A的转换过程可以将非可执行的数据加到核心可执行程序30上,这样,文件变换模块70在运行时就可以发现并检查这些数据。这些数据可以当成一种“许可证”使用,其存在状况和内容可以被文件变换模块70用来确定是否对这个特定的程序进行变换。在另一个代替的转换机制中,转换过程可以将一个附加的可执行“回调”功能加到核心可执行程序30上。这个功能不要求和以前存在的可执行程序代码30有任何关系,但是在所述的模块正在确定是否提供变换服务时,被文件变换模块70所调用。在上述不同实施例的一种中,核心可执行程序30(或保护模块31,如果存在的话)将不调用文件变换模块70的第一次初始化。但是,可以通过某些别的手段例如通过应用程序的安装程序20,来对文件变换模块70进行初始化。
图7是图6所示文件变换过程的一个流程图。在601步开始文件变换过程。在602步中,用户为新的一组运行时间和非运行时间部件选择目的目录,即被修改的可执行程序30A、保护模块31、文件变换模块70、被变换的文件集合50A和51A以及被修改的安装程序20A。在603步中,用户根据本发明选择要被变换的核心可执行文件(可执行)。在604步中,用户还选择要进行变换的一个数据文件(也称为“财产文件”)。在605步中,软件转换程序产生变换钥。在606步利用变换钥对所选择的财产文件进行变换,然后放在目的目录中。利用判别步骤607来重复执行步骤604-606,直到没有更多的财产文件要变换。这时,可以得到财产表和相关的变换钥集合,并且可以分别被存储,或者被加入到其他文件中。
在608步中,保护模块31被检索并且被加上,可选择地包括上述的财产文件和变换钥信息。在609步建立依赖保护模块31的被修改可执行程序30A。如上所述,在视窗系统环境中,这种依赖通常包括将一个入口表引用加到被修改的可执行程序30A上,这涉及某个保护DLL库。注意,在本发明的一个实施例中,连接原始的核心可执行程序30和保护模块31,可能是为了产生被修改的可执行程序30A而对原始核心可执行程序30所做的唯一修改。文件变换过程在610步中结束。
以下是根据一个实施例的本发明操作的一个示例的实现过程。
1.软件发行商为视窗95环境建立一个软件程序。例如一个多层次的角色扮演娱乐程序。在该例子中,每层由50兆字节的只读数据文件(财产)表示。核心可执行文件是一个2兆字节的。EXE文件。
2.利用图6所示的步骤,根据本发明对该软件程序进行转换,使得每个数据文件50被变换为一个被变换的数据文件,并且还建立了依赖这些被变换数据文件的被修改可执行程序30A。
3.这种转换形式的软件程序被包装在CD-ROM或其他的介质上然后发送给用户。
4.用户安装并且运行该软件程序。
5.安装时,被修改的可执行程序30A、被修改的只读文件集合50A、保护模块31以及文件变换模块70都被拷贝到用户的计算机上或者是可以使用的。而所述软件程序的其他所有部件都正常地位于原处。保护模块31可以采用对象连接和嵌入(OLE)对象、独立的可执行文件或者动态链接库(DLL)文件等形式。在涉及视窗95TM或98TM的可执行的文件的情况下,文件变换模块70最好是一个视窗系统的虚拟设备驱动器或VxD。在本示例中,软件程序的读/写文件,如果有的话,应该不受影响。
6.当程序运行时,它把该软件程序的第一层提供给用户。显然,这意味着第一层数据文件必须由修改的可执行程序30A访问和读取。根据图5B所示的流程图,最初的读文件操作触发文件变换模块70,以确定文件和读文件程序的这个特定组合将要进行一次变换。
7.随后的所有对第一层数据文件的读文件操作都调用文件变换模块70,根据图5B,它允许文件系统进行实际的读操作,并且在操作系统71使之可以用于被修改的可执行程序30A之前,在原处变换缓冲区中的文件数据。虽然这不是一般的读/写文件,但如果需要的话,写操作同样可以被截取和变换。
8.当程序退出,或者用户移到软件程序中的另一个层次时,第一层的文件被关闭,这时,文件变换模块70重置所有与该数据文件有关的信息。对该文件的随后任何操作都应该从打开文件操作开始,因为本地的文件系统和根据本发明的变换模块70都要求这样做。
最佳实施例的以上描述不应该用任何局限的方式来解释,因为在不脱离本发明原理的前提下可以进行各种变化和精练。本发明的范围由随后的权利要求书及其等同物来限定。
权利要求
1.一种计算机系统,包括(a)一种用于至少存放一个被变换数据文件的存储器,(b)一种用于执行一个操作系统、一个可执行程序以及一个仅对所述可执行程序提供变换服务的文件变换模块程序的处理器,所述文件变换模块程序把文件操作从所述可执行程序中截取到所述的操作系统,其中,在截取文件操作时,所述文件变换模块程序从所述至少一个被变换的数据文件中检索被变换的数据,利用变换钥对所述的被变换数据进行逆变换,使之成为其非变换状态,并且将处于其非变换状态的所述数据提交给所述的可执行程序。
2.根据权利要求1的计算机系统,其中,所述文件操作包括打开文件操作、读文件操作、写文件操作以及关闭文件操作。
3.根据权利要求2的计算机系统,其中,一旦执行打开文件操作,所述文件变换模块程序就把唯一文件标识符赋予所述的至少一个被变换的数据文件,并且将所述的唯一文件标识符记录在某个激活的文件表中。
4.根据权利要求3的计算机系统,其中,在执行读文件和写文件操作时,文件变换模块程序检测该激活的文件表,以确定是否要应用逆变换,如果不用,则将所述文件操作返回到所述的操作系统,以便进行正常处理。
5.根据权利要求3的计算机系统,其中,在关闭所述的被变换数据文件时,文件变换模块程序从所述的激活文件表中删除用于所述至少一个被变换的数据文件的唯一文件标识符。
6.根据权利要求1的计算机系统,其中,所述至少一个被变换的数据文件是一个只读文件。
7.根据权利要求1的计算机系统,其中,所述至少一个被变换的数据文件是一个读/写文件。
8.根据权利要求1的计算机系统,其中,所述可执行程序被嵌入针对执行保护模块程序的一个调用,它仅当执行所述可执行程序时才能被调用,当所述可执行程序第一次执行时,所述保护模块程序初始化所述文件变换模块。
9.根据权利要求8的计算机系统,其中所述变换钥被存放在所述保护模块程序中。
10.根据权利要求8的计算机系统,其中,所述保护模块程序是一个动态链接库(DLL)。
11.根据权利要求1的计算机系统,其中,所述至少一个被变换数据文件已经利用DES和RSA加密算法中的一种进行加密。
12.根据权利要求1的计算机系统,其中,非可执行的许可数据被嵌入所述的可执行程序中,以便保证所述的文件变换模块仅对所述的可执行程序提供变换服务。
13.根据权利要求1的计算机系统,其中,可执行程序代码被嵌入所述的可执行程序中,以便保证所述的文件变换模块仅对所述的可执行程序提供变换服务。
14.一种从包含可执行程序以及一个或多个数据文件的计算机软件应用中产生该计算机软件应用的一个被保护版本的方法,包括以下的步骤I.应用一个或多个变换算法和变换钥将一个或多个数据文件变换成一个或多个对应的被变换数据文件;II.存放所述的变换钥;III.检索只对所述可执行程序提供变换服务的文件变换模块程序;IV将所述的一个或多个对应的被变换数据文件、变换钥、可执行程序以及文件变换模块程序传送到某个介质上,以便发送给用户。
15.根据权利要求14的方法进一步包含修改所述可执行程序的步骤,它将执行保护模块程序的一个调用嵌入所述的可执行程序,仅当执行所述可执行程序时才能调用该保护模块程序,当第一次执行所述的可执行程序时,所述保护程序对所述文件变换模块进行初始化。
16.根据权利要求15的方法,其中,存储所述变换钥的步骤包括将所述变换钥嵌入所述保护模块程序的步骤。
17.根据权利要求15的方法,其中,所述保护模块程序是一个动态链接库(DLL)。
18.根据权利要求14的方法,其中,所述变换算法是从DES和RSA加密算法中的一个选择的。
19.根据权利要求14的方法,进一步包含将非可执行的许可数据嵌入所述可执行程序的步骤,以便保证所述文件变换模块仅对所述可执行程序提供变换服务。
20.根据权利要求14的方法,进一步包括将可执行程序代码嵌入所述的可执行程序中的步骤,以便保证所述的文件变换模块仅对所述的可执行程序提供变换服务。
21.一种机器可读介质,包含一个可执行程序、至少一个被变换的数据文件、至少一个变换钥,以及仅对所述可执行程序提供变换服务的文件变换模块程序,并且当所述可执行程序和所述文件变换模块程序在一个计算机系统上运行时,所述文件变换模块程序从所述可执行程序中将文件操作截取到所述的计算机系统的操作系统上,其中,当某个文件操作被截取时,所述文件变换模块程序从至少一个被变换的数据文件中检索被变换的数据,利用所述至少一个变换钥将所述被变换的数据逆变换为其非被变换的状态,并且将这种状态下的所述数据提交给所述的可执行程序。
22.根据权利要求21的机器可读介质,其中,所述文件操作包括打开文件操作、读文件操作、写文件操作以及关闭文件操作。
23.根据权利要求22的机器可读介质,其中,在截取打开文件操作时,所述文件变换模块程序把唯一文件标识符赋予所述的至少一个被变换的数据文件,并且将所述的唯一文件标识符记录在某个激活的文件表中。
24.根据权利要求23的机器可读介质,其中,在截取读文件或写文件操作时,文件变换模块程序检测该激活的文件表,以确定是否要应用逆变换,如果不用,则将所述文件操作返回到所述的操作系统,以便进行正常处理。
25.根据权利要求23的机器可读介质,其中,当在计算机系统上运行时,一旦关闭所述的至少一个被变换数据文件,文件变换模块程序就从所述的激活文件表中删除用于所述至少一个被变换的数据文件的所述唯一文件标识符。
26.根据权利要求21的计算机系统,其中,所述至少一个被变换的数据文件是一个只读文件。
27.根据权利要求21的计算机系统,其中,所述至少一个被变换的数据文件是一个读/写文件。
28.根据权利要求21的计算机系统,其中,在所述可执行程序中嵌入执行保护模块程序的一个调用,仅当执行所述可执行程序时才能被调用,当所述可执行程序第一次执行时,所述保护模块程序初始化所述文件变换模块。
29.根据权利要求28的计算机系统,其中所述至少一个变换钥被嵌入所述保护模块程序中。
30.根据权利要求28的计算机系统,其中,所述保护模块程序是一个动态链接库(DLL)。
31.根据权利要求21的计算机系统,其中,所述至少一个被变换数据文件已经利用DES和RSA加密算法中的一种进行加密。
32.根据权利要求21的计算机系统,其中,非可执行的许可数据被嵌入所述的可执行程序中,以便保证所述的文件变换模块仅对所述的可执行程序提供变换服务。
33.根据权利要求21的计算机系统,其中,可执行程序代码被嵌入所述的可执行程序中,以便保证所述的文件变换模块仅对所述的可执行程序提供变换服务。
34.一种计算机系统,包括(a)一个用于至少存放一个被变换数据文件的存储器,(b)一个用于执行某个操作系统和某个被修改的可执行程序的处理器,所述被修改的可执行程序被修改来调用仅对所述被修改的可执行程序提供变换服务的文件变换模块程序,所述文件变换模块程序把文件操作从所述被修改的可执行程序中截取到所述的操作系统,其中,在截取文件操作时,所述文件变换模块程序从所述至少一个被变换的数据文件中检索被变换的数据,利用变换钥对所述的被变换数据进行逆变换,使之成为其非变换状态,并且将处于其非变换状态的所述数据提交给所述被修改的可执行程序。
35.根据权利要求34的计算机系统,其中,所述文件操作包括打开文件操作、读文件操作、写文件操作以及关闭文件操作。
36.根据权利要求35的计算机系统,其中,在执行打开文件操作时,所述文件变换模块程序把唯一文件标识符赋予所述至少一个被变换的数据文件,并且将所述的唯一文件标识符记录在某个激活的文件表中。
37.根据权利要求36的计算机系统,其中,在执行读文件和写文件操作时,文件变换模块程序检测该激活的文件表,以确定是否要使用逆变换,如果不用,则将所述文件操作返回到所述的操作系统,以便进行正常处理。
38.根据权利要求36的计算机系统,其中,在关闭所述的被变换数据文件时,文件变换模块程序从所述的激活文件表中删除用于所述至少一个被变换的数据文件的唯一文件标识符。
39.根据权利要求34的计算机系统,其中,所述至少一个被变换的数据文件是一个只读文件。
40.根据权利要求34的计算机系统,其中,所述至少一个被变换的数据文件是一个读/写文件。
41.根据权利要求34的计算机系统,其中,在所述被修改的可执行程序中嵌入执行保护模块程序的一个调用,它仅当执行所述被修改的可执行程序时才能被调用,当所述被修改可执行程序第一次执行时,所述保护模块程序初始化所述文件变换模块。
42.根据权利要求41的计算机系统,其中,所述变换钥被存放在所述保护模块程序中。
43.根据权利要求41的计算机系统,其中,所述保护模块程序是一个动态链接库(DLL)。
44.根据权利要求34的计算机系统,其中,所述至少一个被变换数据文件已经利用DES和RSA加密算法中的一种进行加密。
45.根据权利要求34的计算机系统,其中,非可执行的许可数据被嵌入所述被修改的可执行程序中,以便保证所述的文件变换模块仅对所述被修改的可执行程序提供变换服务。
46.根据权利要求34的计算机系统,其中,可执行程序代码被嵌入所述被修改的可执行程序中,以便保证所述的文件变换模块仅对所述被修改的可执行程序提供变换服务。
全文摘要
公开一种改进的软件保护机制,通过这种软件保护机制,软件程序的“财产文件”和核心可执行程序本身都以这样一种方式进行变换,使得被修改的可执行程序的任何重发送也要求重发送对应的被变换的财产文件。在操作中,文件变换模块被用来截取来自操作系统的任何文件活动。仅当对操作系统的调用请求被识别为是针对属于或来自被修改的可执行程序的被变换数据时,文件变换模块才执行所要求的逆变换。保护模块包括财产表、调用过程识别信息、变换钥以及可任意选择的其他信息,例如与文件变换模块结合使用的变换算法。
文档编号G06F21/22GK1258041SQ9912651
公开日2000年6月28日 申请日期1999年12月22日 优先权日1998年12月22日
发明者戈登·E·拉罗斯, 斯科特·A·汤姆森 申请人:网络活动公司