专利名称:用于调节计算机软件的执行的系统和方法
相关申请的交叉引用本发明根据35 U.S.C.§119(3)要求第60/446260号美国临时申请的优先权,后者于2003年2月11日提出,其公开内容通过引用被结合于此。
背景本发明涉及用于调节计算机软件的执行的系统和方法,所述计算机程序具有和这种调节相关的编程结构。
发明内容
这里总结了本发明的优选实施例来突出和介绍本发明的一些方面。在该发明内容中可以作出简化和省略。这种简化和省略不限制本发明的范围。
类编译程序的后处理器程序将现有的应用程序作为输入,对其扫描以找到函数入口点,并且调用入口点。后处理器加密应用中的函数、扰乱和函数代码的位置有关的信息、添加一解密例程、添加篡改检测和响应代码、并且写出部分加密的可执行文件。受保护应用程序内的受保护函数具有信息写入它们的标头,其中的信息将被操作系统解释为非法指令,使得即使模块被解密,函数也不会有效地执行。新的可执行文件正如原始应用一样地启动和表现,但必须有解密密钥以便成功地运行。后处理器可以设立受保护的应用以便直接从用户、从密钥服务器、从文件或通过各种其它手段获得解密密钥。
取代于后处理器,应用的源代码可以在第一实例中被写入,具有编译的和加密的保护特征。
执行控制器(Execution Controller)作为调试器与操作系统交互,并且控制应用的执行。当操作系统检测到受保护的可执行文件中的非法地址、指令或经修改的操作码时,执行控制被转移到调试器/解密例程(下文中称为执行控制器)。
执行控制器自己具有用于管理解密和篡改保护的代码。执行控制器还防止用户加载自己对调试器的例示来控制应用。执行控制器检测是否曾有篡改受保护的可执行文件并响应于篡改的企图。根据已负责应用保护的个人的意愿下,篡改的应用可以或者继续运行,或者以降级方式运行,这种方式会阻碍篡改者或黑客获得和所应用保护性质有关的信息。
在解密的函数已完成执行后,把控制返回到执行控制器,执行控制器或者从操作系统的页空间移去模块的已解密版本,或者对其重新加密。
该方法的一个好处在于,它拒绝了攻击者以解密的形式访问整个应用。使他们在实际上不可能得到这样的信息,所述信息使他们能修改应用使得他们会消除或回避应用的版权所有者或持有人选择应用的保护和/或特征。它在作出篡改或修改受保护程序的企图时提供了检测和对策。所公开的系统和方法的另一优点在于,能够处理现有的计算机软件应用而无须访问源代码或关于内部程序结构的先验知识。
这些及其它目标从附图和这里包含的说明书中将更为明显。
下面将参照附图讨论本发明的优选实施例,附图中图1说明了用于修改应用程序来调节其执行的进程;图2说明了消费者应用程序文件的结构组成和它们向受保护可执行文件的转换;图3说明了用于在用户计算机上运行受保护的应用程序文件的进程环境;以及图4说明了在执行受保护的应用程序时的步骤。
优选实施例的详细描述操作系统(OS)是在执行计算机或网络的任务时作为向导的一组计算机程序或例程。微软公司WindowsTM的各个版本是操作系统的例子,比如Windows 2000TM、Windows NTTM和Windows XPTM。其它操作系统是已知的。
应用程序(AP)是为执行一特定任务、解决一特定问题、生成一特定报告或者更新一特定文件而写成的程序。Microsoft WordTM、Microsoft ExcelTM和MicrosoftPowerPointTM是应用程序的例子。其它应用程序是已知的。
操作系统和应用程序分别会在各个时刻对计算机资源采取控制。操作系统一般在计算机首次启动时对计算机资源采取控制。根据应用程序的设计,操作系统可以将对一些或全部计算机资源的控制转交给应用程序。在多任务操作系统中,操作系统和多个应用程序可以根据操作系统设计、应用程序设计以及外部事件在各个时刻攫取和释放计算机资源。操作系统通常在应用程序终止后重新获得对计算机资源的控制。
许多当今操作系统提供了响应于应用程序的不规则执行的能力。应用程序可能引起一不规则事件,有时称为异常。异常可能由于硬件故障而发生,例如引起非法算术运算,比如除以零。异常也可以由于计算机资源不可用或其它原因而发生。操作系统可能在异常时中断应用程序、对计算机资源采取控制、或者采取其它行动。
许多当今操作系统还提供了帮助调试应用的能力。例如,微软公司的操作系统具有一应用程序接口,该接口有多个和调试相关的函数。应用程序可以用断点的命令来编程。当应用程序执行一断点命令时,操作系统中断应用程序的执行。然后,操作系统把控制转移到调试器应用。(操作系统也可以响应于其它异常事件而把控制传递到调试器应用。)在应用程序被中断时,操作系统会向调试器应用赋予对分配给应用程序的存储单元以及其它计算机资源的访问,包括改变内存中指令的能力。调试器应用可以指示操作系统来恢复应用程序的执行。其它函数根据特定的操作系统是可用的。在一些操作系统中,在一给定时刻仅有一个调试器程序与应用程序相关联。
图1说明了用于修改应用程序来调节其执行的进程。这种调节的目标不是为了调试应用程序,而是把执行限制到授权的用户。例如,创建应用程序的个人或公司可能对其使用收费。或者,可能限制把一些计算机程序出口到美国以外。调节的目的是防止盗版者、黑客、小偷及其它未经授权的用户使用该应用程序,并且检测或响应于篡改。
调节进程的第一部份修改了应用程序可执行的指令序列。图1提供的例子用于已经被编程、调试和编译成可执行文件的应用程序。或者,应用程序可以被最初写入以使用下述的执行调节特征。可执行的应用程序将被称为消费者应用程序文件10。
后处理器程序12分析了消费者应用程序文件10来标识程序内的函数及其它自然划分。概括地说,后处理器程序12基于操作系统的固有性能修改消费者应用程序文件10以包括调节的特征,以便调节应用的执行。
下面进一步讨论了这种特征的例子。后处理器程序12用附加的可执行指令扩大经修改的应用程序。经修改的消费者应用程序文件将被称为受保护的应用程序文件14。
调节进程的第二部份在用户计算机16上执行受保护的应用程序文件14时发生。概括地说,在用消费者应用程序文件10的指令以及用用户计算机16的操作系统进行后处理交互期间,向受保护的应用程序文件14添加可执行指令。受保护的应用程序文件14可以包括能作为一认证进程的一部分通过外部信道17通信的进程,比如与解密密钥服务器18通信。受保护的应用程序文件14还可以包括响应于受保护应用程序文件14的任何检测到的篡改并且把这种篡改报告给授权机构20。
图2说明了消费者应用程序文件10的结构组成以及它们向受保护应用文件14的转换。可执行文件一般具有取决于它们意图工作的处理环境而已定义的结构。在图2的例子中,消费者应用程序文件包括一可执行代码区段22、一数据区段24以及包含其它组成的另一区段26。可执行代码区段22一般包括主例程28和一系列附加例程30。文件可以为其它格式,比如以库的形式。
后处理程序读取消费者应用程序文件10并且标识可执行代码内的自然边界。函数边界可以是跳转点或调用入口点以及返回指令。后处理器追踪可执行文件中的跳转、调用及其它分支或流程控制指令、定位相关的入口点、并检验随后代码中的返回指令。后处理器保存全部函数入口点和函数长度的记录、以及引用函数的任何流程控制指令。在一函数有多个入口点时,后处理器把重叠的函数合并为一个。如果关于消费者应用的先验信息(除了可执行代码本身以外)可供使用,则可以用其它方式来完成标识自然边界的过程。例如,如果源代码可用,则可以手动地检验源代码以标识函数边界,或者如果调试信息可用,则可以扫描调试信息以标识函数边界。
在标识函数后,后处理器把它们的一些或全部加密成密文(cipher-text)函数32。要加密的函数数目可以根据应用的性质而变化。该数目可以是固定百分比的函数。具有最高调用率的函数可以被加密(例如那些从应用程序内的许多不同位置被调用的函数)。也可以选择函数来允许最少的功能,比如启动和读取数据、但不对数据进行写或保存的能力。选择过程无须是自动的。它可以涉及人的干预和分析。
每个函数都分开地加密,可能对各个函数使用不同加密密钥。加密和解密方案可以采用多种加密算法的任一种,比如RSA、MD5、RC4等。加密可以用软件或专用硬件设备来完成。
对于每个密文函数32,后处理器最好用一中断指令37来替换应用程序在其中运行的操作系统、替换密文36a的第一字节或各字节、以及替换明文函数中可能存在的任何次级入口点36c。
后处理器还为每个密文函数32生成一个明文标头34。明文标头34包括这样的信息,所述信息用于标识函数的解密密钥、函数长度、明文(预加密的)函数的校验和以及密文函数的校验和。明文标头的字节可以用多种已知技术的任一种来打乱,比如字节交换或加密。允许解扰码的信息以阻碍检测的方式包括在受保护的应用程序文件中。
后处理器用中断指令37替换一定数量的密文函数。因此,所产生的函数模块会是中断指令37以及一部分密文子例程的组合。最好是,组合模块的总长度会等于原始明文函数的长度。例如,(a)假设明文函数的长度为128字节、(b)加密过程生成了128字节的等长密文函数、以及(c)中断指令为两字节。后处理器程序会替换一定数量的密文函数,其长度等于两字节。
后处理器程序把密文函数36a和36c的所替换的部分保存到可执行文件内的一个已知位置,比如代码区段的结尾处。后处理器还在明文标头内保存一个对所取代密文的偏移(相对地址)。
后处理器把复合函数(即中断指令37和密文部分36b)与称为执行控制器40的一附加程序的函数加以组合。后处理器还可以改变入口点地址以反映移动后的函数。下面将更完整地描述执行控制40的函数。
图3说明了用于在用户计算机上运行受保护的应用程序文件的进程环境。所给出的例子是Microsoft WindowsTM环境。在调用应用程序文件后,用户计算机为受保护的应用程序启动一主进程50。主进程50具有一主线程52,该主线程52立即产出一次级线程54。次级线程54又为执行控制器产出一新的进程56。执行控制器立即作为调试器附着到主进程50。没有其它调试器能附着到主进程50,因为现在附着了执行控制器56。没有调试器能附着到执行控制器56,因为它所产出的核心保护。
在执行控制器附着到主进程50后,主进程的主线程开始执行消费者应用58的例程。然后,执行控制器56会在调试器的操作系统内具有一环境。消费者应用58的例程会有被调试应用的环境。
图4说明了在执行受保护的应用程序时的步骤。如上所述,主进程在1000开始,这又在1005启动了执行控制器。执行控制器在1010作为一调试器附着到主进程。
然后,执行控制器可以在1015从受保护应用程序文件内的标头或其它地方获得密钥索引(密钥标识符)。执行控制器可以在1020从受保护的应用程序文件中检索到被标头所取代的相应密文。
主进程在1025执行消费者应用程序的指令,直到它遇到了受保护函数中的一个断点。断点停止执行主进程的主线程。
在执行控制器第一次遇到加密函数时,执行控制器启动进程1030来认证用户并获得密码密钥。认证进程可以是许多已知认证进程的任一种。一种这样的进程是执行控制器首次向计算机认证用户,比如通过密码、智能卡或其它方法来认证。然后,执行控制器联系一外部服务器并且确认该用户是否被授权使用该应用。
如果用户被授权,执行控制器就从密钥服务器下载或得到受保护应用程序文件的一个或多个解密密钥。密钥服务器用一分开的通信密钥来加密用于传输的密钥。通信密钥可以包括在受保护的应用程序文件内、用一智能卡提供给用户、在与密钥服务器的通信会话期间交互式地开发、或者以某些其它方式获得。执行控制器可以在一个或多个通信会话中得到全部的解密密钥。执行控制器可以以其它方式得到密钥,比如从受保护的应用程序本身当中得到、从提供给用户的智能卡中得到、或从其它信源得到。执行控制器用许多已知保护技术的任一种来保存解密密钥。执行控制器也可以得到加密密钥以便用在下述重新加密函数中。
在遇到断点时,在1035,执行控制器检验任一前面解密的消费者应用函数,并且清除或重新加密已完成执行的任何函数。执行控制器可以通过把主进程主线程的指令计数器和活动函数的入口点和返回点的映射图相比较,从而确定任何这样的函数是否已完成。执行控制器可以用密文版本来覆写已完成的例程。密文可以从长期存储器中检索到,或者被保留在更容易由执行控制器存取的存储器中。如果函数的性质包括改变局部变量,则执行控制器能用当前的变量值来重新加密该模块。重新加密可以用专用硬件设备上的软件来完成。
在用户认证和函数重新加密后(如果有的话),执行控制器在1040检验最新遇到的函数是否有篡改。执行控制器验证校验和,比如明文函数和密文函数的校验和。也可以使用其它篡改检测方案。
在1045,如果执行控制器检测到篡改,它就采取各种响应的任一种。一个响应是激活所谓的“染色分组(dye packet)”。染色分组是帮助证实未经授权的活动的代码,比如通过向一授权机构发送一报告。执行控制器可以传送一报告,该报告标识了用户、其中检测到篡改的应用、以及检测到的篡改的性质(例如未通过的明文校验和)。执行控制器也可以或临时或永久地终止应用的执行。这一终止可以在检测后的一个随机时间完成,以便限制对攻击者可用的关于篡改检测方法的信息。执行控制器甚至能从永久存储器中删除受保护的应用。
在没有检测到篡改时,执行控制器在1050检索函数的解密密钥。执行控制器从适当的替换字节以及函数的未被标头信息所覆写的加密字节中构成一密文缓冲器。执行控制器在1055对密文函数进行解密,并且把明文指令写回主进程主线程的指令存储器。执行控制器重置指令计数器以继续执行。主进程通常会用明文指令继续执行。
在1025,主进程主线程继续执行,直到它遇到另一个断点。与此同时,主进程会再次停止,并且通知执行控制器。执行控制器重复以下步骤在1035重新加密已完成的函数、在1040、1045检测和响应于篡改、以及在1050、1055解密最新遇到的函数。这一进程在消费者应用程序的执行过程中重复。
注意到,上面提供的例子仅仅是为说明起见,而不应被解释为限制本发明。虽然已经参照特定的实施例描述了本发明,然而可以理解,这里使用的词汇是描述和说明性的,而不是限制性的。在以上公开范围内可以作出变化,而不背离本发明各方面的精神和范围。尽管这里已经参照特定的装置、材料和实施例描述了本发明,然而本发明不限于上述的细节,而是应该扩展为全部功能上等效的结构、方法和用涂。
权利要求
1.一种用于修改应用计算机程序的进程,所述应用计算机程序以未更改的方式被配置为在第一电子执行环境内执行,所述进程包括标识所述应用计算机程序的子区段的边界;把所述应用计算机程序的所述子区段修改成一形式,该形式在第一电子执行环境内执行时触发在不同于所述第一执行环境的第二电子执行环境的调用;以及结合所述应用计算机程序控制信息能够在第二执行环境中执行所述应用计算机程序。
2.如权利要求1所述的进程,其特征在于,所述子区段的边界是一流程控制指令。
3.如权利要求1所述的进程,其特征在于,所述第一执行环境是一计算机操作系统,所述第二执行环境是一调试环境。
4.如权利要求3所述的进程,其特征在于,修改所述应用计算机程序的所述子区段的步骤包括添加一指令的步骤,该指令使所述操作系统把执行控制转移到所述调试环境。
5.如权利要求1所述的进程,其特征在于,修改所述应用计算机程序的所述子区段的步骤包括对所述应用计算机程序文件的所述子区段的至少一部分进行加密的步骤。
6.如权利要求5所述的进程,其特征在于,修改所述应用计算机程序的所述子区段的步骤还包括把所述子区段的所述已加密部分的至少一部分重新定位到一位置的步骤,这一位置不同于所述应用计算机程序的相应未更改子区段的位置。
7.如权利要求1所述的进程,其特征在于,修改所述应用计算机程序的所述子区段的步骤包括为应用计算机程序增加与不在第一或第二执行环境内的远程进程通信的功能的步骤。
8.如权利要求7所述的进程,其特征在于,所述远程进程是授权应用计算机程序的继续执行的进程。
9.如权利要求8所述的进程,其特征在于,所述远程进程是一密码密钥管理进程。
10.如权利要求7所述的进程,其特征在于,所述应用计算机程序传送与所述计算机应用程序的执行有关的信息。
11.如权利要求10所述的进程,其特征在于,所述信息是与所述计算机应用程序的篡改有关的信息。
12.一种用于执行应用计算机程序的装置,包括具有一操作系统的计算机;具有形式为不可执行的一不可执行部分的应用计算机程序;以及提供和所述操作系统所不同的执行环境的执行控制器,所述执行控制器用于把所述应用程序的不可执行部分转换成可执行的形式。
13.如权利要求13所述的装置,其特征在于,所述应用计算机程序的不可执行部分包括一加密的部分。
14.如权利要求13所述的装置,其特征在于,所述应用计算机程序包括能与不在操作系统或执行控制器内的远程进程通信的一部分。
15.如权利要求14所述的装置,其特征在于,所述远程进程是授权所述应用计算机程序的继续执行的进程。
16.如权利要求15所述的装置,其特征在于,所述远程进程是一密码密钥管理进程。
17.如权利要求14所述的装置,其特征在于,所述应用计算机程序包括能够向远程进程传送和所述计算机应用程序的执行有关的信息的一部分。
18.如权利要求17所述的装置,其特征在于,与所述计算机应用程序的执行有关的信息是与计算机应用程序的篡改有关的信息。
19.一种用于执行计算机应用程序的进程,包括以下步骤启动一操作系统;启动一应用计算机程序,所述应用计算机程序具有形式为不可执行的一不可执行部分;启动一执行控制器,所述执行控制器提供了和所述操作系统所不同的执行环境、并能把所述应用计算机程序的不可执行部分转换成能执行的形式;以及在所述执行控制器的执行环境内执行所述应用计算机程序。
20.如权利要求19所述的进程,其特征在于,所述执行控制器作为一调试器而启动。
21.如权利要求19所述的进程,其特征在于,所述计算机应用程序的不可执行部分是处于加密的形式。
22.如权利要求19所述的进程,其特征在于,所述应用计算机程序与不在操作系统或执行控制器内的远程进程通信。
23.如权利要求22所述的进程,其特征在于,所述远程进程是密码密钥管理进程的一部分。
24.如权利要求19所述的进程,其特征在于,所述应用计算机程序向远程进程传送和应用计算机程序的执行有关的信息。
25.如权利要求24所述的进程,其特征在于,所述信息是与所述应用计算机程序的篡改有关的信息。
全文摘要
一种用于调节应用程序的执行的方法包括准备应用的进程和执行应用的进程。准备进程把应用程序分成相关的分段,并且对至少一个分段的指令加密。准备进程把加密的指令放在一可执行文件内的至少两个不连续的区域中。标头标识了一解密密钥以及其它不连续区域的位置。因此,所产生的执行文件有这样的部分,所述部分不会执行而且不会使操作系统调用一响应性的进程。执行进程在至少一部分应用指令仅以加密形式可供计算机应用时开始执行受保护的应用。用户被认证,其后可以解密被加密的部分并且继续执行。进程也可以包括检测和响应于篡改的能力、通过调试器阻止执行监听的能力。
文档编号G06F1/26GK1836209SQ200480003709
公开日2006年9月20日 申请日期2004年2月11日 优先权日2003年2月11日
发明者D·A·彭萨克, D·C·梅里尔 申请人:Vi实验室有限公司