在执行期间验证软件代码的完整性的方法和设备技术

技术编号:6060386 阅读:269 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种自修改软件代码,包括多个模块(F1,F2),每个模块在所述软件代码的执行期间能够被修改为处于多个可能状态(S1,S1)。为了验证这样的代码的完整件,计算所述代码的不同状态。对于每个状态,针对代码的至少一部分产生校验和(例如,散列值)。在执行期间改变(320)代码的状态,从而修改(330)模块(F1,F2),使用代码的状态的校验和来执行(340)完整性校验。校验和可以存储在查找表(434)中,或者可以嵌入在完整性验证函数中。可以使用对模块的状态加以指示的状态变量(S)来对表(434)中的校验和进行查找。模块的可能状态是加密的和未加密的。还提供了一种用于产生受保护的软件代码(430)的设备(420)。

Method and apparatus for verifying integrity of software code during execution

The present invention provides a self modifying software code that includes a plurality of modules (F1, F2), each module capable of being modified to be in multiple possible states (S1, S1) during execution of the software code. To verify the integrity of such code, the different states of the code are calculated. For each state, a checksum is generated for at least a portion of the code (for example, hash values). During execution, change (320) the state of the code, thereby modifying (330) the module (F1, F2), and performing the integrity check using the checksum of the state of the code (340). Checksum can be stored in the lookup table (434), or it can be embedded in the integrity verification function. You can use the state variable (S) to indicate the status of the module to lookup the checksum in table (434). The possible state of the module is encrypted and unencrypted. A device (420) for generating protected software code (430) is also provided.

【技术实现步骤摘要】

