防护软件
发明领域
本发明一般涉及安全,尤其涉及通过防止未经授权的个体或未经授权的软件进行的修改而禁止软件篡改。
发明背景
软件使计算机功能强大。这样的机器可纠正人的有缺陷心脏的不规则心率、或使人能看到天空中的星座。然而,软件易受简单的如偶然故障或有意损害的攻击。偶然的故障可能无辜地来自孩子,他以某种方式使用他父母的个人计算机,引起数据的物理损失或改变对计算机的使用有害的设置时,等等。有意的损害一般由“黑客”策动,“黑客”是将计算专业知识用于非法目的的人的俗称,诸如通过使恶意软件在计算机上运行、或在未经允许的情况下直接访问计算机并篡改程序和数据。
操作系统是控制诸如存储器、中央处理单元(CPU)时间、磁盘空间和外围设备的计算机资源的分配和使用的软件。操作系统是应用程序所依赖的基础软件。流行的操作系统包括Windows 98、Windows NT、Windows XP、Mac OS、UNIX和Linux。操作系统有时以适于特定市场的方式包装。例如,用于较小的特殊服务器市场的功能强大的操作系统可由软件制造商以适于较大的普通消费者市场中的初学者用户的各种方式改进。一个问题在于初学者用户可能会无意间修改经改进的操作系统,从而削弱该系统。然而,最致命的问题在于黑客可反向设计经改进的操作系统,使其变为用于对软件制造商有损害的其它非法目的。图1详细示出了这个问题以及其它问题。
软件映像108表示包含使计算机硬件工作的指令的操作系统的副本或复制品。黑客或其恶意软件102可修改软件映像108、或使其易于替换,因为软件映像108一般是存储在计算机硬件中某处的文件。用户110下一次调用该软件映像来运行诸如操作系统的系统软件时,经修改或取代的软件映像代替由软件制造商提供的原始软件映像运行。
对软件映像108的篡改一般由黑客或恶意软件102执行,而很少由用户110执行。然而,注册表106可能被用户110无意中篡改,以及被黑客或恶意软件102篡改。注册表106是用于存储可用来为一个或多个用户、应用程序和硬件设备配置系统的信息的系统软件。例如,注册表可用于对消费者计算机启用三维呈现和硬件加速支持、同时对服务器计算机禁用同样的特性。
当用户110以管理许可方式行动时这些信息可被改变,或它们可由不当获取修改注册表的许可的黑客或恶意软件102改变。黑客和恶意软件102可试图操纵注册表106来克服许可证限制,以便改变注册表、注册表设置中的信息,并解锁不针对特定受众或销售渠道的附加特性。一个问题在于对注册表的修改可使得计算机停止工作或展现不可预计的行为。
另一问题涉及对执行软件104的篡改。黑客或恶意软件102可不适当地投弃正确执行的软件104,并以未经授权或被禁止的软件服务取代它。而且,黑客或恶意软件102可模仿软件响应或软件调用,并篡改对执行软件104的运行。
给出由偶然的故障或有意的损害两者引起的软件篡改问题,毫无疑问地肆无忌惮的黑客及其恶意软件会使软件易受攻击。在没有对软件篡改问题的解决方案的情况下,用户可能最终不再相信计算机制造商会提供安全的计算经历同时防止未经授权个体的访问。因此,存在对用于防护软件、同时避免或减少与现有系统相关联的以上问题的系统、方法和计算机可读介质的需求。
发明概述
根据本发明,提供了用于禁止软件篡改的系统、方法和计算机可读介质。本发明的系统形式包括用于禁止对运行在计算机上的软件的篡改的系统。该系统包括用于调用模糊保护动态链接库的保护功能,以禁止未经授权服务的执行的装置。该系统还包括用于调用模糊保护动态链接库的另一保护功能,以保护中央分层数据库的密钥和值的装置。
根据本发明的其它方面,本发明的方法形式包括用于禁止对运行在计算机上的软件的篡改的方法。该方法包括调用模糊保护动态链接库的保护功能,以禁止未经授权服务的执行。该方法还包括调用模糊保护动态链接库的另一保护功能,以保护中央分层数据库的密钥和值。
根据本发明的其它方面,本发明的计算机可读形式包括具有用于执行禁止对运行在计算机上的软件的篡改的方法的计算机可执行指令的计算机可读介质。该方法包括调用模糊保护动态链接库的保护功能,以禁止未经授权服务的执行。该方法还包括调用模糊保护动态链接库的另一保护功能,以保护中央分层数据库的密钥和值。
根据本发明,提供了用于禁止软件篡改的系统、方法和计算机可读介质。本发明的计算机可读介质形式包括,其上存储有由计算系统用来验证信息的原始性的计算机可执行指令和一个或多个数据结构的计算机可读介质。该计算机可读介质包括以保护动态链接库的私有库密钥加密的配置文件,配置文件包括其大小和格式取决于配置文件类型的配置文件数据。该配置文件还包括以保护动态链接库的公共库密钥数字化签署的签名,且该配置文件还包括包含标识配置文件的标识符与配置文件数据的校验和的验证者块。
根据本发明的其它方面,本发明的方法形式包括用于保护软件之间的交互操作的计算机实现方法。该计算机实现方法包括启动具有公共调用密钥和私有调用密钥的第一软件对存储在中央分层数据库中的配置文件的访问,第一软件发送随机盐值。该计算机实现方法还包括,当通过具有私有库密钥的第二软件接收该随机盐值之后,第二软件在中央分层数据库中找到该配置文件,并使用私有库密钥对配置文件解密。
根据本发明的其它方面,本发明的计算机可读形式包括用于保护软件之间交互操作的计算机实现方法。该计算机实现方法包括启动具有公共调用密钥和私有调用密钥的软件对中央分层数据库中所存储的配置文件的访问。第一软件发送随机盐值。该计算机实现方法还包括,当具有私有库密钥的第二软件接收该随机盐值之后,第二软件在中央分层数据库中找到该配置文件,并使用私有库密钥对配置文件解密。
根据本发明的其它方面,本发明的系统形式包括用于保护软件之间的交互操作的系统。该系统包括用于启动具有公共调用密钥和私有调用密钥的软件对中央分层数据库中所存储的配置文件的访问的装置,第一软件发送随机盐值。该系统还包括,当具有私有库密钥的第二软件接收该随机盐值之后,第二软件执行用于在中央分层数据库中找到该配置文件并使用私有库密钥对配置文件解密的装置。
根据本发明,提供了用于禁止软件篡改的系统、方法和计算机可读介质。本发明的方法形式包括用于禁止对运行在计算机上的软件的篡改的系统。该方法包括,如果保护可用于软件所归类到的产品类,则在计算机上加载模糊保护动态链接库。该方法还包括,创建用于监视运行在计算机上的软件仍旧属于可使用对篡改的保护的产品类的系统定时器。
根据本发明的其它方面,本发明的计算机可读介质形式包括用于禁止对运行在计算机上的软件的篡改的方法。该方法包括,如果保护可用于软件所归类到的产品类,则在计算机上加载模糊保护动态链接库。该方法还包括,创建用于监视运行在计算机上的软件仍旧属于可使用对篡改的保护的产品类的系统定时器。
根据本发明的其它方面,本发明的方法形式包括用于禁止对运行在计算机上的软件的篡改的方法。该方法包括由在计算机上调用模糊保护动态链接库的保护功能创建多个执行线程。多个线程之一禁止未经授权服务的执行,而多个线程中的其它线程保护中央分层数据库的密钥和值。该方法还包括创建用于监视该多个线程正在运行的定时器。
根据本发明的其它方面,本发明的计算机可读介质形式包括其上存储有用于执行禁止对运行在计算机上的软件的篡改的方法的计算机可执行指令的计算机可读介质。该计算机可读介质包括由在计算机上调用模糊保护动态链接库的保护功能创建多个执行线程。多个线程之一禁止未经授权服务的执行,而多个线程中的其它线程保护中央分层数据库的密钥和值。该方法还包括创建用于监视该多个线程正在运行的定时器。
根据本发明,提供了用于禁止软件的系统、方法和计算机可读介质。本发明的方法形式包括用于禁止服务篡改的方法。该方法包括在计算机启动之后,由登录模块调用模糊保护动态链接库的保护功能,以创建禁止未经授权服务的执行的线程。该方法还包括与模糊保护动态链接库通信以访问与未经授权服务的列表相关的经加密的保护配置文件。
根据本发明的其它方面,本发明的计算机可读形式包括含有存储其上的用于实现禁止服务篡改的方法的计算机可执行指令的计算机可读介质。该方法包括在起动计算机之后,由登录模块调用模糊保护动态链接库的保护功能,以创建禁止未经授权服务的执行的线程。该方法还包括与模糊保护动态链接库通信,以访问与未经授权服务的列表相关的加密保护概况文件。
根据本发明的其它方面,本发明的计算机可读形式包括含有用于实现禁止对运行在计算机上的软件的篡改的方法的计算机可执行指令的计算机可读介质。该方法包括调用模糊保护动态链接库的保护功能,以禁止未经授权服务的执行。该方法还包括调用模糊保护动态链接库的另一保护功能,以保护中央分层数据库的密钥和值。
根据本发明,提供了用于禁止软件篡改的系统、方法和计算机可读介质。本发明的计算机可读介质形式包括其上存储有由计算系统用来安装软件的计算机可执行指令的计算机可读介质。该计算机可读介质包括含有计算机可执行指令的保护动态链接库,这些指令针对篡改监视中央分层数据库,验证计算系统中所存储的一组文件的原始性,并停止未经授权服务的执行。
根据本发明的其它方面,本发明的方法形式包括用于保护软件设置的计算机实现方法。该方法包括创建产品标识符以将软件标识为属于市场上出售的一软件包类。该方法还包括,如果基于产品标识符该软件属于可使用软件篡改保护的市场上出售的一软件包类,则便于保护动态链接库的安装以禁止软件篡改。
根据本发明的其它方面,本发明的计算机可读形式包括其上存储有用于执行保护软件设置的计算机实现方法的计算机可执行指令的计算机可读介质。该方法包括创建产品标识符以将软件标识为属于市场上出售的一软件包类。该方法还包括,如果基于产品标识符该软件属于可使用软件篡改保护的市场上出售的一软件包类,则便于保护动态链接库的安装以禁止软件篡改。
根据本发明的其它方面,本发明的系统形式包括用于保护软件设置的系统。该系统包括用于创建产品标识符以将软件标识为属于市场上出售的一软件包类的装置。该系统还包括,如果基于产品标识符该软件属于可使用软件篡改保护的市场上出售的一软件包类,则用来便于保护动态链接库的安装以禁止软件篡改的装置。
根据本发明,提供了用于禁止软件篡改的系统、方法和计算机可读介质。本发明的计算机可读介质形式包括其上存储有计算系统用来保护软件篡改的计算机可执行指令的计算机可读介质。该计算机可读介质包括包含模糊计算机可执行指令的保护动态链接库,这些模糊计算机可执行指令针对篡改监视数据库、验证一组文件的原始性并停止未经授权服务的执行。
根据本发明的其它方面,本发明的方法形式包括用于产生其上存储有计算系统用于禁止软件篡改的计算机可执行指令的计算机可读介质的计算机实现方法。该方法形成针对篡改监视数据库、验证一组文件的原始性并停止未经授权服务的执行的模糊保护动态链接库,其中模糊了类名、方法、字段和控制流。该方法还包括创建包含该模糊保护动态链接库的校验和的数字签署的分类文件。
根据本发明的其它方面,本发明的计算机可读形式包括其上存储有用于实现禁止软件篡改的方法的计算机可执行指令的计算机可读介质。该方法包括形成针对篡改监视数据库、验证一组文件的原始性并停止未经授权服务的执行的模糊保护动态链接库,其中模糊了类名、方法、字段和控制流。该方法还包括创建包含该模糊保护动态链接库的校验和的数字签署的分类文件。
根据本发明的其它方面,本发明的计算机可读形式包括用于产生其上存储有计算系统用于禁止软件篡改的计算机可执行指令的计算机可读介质的系统。该系统包括用于形成针对篡改监视数据库、验证一组文件的原始性并停止未经授权服务的执行的模糊保护动态链接库的装置,其中模糊了类名、方法、字段和控制流。该系统还包括用于创建包含该模糊保护动态链接库的校验和的数字签署的分类文件的装置。
根据本发明,提供了用于禁止软件篡改的系统、方法和计算机可读介质。本发明的方法形式包括用于禁止软件篡改的方法。该方法包括在将模糊保护动态链接库加载到计算机上之前,计算该模糊保护动态链接库的第一校验和。该方法还包括验证模糊保护动态链接库的软件映像的原始性,以确定是否要采取安全性出错措施以禁止软件篡改。
根据本发明的其它方面,本发明的计算机可读介质形式包括含有用于实现禁止软件篡改的方法的计算机可执行指令的计算机可读介质。该方法包括在将模糊保护动态链接库加载到计算机上之前,计算该模糊保护动态链接库的第一校验和。该方法还包括验证模糊保护动态链接库的软件映像的原始性,以确定是否要采取安全性出错措施以禁止软件篡改。
根据本发明的其它方面,本发明的系统形式包括用于禁止软件篡改的系统。该系统包括用于在将模糊保护动态链接库加载到计算机上之前,计算该模糊保护动态链接库的第一校验和的装置。该系统还包括用于验证模糊保护动态链接库的软件映像的原始性,以确定是否要采取安全性出错措施以禁止软件篡改的装置。
根据本发明,提供了用于禁止软件篡改的系统、方法和计算机可读介质。本发明的方法形式包括用于确定计算机是否属于软件的可支持机器类的计算机实现方法。该方法包括验证该计算机的中央处理单元上揭示中央处理单元的标识的一组指令的存在性。该方法还包括,如果中央处理单元具有支持自标识的体系结构,则将模糊保护动态链接库加载到计算机上。
根据本发明的其它方面,本发明的计算机可读介质形式包括其上存储有用于实现确定计算机是否属于软件的可支持机器类的方法的计算机可执行指令的计算机可读介质。该方法包括验证该计算机的中央处理单元上揭示中央处理单元的标识的一组指令的存在性。该方法还包括,如果中央处理单元具有支持自标识的体系结构,则将模糊保护动态链接库加载到计算机上。
根据本发明,提供了用于禁止软件篡改的系统、方法和计算机可读介质。本发明的方法形式包括用于禁止软件篡改的方法。该方法包括在计算机启动之后,由登录模块调用模糊保护动态链接库的保护功能,以创建保护与该系统相关联的中央分层数据库的密钥和值的第一线程。该方法还包括在用户登录至计算机之后,由登录模块调用模糊保护动态链接库的保护功能以创建保护与该用户相关联的中央分层数据库的密钥和值的第二线程。
根据本发明的其它方面,本发明的计算机可读介质形式包括其上含有用于实现禁止软件篡改的方法的计算机可执行指令的计算机可读介质。该方法包括在计算机启动之后,由登录模块调用模糊保护动态链接库的保护功能以创建保护与该系统相关联的中央分层数据库的密钥和值的第一线程。该方法还包括在用户登录至计算机之后,由登录模块调用模糊保护动态链接库的保护功能以创建保护与该用户相关联的中央分层数据库的密钥和值的第二线程。
附图简述
通过结合附图参考以下详细描述,可更容易地领会并更好地理解本发明的前述各方面和众多附带优点,在附图中:
图1是示出表现了计算机中未经授权的个体进行的软件篡改问题的常规系统的框图。
图2是示出用于设置软件来禁止篡改的示例性软件组件的框图。
图3A是示出交互操作来禁止软件篡改的示例性软件组件的框图。
图3B是根据本发明的一个实施例,示出存储在注册表或动态链接库的示例性配置文件、以及软件的安全交互操作对配置文件的提取的框图。
图4A-4Z是根据本发明的一个实施例,示出用于禁止软件篡改的方法的过程示意图。
较佳实施例的详细描述
软件的两面性在于它是功能强大但易受攻击的。本发明的各个实施例禁止用软件进行篡改。一个实施例是使软件映像模糊(obfuscation),以便混乱黑客在反向设计包含该软件映像的软件时的理解。另一实施例是验证软件是否一起构成了需要针对篡改的保护的软件包。又一实施例是确定诸如计算机上的中央处理单元或高速缓存存储器的硬件资源是否属于可能禁止软件篡改的一类。再一实施例包括检查计算机上是否有某些关键文件被篡改。另一实施例包括确定注册表是否被篡改。某些其它实施例包括确定正在执行的软件服务是否被篡改。
图2示出了软件组件200,它包括产品标识符(PID)动态链接库200A、设置软件200B以及设置信息文件200C。设置软件组件200负责确定用于禁止篡改的软件是否可被安装到计算机系统上。该软件包括任何合适的软件,诸如系统软件(操作系统)、应用程序软件和网络软件。产品标识符动态链接库200A属于与文件分开存储的可执行例程类。这些例程具有特定的扩展名,诸如“DLL”,并且仅当程序需要时才加载。这些动态链接库可合适地作为Microsoft Windows操作系统系列和OS/2的特性。动态链接库具有若干特征:首先,它在使用前一般不消耗任何存储器;其次,因为动态链接库是一单独文件,所以程序员可仅对该模块进行更正或改进,而不影响正在调用的程序或任何其它动态链接库的操作;最后,程序员可与其它程序一起使用相同的动态链接库。
设置信息文件200C属于基于文本的一类文件,并包含由诸如设置软件200B的设置应用程序在安装期间使用的信息。一般而言,设置信息文件200C以及其它设置信息文件(诸如保护信息文件202A),在创作诸如设置软件200B的设置应用程序之前创建。可被存储在信息文件中的信息的示例包括注册表改变、文件名、源文件在源介质上的位置。设置信息文件200C以及保护信息文件202A还可包含专用段。这些专用段取决于设置软件200B,且可用于存储由诸如设置软件200B的特定设置应用程序所使用的专门信息,以便安装禁止软件篡改的软件。
设置软件200B是其功能在于将诸如系统软件、应用程序软件或网络软件等另一程序安装在存储介质上或存储器中的程序。设置软件200B可用于指导用户通过为机器、打印机、监视器和网络的特定组合设置应用程序的通常复杂的过程。产品标识符动态链接库200A创建唯一的产品标识符,并将所创建的产品标识符204A存储在注册表204中,这将在下文中描述。设置信息文件200C准备安装动态链接库202B,以便安装禁止软件篡改的软件。安装组件202包括保护信息文件202A和安装动态链接库202B。保护信息文件202A包含各种信息,诸如注册表改变、文件名以及源文件的位置,以便安装禁止软件篡改的软件。此外,保护信息文件202A包括用于系统文件206B、和市场上出售的软件包专用的各种软件组件的安装信息。
包含在软件组件202内的安装动态链接库202B安装禁止软件篡改的实际软件,诸如保护动态链接库206A,这是对特定市场专用的,并可提供适于该特定市场的内容或语言。安装动态链接库202B也设置激活密钥204C,以便允许如具体化成保护动态链接库206A中的禁止篡改的软件来迅速标识该安装是安全的安装。而且,安装动态链接库202B也安装包含属于硬件和/或语言等的多个加密保护配置文件以及各种系统文件206B,以便允许它来确定是否有什么已被篡改。
运行时组件206包括保护动态链接库206A,它具体化成禁止对系统文件206B进行软件篡改的软件,该系统文件206B包括帮助文件以及诸如语言等市场专用内容文件。
中央分层数据库204包括产品标识符204A、激活密钥204C以及加密保护配置文件204D。中央分层数据库204被用于存储为一个或多个用户、应用程序和硬件设备配置系统所必需的信息。中央分层数据库204包含各种信息,这些信息可由操作系统在操作期间继续参考,诸如每一用户的配置文件、安装在计算机上的应用程序、以及可创建的各类文档;文件夹和应用程序图标的属性页设定;系统上存在什么硬件;以及正在使用哪些端口。如上所述,中央分层数据库204此外可用于存储协助禁止软件篡改的信息。一项合适的信息包括校验和,这是用于诸如当黑客修改文件时的篡改测试数据的计算值。较佳地通过依次组合数据的所有字节和一连串算术或逻辑运算来对给定的数据块计算校验和。在其中验证或确认软件篡改的时段期间,可使用所存储的数据以相同的方式计算新的校验和。如果两个校验和不匹配,则可能发生了软件篡改,且可采取合适的步骤来更正篡改或关闭计算机。
图3A示出了如由保护动态链接库306A具体化的用于禁止软件篡改的软件的执行。图3A的各个元素类似于图2A的各个元素,且为简洁的目的起见,将不对其进一步讨论。登录组件308包括登录模块308A,并在计算机系统启动时,登录模块380A取决于产品标识符304A尝试加载保护动态链接库306A。如果适当的产品标识符存在于中央分层数据库204中,则保护动态链接库306A将由登录模块308A加载。登录模块308A较佳的是在允许用户访问计算机上的系统软件之前接收用户名和口令并确认该信息的软件。
保护动态链接库306A在计算机系统软件的执行期间,通过读取各个加密保护配置文件304D验证各个系统文件306B并未被篡改。此外,保护动态链接库306A验证密钥的各个设置及其关联值以确定它们是否已被篡改。保护动态链接库306A开始时创建定时器来检查注册表以及被授权在计算机系统上运行的服务。如果系统已被篡改,则保护动态链接库306A较佳地试图修补该篡改,或启动计算机的关闭,以及处理篡改的其它合适方法。
例如,保护动态链接库306A监视中央分层数据库304,且如果存在篡改则使密钥及其相关联的值复位。保护动态链接库306A也针对加密保护配置文件304D和保护动态链接库306A中所包含的信息检查诸如各个系统文件306B的关键文件,以确定是否存在篡改。而且,保护动态链接库306A检查以确定运行在计算机系统上的软件服务被授权,并移除未经授权的软件服务。
图3B示出了可由诸如登录模块308A的软件访问的加密保护配置文件304D。登录模块308A与保护动态链接库306B通信以访问加密保护配置文件304D。登录模块308A与保护动态链接库306B之间的可互操作性较佳地按照确认信息的传输或传送可在软件之间安全发生的合适协议进行。
一个合适的协议包括随机盐值的传输,这可包括数字、字母或数字字母信息串,它们由登录模块308A向保护动态链接库306B发送。保护动态链接库306B较佳地具有两个密钥,一个公共库密钥以及一个私有库密钥。在加密和数字签名中,这些密钥包括用于加密和解密要发送或接收的信息的比特串。加密通常依赖于两种不同类型的密钥——一人以上知道的公共密钥以及仅一个人知道的私有密钥。
保护动态链接库306B使用私有库密钥来解密诸如配置文件312-316的配置文件。每一配置文件被合适地组织成称之为块(blob)的数据结构,该数据结构是可在其中存储各种信息的无定形的数据结构。较佳地,配置文件312-316的块使用保护动态链接库306B的私有库密钥加密。配置文件312包括块1,它由保护动态链接库306B的私有库密钥加密。块1包括配置文件数据1 312A,它的大小和格式取决于配置文件类型,诸如硬件配置文件或语言配置文件。块1也包括签名1 312B,它包含配置文件数据1 312A的校验和,以保护动态链接库306B的公共库密钥来数字签署。块1也包括验证块1 312C,它是配置文件312的标识符和配置文件数据1 312A的校验和,它以登录模块308A的公共调用密钥数字签署,也以登录模块308A的私有调用密钥加密。
配置文件312被组织成块2,其中包含验证者块2 314A,它是配置文件314及其由配置文件数据2 314B描述的数据的校验和,它以登录模块308A的私有调用密钥数字签署也以登录模块308A的私有调用密钥加密。块2包括配置文件数据2 314B,其大小和格式取决于配置文件类型,诸如硬件配置文件或语言配置文件。块2也包括签名2 314C,它是配置文件数据2314B的校验和,以保护动态链接库306B的公共库密钥数字签署。
配置文件316被组织成块3。块3包括签名3 316A,它是配置文件数据3 316C的校验和,以保护动态链接库306B的公共库密钥数字签署。块3包括验证者块3316B,它是配置文件316的标识符及其由配置文件数据3 316C的校验和,以登录模块308A的公共调用密钥数字签署也以登录模块308A的私有调用密钥加密。块3包括配置文件数据3 316C,其大小和格式取决于配置文件类型,诸如硬件配置文件或语言配置文件。注意到,配置文件312-316的每一块1-3以及诸如配置文件数据1-3、签名1-3和验证者块1-3的各个指定组织被有差异地置于块1-3或配置文件312-316的每一个中。这些不同的安排协助禁止对注册表304内所包含的配置文件数据的篡改。包含设置信息的头部存在于块1-3内,从而允许确定指定组织中的每一个驻留在块1-3内的何处。
当保护动态链接库306B通过使用其私有库密钥解密配置文件或块已找到了期望配置文件时,它将该配置文件返回至登录模块308A。在将数据返回给登录模块308A之前,保护动态链接库306B根据所找到的配置文件的标识符以及配置数据计算校验和。该校验和包括配置文件与开始时由登录模块308A发送的随机盐值的比较结果。该盐值在本质上禁止了黑客仅仅模仿保护动态链接库306A来向登录模块308A返回假配置文件的能力。
当进行了校验和的计算时,保护动态链接库306B向登录模块308A返回:基本上是具有各种信息(例如,成功、失败和详细描述成功或失败的标志)的结果数据结构的结果,找到的配置文件中的验证者块,以及从该配置文件的标识符、其数据、该结果和随机盐值中计算出的计算的校验和。登录模块308A验证来自保护动态链接库306B的返回结果。登录模块308A使用其私有调用密钥对验证者块解密,以获取配置文件的标识符和配置文件的数据的校验和。此外,登录模块308A通过使用其公共调用密钥来验证验证者块的签名。而且,登录模块308A计算经解密的验证者块、DLL的结果以及开始时传递给保护动态链接库306A的随机盐值的校验和。登录模块308A执行测试,以确定它所计算出的校验和是否匹配由保护动态链接库306B返回的校验和。如果校验和不匹配,则登录模块308A断定系统已被篡改。
图4A-4Z示出了用于禁止软件篡改的方法400。为清楚起见,对方法400的以下描述参考结合图2A的软件组件200、202、204和206;登录模块308A;图3A-3B的保护动态链接库306B示出的各个元件。从开始框起,方法400前进至一组方法步骤402,它们在继续终端(“终端A”)与退出终端(“终端B”)之间定义。这组方法步骤402描述了模糊用于禁止软件篡改的软件。
从终端A(图4C),方法400前进至框414,在那里为保护动态链接库创建源代码,这具体化为禁止软件篡改的软件。该源代码被编译并链接以创建保护动态链接库(DLL)。见框416。接着,在框418,创建包含类名、方法和字段的模糊控制文件。方法400然后前进至框420,在那里使用保护DLL和模糊控制文件作为输入来执行模糊处理。产生模糊DLL,其中类名、方法、字段和控制流均被模糊化。见框422。模糊处理使保护动态链接库难以由试图反向设计保护动态链接库的黑客调试。模糊处理的一个示例是将跳转指令插入保护动态链接库或对编程指令重新排序。
上述模糊处理是允许在软件汇编中对符号重命名,以便挫败试图为非法目的而反向设计软件的反编译器的众多合适技术之一。模糊处理可增加对非法反编译的保护同时保持应用程序原样。模糊化的目标在于混淆,它使理解软件的多方面智能概念的黑客的头脑负担沉重。当模糊处理不仅使作为黑客的人工编译混淆时,它也可能破坏取决于逻辑确定性的反编译器。模糊处理创造了无数种反编译可能,其一部分导致不正确的逻辑,由此造成编译中的不确定性。
从终端A1(图4D),方法400前进至框426,在那里该方法计算模糊保护DDL的校验和。然后创建分类文件。见框428。分类文件的一种合适实现是数据库。该目录包含每一软件组件的名称、其版本及其签名(例如,校验和)。接着,在框430,模糊保护DLL的校验和被置于分类文件内。方法400然后前进至框432,在那里该方法计算包含模糊保护DLL校验和的分类文件校验和。分类文件校验和也使用私有密钥加密。见框434。换言之,分类文件由私有密钥数字签署。此时,方法400产生可被验证的模糊保护DLL和分类文件。验证协助查明该模糊保护DLL是否来自已知源,诸如特定软件制造商,并查明模糊保护DLL尚未被篡改。方法400然后继续至退出终端B。
从终端B(图4A),方法400前进至一组方法步骤,它们定义在继续终端(“终端C”)与退出终端(“终端D”)之间。这组方法步骤404描述了计算机上对保护动态链接库的设置,它具体化为用于禁止软件篡改的软件。
从终端C(图4E),方法400前进至框438,在那里该方法获取软件的产品标识符,并将其存储在诸如注册表的中央分层数据库中。该产品标识符由用户提供,用户可从一般贴在软件包装上的密钥中获取该标识符。该方法解码产品标识符以标识其中该软件所归类的类。见框440。该软件可包括任何合适的软件,诸如系统软件、应用程序软件或网络软件。接着,在判定框442,进行测试以确定保护是否对所标识的类可用。如果答案为否,则方法400前进至另一继续终端(“终端L”)并终止执行。另一方面,如果对判定框442的测试的答案为是,则方法400前进至框444,在那里调用安装动态链接库。安装动态链接库基于产品标识符将激活密钥安装到诸如注册表的中央分层数据库中。见框446。激活密钥允许计算机在不进行耗时的产品标识符解码的情况下迅速检查并确定用于禁止软件篡改的软件是否在计算机上运行。
从终端C1(图4F),安装动态链接库将加密保护配置文件安装到诸如注册表的中央分层数据库中。在计算机启动之后,执行诸如系统软件的软件的登录模块。见框450。接着,在框452,登录模块对存储在诸如注册表的中央分层数据库中的产品标识符解码,并获取其中该软件所归类的产品类。方法400前进至判定框454,在那里执行测试以确定保护是否对所标识的产品类可用。如果对判定框454的测试的答案为否,则方法400继续至终端L,在那里它终止执行。另一方面,如果对判定框454的测试的答案为是,则登录模块308A尝试将模糊保护动态链接库加载到计算机上。见框456。该方法在另一继续终端(“终端C2”)处继续。
从终端C2(图4G),方法400前进至框458,在那里该方法计算要安装的保护动态链接库的校验和。注意,在下文中,为简洁起见,模糊保护动态链接库将被称为保护动态链接库。该方法获取系统文件中所包括的分类文件的列表。见框460。接着在框462,该方法从列表中取出一分类文件,并搜索该分类文件中所包含的校验和。进行对签名的解密和验证。方法400前进至判定框464,在那里执行测试以确定两个校验和之间是否存在匹配。如果对判定框464的测试的答案为否,则方法400继续至另一继续终端(“终端C3”)。另一方面,如果对判定框464的测试的答案为是,则方法400继续至另一继续终端(“终端C4”)。结合图4G讨论的处理步骤描述了由此验证模糊保护动态链接库的软件映像以确定软件映像的原始性(即,软件映像是否由期望的软件制造商原始装运或分销)的过程。如果已发生了篡改,则验证过程指示要加载的模糊保护动态链接库的软件映像已被篡改,并可能必须采取诸如关闭计算机等安全性出错措施。
从终端C3(图4H),方法400继续至判定框466,在那里执行测试以确定是否存在要搜索的其它分类文件。如果对判定框466的测试的答案为是,则该方法继续至另一终端(“终端C5”)。从终端C5(图4G),方法400循环回至框462,在那里重复上述处理步骤。另一方面,如果对判定框466的测试的答案为否,则方法400继续至框468,在那里要安装的保护动态链接库不是与分类文件同来的原始动态链接库,这意味着它可能已被篡改。方法400然后在另一继续终端(“终端C7”)处继续。从终端C4(图4H),方法400前进至判定框470,在那里执行测试以确定是否存在保护动态链接库和可信的分类文件。如果对判定框470的测试的答案为否,则方法400继续至终端C5,在那里它循环回框462,并重复上述处理步骤。判定框470中所述测试的一种合适实现是由Microsoft Windows提供的一组信任检查应用程序编程接口。否则,如果对判定框470的测试的答案为是,则该方法在另一继续终端(“终端C6”)处继续。
从终端C6(图4I),方法400前进至框472,在那里该方法验证所找到的分类文件,并通过调用一组信任检查应用程序编程接口获取状态数据作为返回值。该方法经由一组信任检查应用程序编程接口使用所获取的状态数据来获取信任供应商信息。见框474。接着,在框476,该方法使用所获取的信任供应商信息从证书链中获取基本签署者。方法400前进至框478,在那里该方法使用基本签署者的环境确认证书链的最后一个元素。执行测试,以确定最后的元素是否包含正确的公共密钥。见判定框480。如果对判定框480的测试的答案为是,则方法400前进至终端C7。另一方面,如果对判定框480的测试的答案为否,则该方法继续至终端C5,在那里它循环回框462,并重复上述处理步骤。
从终端C7(图4J),方法400前进至判定框482,在那里执行测试以确定保护动态链接库是否被成功加载。如果对判定框482的测试的答案为否,则该方法使系统关闭。见框484。方法400前进至终端L并终止执行。另一方面,如果对判定框482的测试的答案为是,则方法400前进至框486,在那里该方法创建在不可终止线程中运行的第一定时器。该方法继续至由继续终端(“终端C8”)和退出终端D表示的两条执行路径。图4J处执行路径的分裂是为了示出运行在计算机上的若干软件的并发性。
从终端C8(图4K),方法400前进至判定框488,在那里执行测试以确定预先配置的时间段是否期满。如果答案为否,则方法400循环回至判定框488,在那里重复上述处理步骤。如果对判定框488的测试的答案为是,则方法400前进至框490,在那里该方法检查存储在诸如注册表的中央分层数据库中的激活密钥以对产品类解码。执行另一测试以确定保护是否对所解码的产品类可用。见判定框492。如果对判定框492的测试的答案为是,则方法400循环回至终端C8,在那里重复上述处理步骤。另一方面,如果对判定框492的答案为否,则核心应用程序编程接口已被篡改,且该方法采取安全性措施,诸如关闭计算机。见框494。方法400然后继续至终端L并终止执行。
从终端D(图4A),方法400前进至一组方法步骤406,它们定义在继续终端(“终端E”)与退出终端(“终端F”)之间。这组方法步骤406确定该计算机是否属于可支持机器类。
从终端E(图4L),方法400前进至框496,在那里该方法验证一组指令在计算机的中央处理单元上的存在性以获取其标识。执行测试以确定这组指令是否可用。见判定框498。如果对判定框498的测试的答案为否,则计算机的中央处理单元具有不支持自标识的体系结构。见框499。一个合适的结论是,中央处理单元能够支持用于禁止软件篡改的软件。方法400然后继续至退出终端F。另一方面,如果对判定框498的测试的答案为是,则登录模块与保护动态链接库通信以访问与被排除在外的中央处理单元类相关的加密保护配置文件。见框497。换言之,存在安装在计算机上的描述计算机操作的各个参数的文件。例如,语言文件描述操作系统向用户呈现信息所使用的语言。作为另一示例,硬件文件描述操作系统支持的计算机。问题在于,文件可能轻易地被黑客或恶意软件篡改。包含在加密保护配置文件中的是表示原始文件被安装在计算机上的校验和。如果原始文件要被篡改,则被篡改文件的校验和与加密保护配置文件中所存储的校验和将不匹配,表示原始文件已被篡改。例如,如果黑客想修改硬件文件以欺骗操作系统来支持不可支持计算机,则经修改的硬件文件的校验和可能与加密保护配置文件中所存储的校验和不同,由此允许对篡改的判断。返回至图4A,登录模块向保护动态链接库传入用于增强安全性的随机盐值。见框495。该随机盐值使得黑客难以战胜或截取功能性启用或调用。如将在下文中所述,随机盐值被用于基于该随机盐值和由保护动态链接库发送的数据计算校验和。将该校验和与由保护动态链接库计算的校验和进行比较,以确定是否已发生了篡改。方法400然后继续至另一继续终端(“终端E1”)。
从终端E1(图4M),方法400前进至框493,在那里保护动态链接库使用私有库密钥对加密保护配置文件(“配置文件”)解密。保护动态链接库将配置文件与该系统进行比较。见框491。接着,在判定框489,执行测试以确定是否已找到配置文件。每一配置文件具有较佳为多个位,诸如64位的名字。如果对判定框489的测试的答案为否,则方法400循环回至框493,在那里重复上述处理步骤。另一方面,如果对判定框489的测试的答案为是,则方法400前进至框487,在那里保护动态链接库计算配置文件的身份、其数据、比较结果以及盐值的校验和。保护动态链接库返回结果数据结构、配置文件的验证者块以及所计算出的校验和。见框485。该方法然后继续至另一继续终端(“终端E2”)。
从终端E2(图4N),方法400前进至框483,在那里登录模块使用私有调用密钥来对验证者块解密并获取验证者校验和。该登录模块使用公共调用密钥确认校验和的签名。见框481。接着,在框479,登录模块根据所解密的验证者校验和、所接收的结果数据结构以及盐值计算校验和。方法400前进至框477,在那里该方法准备好由登录模块和保护动态链接库计算出的校验和。执行测试以确定校验和是否匹配。见判定框475。如果对判定框475的测试的答案为否,则方法400继续至终端L,并终止执行。否则,对判定框475的测试的答案为是,方法400前进至另一继续终端(“终端E3”)。
从终端E3(图4O),方法400前进至框473,在那里该方法从配置文件中提取被排除在外的计算机类的列表。该方法然后使计算机查阅CPU信息(例如,厂商身份、类型、系列、型号、品牌身份以及特征集)。见框471。接着,在判定框469,执行测试以确定厂商身份是否位于被排除在外的列表上。如果对判定框469的测试的答案为否,则方法400继续至终端F。否则,对该测试的答案为是,且该方法继续至另一继续终端(“终端E4”)。
从终端E4(图4P),方法400继续至判定框467,在那里执行测试以确定类型、系列和型号是否位于被排除在外的列表上。如果对判定框467的测试的答案为是,则方法400在另一继续终端(“终端E7”)处继续。否则,如果对判定框467的测试的答案为否,则方法400继续至另一判定框465,在那里执行测试以确定品牌身份和特征集是否位于该被排除在外的列表上。如果对判定框465的测试的答案为是,则方法400继续至终端E7。否则,如果对判定框465的测试的答案为否,则方法400继续至另一继续终端(“终端E5”)。
从终端E5(图4Q),方法400继续至判定框463,在那里执行测试以确定是否存在确定计算机的CPU即中央处理单元的身份的扩展指令。如果对判定框463的测试的答案为否,则该方法继续至终端F。否则,如果对判定框463处的测试的答案为是,则该方法调用扩展的指令以获取计算机的CPU即中央处理单元的名称。见框461。接着,在框459,该方法调用扩展指令以获取中央处理单元的高速缓存的大小。方法400在另一继续终端(“终端E6”)处继续。
从终端E6(图4R),方法400前进至判定框457,在那里执行测试以确定中央处理单元名称是否位于被排除在外的列表上。如果对判定框457的测试的答案为是,则该方法继续至终端E7。如果对判定框457的测试的答案为否,则执行另一测试以确定CPU的高速缓存大小是否位于被排除在外的列表上。见判定框455。如果对判定框455的测试的答案为是,则方法400继续至终端E7。否则,如果答案为否,则方法400继续至终端F。
从终端E7(图4S),该方法发出在计算机上没有可用保护的出错消息,并使系统关闭。见框455。方法400然后继续至终端L,并终止执行。
从终端F(图4B),方法400前进至一组方法步骤408,它们定义在继续终端(“终端G”)与退出终端(“终端H”)之间。这组方法步骤408验证安装文件是否已被篡改。
从终端G(图4S),登录模块与保护动态链接库通信,以访问与计算机上的关键文件相关的加密保护配置文件。见框453。图4L-4N的步骤495-475(以所示次序)在寻找与计算机上的关键文件相关的加密保护配置文件的环境中执行。见框451。接着,在框449,该方法从配置文件中提取关键文件列表。执行测试以确定计算机上的关键文件是否已被改变。见判定框447。如果对判定框447的测试的答案为是,则方法400继续至终端L,并终止执行。否则,对判定框400处的测试的答案为否,则方法继续至终端H。请注意,终端G与终端H之间的处理步骤可并发执行,以便继续检查计算机上的关键文件是否已被改变或篡改。
从终端H(图4B),方法400前进至一组方法步骤410,它们定义在继续终端(“终端I”)与退出终端(“终端J”)之间。这组方法步骤410确定注册表是否已被篡改。
从终端I(图4T),在启动之后,登录模块调用保护动态链接库的保护功能以保护系统环境的注册表的密钥和值。见框445。保护动态链接库创建线程以保护系统环境的注册表的各个密钥和值。见框443。接着,在框441,保护动态链接库向登录模块返回刚创建线程的句柄(handle)。方法400前进至框439,在那里该方法创建定时器来检查保护系统环境处的注册表的密钥和值的线程的持续性。接着,方法400前进至三条独立的执行路径,它们由继续终端(“终端I2”)、判定框437和另一继续终端(“终端I4”)表示。这些独立的执行路径指示并发性。在判定框437执行测试以确定预先配置的时间段是否已期满。如果对判定框437的测试的答案为否,则方法400前进至另一继续终端(“终端I3”),并循环回判定框437,在那里重复上述处理步骤。否则,如果对判定框437的测试的答案为是,则方法400继续至另一继续终端(“终端I1”)。
从终端I1(图4U),方法400前进至判定框435,在那里执行测试以确定线程是否已终止。如果对判定框435的测试的答案为否,则该方法继续至另一判定框433,在那里执行另一测试以确定线程是否被挂起。如果对判定框433的测试的答案为否,则方法400继续至终端I3,并循环回判定框437,在那里重复上述处理步骤。如果对判定框435、433的测试的答案均为是,则方法400前进至框431,在那里系统被认为已被篡改,且该方法使系统关闭。方法400然后继续至终端L并终止执行。
从终端I2(图4V),方法400前进至框429,在那里线程与保护动态链接库通信,以访问要保护的系统注册表的密钥和值的列表。执行图4L-4N的步骤495-475(以示出的次序)。见框427。接着,在框425,线程订阅对任何改变的通知以保护注册表密钥。在判定框423执行测试以确定是否存在对改变的通知。如果对判定框423的测试的答案为否,则该方法循环回判定框423,在那里重复上述处理步骤。否则,对判定框423的测试的答案为是,且该方法修复被篡改的密钥及其值。见框421。方法400然后循环回至判定框423,在那里重复上述处理步骤。
从终端I4(图4W),方法400前进至框419,在那里在用户登录之后,登录模块调用保护动态链接库的保护功能,以保护该用户环境的注册表的密钥和值。保护动态链接库创建线程以保护该用户环境处的注册表的各个密钥和值。见框417。接着,在框415,保护动态链接库向登录模块返回刚创建线程的句柄。方法400前进至框413,在那里该方法创建定时器以检查保护用户环境的注册表的密钥和值的线程的持续性。为该用户环境执行图4T-4U的步骤437-421(以示出的次序)。方法400然后继续至终端J。
从终端J(图4B),方法400前进至一组方法步骤412,它们定义在继续终端(“终端K”)与退出终端(“终端L”)之间。这组方法412确定服务是否已被篡改或是否有未经授权的服务正在执行。从终端K(图4X),在启动之后,登录模块调用保护动态链接库的保护功能以禁止未经授权服务的执行。保护动态链接库创建线程以禁止未经授权服务的执行。见框407。接着,在框405,保护动态链接库向登录模块返回刚创建线程的句柄。方法400然后继续至框403,在那里该方法创建定时器来检查禁止未经授权服务的执行的线程的持续性。执行图4T-4U的步骤437-431。见框401。接着,在框401A,线程与保护动态链接库通信,以访问与未经授权服务的列表相关的加密保护配置文件。方法400然后继续至另一继续终端(“终端K1”)。
从终端K1(图4Y),执行图4L-4N的步骤495-475。在判定框401C执行测试以确定是否有未经授权服务正在运行。如果对判定框401C的测试的答案为否,则方法400继续至另一继续终端(“终端K2”)。否则,如果对判定框401C的测试的答案为是,则方法400前进至框401D,在那里该方法停止依赖于该未经授权服务的所有服务。然后从执行中删除该未经授权的服务。见框401E。
从终端K2(图4J),方法400前进至判定框401F,在那里执行测试以确定是否还有其它未经授权服务。如果对判定框401F的测试的答案为是,则该方法继续至另一继续终端(“终端K3”)。从终端K3(图4Y),方法400循环回判定框401C,在那里重复上述处理步骤。否则,如果对判定框401F的测试的答案为否,则方法400前进至框401G,在那里线程睡眠预先配置的时间段。方法400然后经由终端K3循环回判定框401C,在那里重复上述处理步骤。结合定义在终端K与L之间的这组方法步骤412所描述的步骤较佳地与其它组方法步骤并发地执行。
尽管示出和描述了本发明的较佳实施例,但可理解,可对其进行各种改变,而不背离本发明的精神和范围。