本专利技术总体涉及软件,具体涉及确保软件的完整性。
技术介绍
本部分旨在向读者介绍可能与以上描述和/或要求保护的本专利技术的各方面有关的技术的各方面。相信这些论述有助于为读者提供背景信息,以更好地理解本专利技术的各方面。相应地应理解,这些陈述应当就此而论,而不应被看作是对现有技术的认可。相对常见的是,软件提供商保护计算机程序的完整性,以确保程序如所期望的那样运行。然而,黑客常常试图攻击程序以便以不同方式来执行。例如,黑客有时希望修改代码以避开程序的访问控制特征,从而能够在没有对程序的必要访问权的情况下使用程序。确保程序完整性的现有方法是计算代码的至少一些部分上的签名(也称作校验和)。签名可以是例如散列(hash)值,其中,在代码的一部分上计算出所述散列值,然后使用密钥来对所述散列值签名。本领域技术人员应理解,也存在许多其他可能情况。在程序执行期间,至少一次计算代码的签名。为了提高安全等级,计算签名的函数是嵌套的(nested),使得每个函数的完整性由至少一个其他函数来验证。因此,如果只有一个函数保持完整,则该函数将检测对至少一个其他函数的篡改。例如在US 2003/188231 和EP 194M31中可以找到其他细节和说明,US 2002/138748阐述了如何确定可重定位石马(relocatablecode)的完整性。在 D. Aucsmith, Tamper Resistant Software AnImplementation, Proceedings of the International Workshop onlnformation Hiding中可以找到类似的解决方案,其中,加密的完整性函数被解密,然后用于验证特定未加密模块的完整性。如所期望的,已经找到了攻克这种保护的方式,不是被黑客,而是被学术界 Glen Wurster 等人的"A Generic Attack on ChecksummingBased on Software Tamper Resistance“ ;in SP' 05 !Proceedings of the2005IEEE Symposium on Security and Privace ;pages 127-138, Washington DC, USA,2005 ;IEEE Computer Society。Glen master等人的方法使用代码的两个副本一个副本是未修改的版本,另一个副本已被修改的版本。执行代码的已修改副本,每当需要校验和时,就使用代码的未修改副本来计算校验和。因此,该方法使得可以修改代码而同时可以提供正确的校验和,即,与未修改的代码相对应的校验和,但应当承认并不是在所有种类的处理器上都能够执行这种攻击。Wurster等人提出的对策是改变对包含代码的页面的访问权。如果对于代码自身也去除了对该代码的访问权,则这会引起中断(例如,在代码试图读取该代码自身时),其中所述中断可以被钩住(hook)以提供未修改的代码。另一个问题是,现有技术的校验和不适合代码的自修改,因为特定的校验和仅对代码的一个版本(即,修改之前或修改之后)有效。因此,可以理解,需要一种改进的解决方案来确保软件代码的完整性,尤其是自修改的代码的完整性。本专利技术提供了这样的解决方案。
技术实现思路
第一方面,本专利技术提供了一种在自修改软件代码的执行期间验证所述自修改软件代码的完整性的方法。所述软件代码包括多个模块,每个模块在所述软件代码的执行期间能够处于至少两种可能状态(加密的和未加密的)。执行所述软件代码的处理器执行以下操作通过将多个模块之一从第一状态变换到第二状态来修改所述软件代码;以及通过将修改后的软件代码与修改后的软件代码的校验和相比较,来验证所述软件代码的完整性。在第一优选实施例中,校验和是散列值。 在第二优选实施例中,校验和嵌入在对模块的完整性加以验证的函数中。在第三优选实施例中,校验和包含在查找表中。有利地,对修改后的软件代码的完整性加以验证的函数使用状态变量来访问查找表中的校验和,其中状态变量指示多个模块中每个模块的状态。第二方面,本专利技术提供了一种用于在自修改软件代码的执行期间验证所述自修改软件代码的完整性的设备。所述软件代码包括多个模块,每个模块在所述软件代码的执行期间能够处于至少两种可能状态(加密的和未加密的)。所述设备包括处理器,所述处理器适于执行所述软件代码,从而通过将多个模块之一从第一状态变换到第二状态来修改所述软件代码;以及通过将修改后的软件代码与修改后的软件代码的校验和相比较,来验证所述软件代码的完整性。在第一优选实施例中,校验和是散列值。在第二优选实施例中,校验和嵌入在对模块的完整性加以验证的函数中。在第三优选实施例中,校验和包含在查找表中。有利地,对修改后的软件代码的完整性加以验证的函数使用状态变量来访问查找表中的校验和,其中状态变量指示多个模块中每个模块的状态。第三方面,本专利技术提供了一种用于产生完整性受保护的自修改二进制码的设备。 所述二进制码包括多个模块,每个模块在所述二进制码的执行期间能够处于至少两种可能状态(加密的和未加密的)。所述设备包括处理器,所述处理器适于执行以下操作接收二进制码;针对处于每种状态的二进制码产生校验和;以及通过将至少一个校验和验证函数以及所产生的校验和插入到二进制码中来产生完整性受保护的二进制码,每个校验和函数适于通过将二进制码的状态与二进制码的状态的校验和相比较来验证完整性受保护的二进制码的每个状态的完整性。在第一优选实施例中,处理器还适于以嵌套的形式来插入多个校验和验证函数, 使得在执行期间,每个校验和验证函数的完整性由至少一个其他校验和验证函数来验证。第四方面,本专利技术提供了一种计算机程序产品,在所述计算机程序产品上存储有自修改的、完整性受保护的二进制码,所述自修改的、完整性受保护的二进制码在被处理器执行时执行本专利技术第一方面的方法的步骤。第五方面,本专利技术提供了一种计算机程序产品,在所述计算机程序产品上存储有指令,所述指令在被处理器执行时执行以下操作针对二进制码的每个状态产生校验和,所述二进制码包括多个模块,每个模块在所述二进制码的执行期间能够处于至少两种可能状态,其中所述可能状态是加密的和未加密的;以及通过将至少一个校验和验证函数以及所产生的校验和插入到二进制码中来产生完整性受保护的二进制码,每个校验和函数适于通过将二进制码的状态与二进制码的状态的校验和相比较来验证完整性受保护的二进制码的每个状态的完整性。附图说明现在将参考附图以非限制性示例来描述本专利技术的优选特征,其中图1示出了示例计算设备,在所述示例计算设备上可以实现本专利技术;图2是示出了本专利技术优选实施例的状态图;图3示出了根据本专利技术优选实施例的完整性验证方法;图4示出了二进制码的保护;以及图5示出了示例状态转移图。具体实施例方式图1示出了示例计算设备(“计算机”)100,在所述示例计算设备100上可以实现本专利技术。计算机100可以是能够执行计算的任何种类的合适计算机或设备,例如,标准个人计算机(PC)。计算机100包括至少一个处理器110、RAM存储器120、用于与用户交互的用户接口 130、以及用于从数字数据支持(digital data support) 150本文档来自技高网
...

【技术保护点】
1.一种在自修改软件代码的执行期间验证所述自修改软件代码的完整性的方法,所述软件代码包括多个模块(F1,F2),每个模块在所述软件代码的执行期间能够处于至少两种可能状态(S1,S1),其中可能状态是加密的和未加密的,所述方法由执行所述软件代码的处理器(110)来执行,所述软件代码使处理器执行以下步骤:-通过将多个模块(F1,F2)之一从第一状态(S1)变换(320,330)到第二状态(S1)来修改所述软件代码;以及-通过将修改后的软件代码与修改后的软件代码的校验和相比较,来验证(340)所述软件代码的完整性。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:查理·萨尔蒙勒加尼厄安东尼·蒙西弗罗特
申请(专利权)人:汤姆森许可贸易公司
类型:发明
国别省市:FR

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1