保护软件项目的制作方法

文档序号:11142295阅读:356来源:国知局
保护软件项目的制造方法与工艺

本发明涉及用于计算机执行软件项目(item of software)的方法、用于使计算机能够执行软件项目的方法,以及用于执行这样的方法的装置和计算机程序。



背景技术:

众所周知的是经常针对软件项目发起攻击。攻击者可能希望获得包含在软件项目内的秘密信息(诸如加密密钥),其目的是为了滥用该秘密信息(例如通过将加密密钥分发给其他人/系统,使得那些人/系统可以以未授权方式使用加密密钥)。类似地,攻击者可能希望修改软件项目的执行流程。例如,软件项目可具有决策点,其检查软件项目的用户是否具有某些许可或访问权限——如果用户具有那些许可或访问权限,则软件项目可准予对某些功能或数据的用户访问,否则拒绝这样的访问。攻击者可能希望尝试在此决策点处修改软件项目的执行,使得即使用户不具有许可或访问权限,软件项目仍准予对该某些功能或数据的用户访问。

攻击者可用的工具或分析技术之一是所谓的“静态程序分析”——针对关于其的更多信息,参见http://en.wikipedia.org/wiki/Static_program_analysis(其全部公开被通过引用并入本文中)。WO2013/116918(其全部公开被通过引用并入本文中)描述了一种用于帮助保护软件项目对抗基于静态程序分析的攻击的方法,如下面讨论的那样。

附图中的图5示意性地图示了WO2013/116918的方法如何操作。特别地,计算机500包括处理器510。软件项目520要由处理器510执行。软件项目520被布置成与地址系统550通信。在图5中,地址系统550被示出为与计算机500分离的实体,使得地址系统550可以经由网络(未在图5中示出)与软件项目520通信。然而,地址系统550可以替代地是由同一计算机500执行的系统(诸如一个或多个计算机程序或模块),使得软件项目520和地址系统550可以是由处理器510执行的软件应用程序或模块或库。

图5的地址系统550是WO2013/116918的所谓的“受信任地址服务器”。

假设软件项目的代码或指令包括引起软件项目的执行从当前执行地址跳至不同的执行地址的程序语句或命令。特别地,程序语句或命令引起执行(或调用或启用(invoke)或实行)预定函数(function)。如本文中使用的那样,术语“函数”将被理解成意味着程序函数、程序过程、程序子例程或任何其它代码块中的任何。程序语句或命令可以包括显式过程调用或显式函数调用。程序语句或命令可以替代地是引起软件项目的执行从当前地址跳至新地址(在那里存在针对预定函数的指令)的任何其它操作或指令(诸如GOTO语句)。正常地,当处理器执行这样的软件项目并到达在其处要执行预定函数的软件项目中的点时,调用或启用预定函数的程序语句或命令通过使程序执行跳至预定函数的指令的地址(或位置)并在其处继续来引起处理器继续软件项目的执行——这可以例如使用常规调用/执行栈来处理。然而,利用WO2013/116918的方法,改变了用于调用并执行预定函数的方法。特别地:

(a)在软件项目520中,利用替换代码来替换调用或启用预定函数的程序语句或命令,所述替换代码在由处理器510执行时引起将“地址请求”发送至地址系统550。地址请求是包含预定函数的标识符(诸如唯一标识代码或与预定函数相关联且适合于标识预定函数的某其它数字或标签或标号或名称)的消息。

(b)地址系统550包括数据库560(或表格或列表或某其它数据结构),其针对一个或多个标识符存储对应地址。地址系统550在接收到地址请求时针对对应于地址请求中的标识符的记录搜索数据库560——因此,地址系统550使用其数据库560来标识(或确定)对应于所接收到的地址请求中的标识符的地址。地址系统550然后将所确定的地址返回至软件项目520。

(c)布置软件项目520中的替换代码使得在从地址系统550接收到所确定的地址时,软件项目520的执行在所确定的地址处继续或跳至其处。

利用上面的过程,静态程序分析基本上更难,因为攻击者不能够确定替换代码将执行什么函数(或哪组指令或代码)(因为在其处执行继续的所确定的地址仅由地址系统550在运行时间提供给软件项目520)。



技术实现要素:

将期望的是提供对抗由攻击者进行的攻击的改进的复原力(resilience)。

根据本发明的第一方面,提供了一种用于计算机执行软件项目的方法,该方法包括:计算机执行一个或多个安全模块;计算机执行软件项目,所述执行软件项目包括在执行软件项目期间在其处要执行预定函数的至少一个点处尝试通过以下来执行预定函数:向地址系统发送对用于执行预定函数的指令的地址的请求,该请求包括预定函数的标识符;响应于该请求从地址系统接收由地址系统至少部分地基于以下生成的地址:(a)标识符以及(b)从一个或多个安全模块中的至少一个提供给地址系统的验证数据;以及在从地址系统接收到的地址处继续执行软件项目。

在某些实施例中,该方法包括一个或多个安全模块中的至少一个响应于从地址系统接收到对验证数据的请求而向地址系统提供验证数据。替换地,在某些实施例中,该方法包括一个或多个安全模块中的至少一个周期性地向地址系统提供验证数据。

根据本发明的第二方面,提供了一种促进由计算机执行软件项目的方法,该方法包括地址系统执行以下步骤:从计算机接收对用于执行软件项目的预定函数的指令的地址的请求,该请求包括预定函数的标识符;从由计算机执行的一个或多个安全模块中的至少一个接收验证数据;至少部分地基于(a)标识符以及(b)验证数据生成地址;将所生成的地址提供给计算机,用于计算机在所提供的地址处继续执行软件项目。

在某些实施例中,该方法包括响应于接收到对地址的请求向一个或多个安全模块中的至少一个发送对验证数据的请求。该方法可以进一步包括基于标识符标识要向其发送对验证数据的请求的一个或多个安全模块中的至少一个。替换地,在某些实施例中,该方法包括周期性地从一个或多个安全模块中的至少一个接收验证数据。

在某些实施例中,生成地址包括:通过至少部分地基于验证数据执行散列来生成散列值;以及将所生成的散列值与预定补偿值组合以生成结果,其中地址系统存储与标识符相关联的预定补偿值;其中基于结果生成地址。地址可以是结果的预定部分。地址可以等于结果。在某些实施例中,该方法进一步包括对结果执行检错操作,并且:如果在结果中没有检测到错误,则将地址生成为结果的至少部分;如果在结果中检测到了至少一个错误,则将地址设置成预定地址。可以布置预定地址使得在预定地址处继续软件项目的执行引起软件项目执行以下中的至少一个:(a)停止软件项目的执行;(b)向软件项目的提供者或另一实体提供通知;(c)阻止软件项目的未来执行;(d)确保由软件项目输出的数据被毁坏。通知可以包括标识计算机和/或计算机的用户的数据。在某些实施例中,散列进一步至少部分地基于标识符。在某些实施例中,将所生成的散列值与预定补偿值组合包括将所生成的散列值与预定补偿值进行异或(XOR)。

在本发明的第一和第二方面的某些实施例中,一个或多个安全模块中的每个被布置成执行相应的安全相关操作。相应的安全相关操作可以包括以下中的一个或多个:(a)与软件项目相关的软件许可处理;(b)阻止软件项目在除了计算机之外的设备上执行;(c)认证软件项目;(d)认证软件项目的用户;(e)授权对软件项目的使用;(f)提供对抗对软件项目的攻击的对策;(g)检测对软件项目的攻击。

在本发明的第一和第二方面的某些实施例中,验证数据包括取决于一个或多个安全模块中的至少一个的当前状态的一个或多个值。

在本发明的第一和第二方面的某些实施例中,验证数据包括基于一个或多个软件部分的散列的散列值,其中每个软件部分为软件项目的相应部分或者一个或多个安全模块中的一个的相应部分。

在本发明的第一和第二方面的某些实施例中,验证数据包括表示计算机的一个或多个性质的数据。计算机的一个或多个性质可以包括以下中的一个或两个:(a)计算机的标识号;(b)计算机的型号类型。

在本发明的第一和第二方面的某些实施例中,地址系统在计算机上执行。

根据本发明的第三方面,提供了一种装置,其被布置成执行上面提及的方法中的任何一个。

根据本发明的第四方面,提供了一种计算机程序,其在由处理器执行时引起处理器执行上面提及的方法中的任何一个。计算机程序可以被存储在计算机可读介质上。

附图说明

现在将参考附图仅通过示例的方式描述本发明的实施例,在所述附图中:

图1示意性地图示了计算机系统的示例;

图2示意性地图示了根据本发明的实施例的系统;

图3示意性地图示了根据本发明的实施例的系统;

图4a是根据本发明的实施例的示意性地图示了操作图3的系统的方法的流程图;

图4b是根据本发明的实施例的示意性地图示了配置地址系统的方法的流程图;以及

图5示意性地图示了WO2013/116918的方法如何操作。

具体实施方式

在随后的描述中和在图中,描述了本发明的某些实施例。然而,将领会的是,本发明不限于所描述的实施例,并且某些实施例可以不包括下面描述的特征中的全部。然而,将明显的是,可以在本文中做出各种修改和改变而不脱离如在所附权利要求中阐述的本发明的更宽泛的精神和范围。

1-系统概述

图1示意性地图示了计算机系统100的示例。系统100包括计算机102。计算机102包括:存储介质104、存储器106、处理器108、接口110、用户输出接口112、用户输入接口114和网络接口116,其全部被通过一个或多个通信总线118链接在一起。

存储介质104可以是任何形式的非易失性数据存储设备,诸如硬盘驱动、磁盘、光盘、ROM等中的一个或多个。存储介质104可存储用于处理器108执行以便使计算机102运转的操作系统。存储介质104还可存储一个或多个计算机程序(或软件或指令或代码)。

存储器106可以是适合于存储数据和/或计算机程序(或软件或指令或代码)的任何随机访问存储器(存储单元或易失性存储介质)。

处理器108可以是适合于执行一个或多个计算机程序(诸如存储在存储介质104上和/或存储器106中的那些)的任何数据处理单元,所述一个或多个计算机程序中的某些可以是根据本发明的实施例的计算机程序或者在被处理器108执行时引起处理器108执行根据本发明的实施例的方法并将系统100配置成是根据本发明的实施例的系统的计算机程序。处理器108可包括单个数据处理单元或者并行地或相互协作地操作的多个数据处理单元。处理器108在执行用于本发明的实施例的数据处理操作中可以将数据存储到存储介质104和/或存储器106和/或从存储介质104和/或存储器106读取数据。

接口110可以是用于提供到计算机102外部的或可从计算机102移除的设备122的接口的任何单元。设备122可以是数据存储设备,例如光盘、磁盘、固态存储设备等中的一个或多个。设备122可具有处理能力——例如,该设备可以是智能卡。接口110因此可根据其从处理器108接收的一个或多个命令从设备122访问数据或向设备122提供数据或者与设备122对接。

用户输入接口114被布置成从系统100的用户或操作者接收输入。用户可经由系统100的被连接到用户输入接口114或与之通信的一个或多个输入设备(诸如鼠标(或其它指向设备)126和/或键盘124)来提供该输入。然而,将领会的是,用户可经由一个或多个附加或替换输入设备(诸如触摸屏)向计算机102提供输入。计算机102可将经由用户输入接口114从输入设备接收到的输入存储在存储器106中以用于处理器108随后访问和处理,或者可将其径直传递至处理器108,使得处理器108可以相应地对用户输入进行响应。

用户输出接口112被布置成向系统100的用户或操作者提供图形/视觉和/或音频输出。同样地,处理器108可被布置成指示用户输出接口112形成表示期望的图形输出的图像/视频信号,并将该信号提供给系统100的被连接到用户输出接口112的监视器(或屏幕或显示单元)120。附加地或替换地,处理器108可被布置成指示用户输出接口112形成表示期望的音频输出的音频信号,并且将该信号提供给系统100的被连接到用户输出接口112的一个或多个扬声器121。

最后,网络接口116提供用于计算机102从一个或多个数据通信网络下载数据和/或向一个或多个数据通信网络上传数据的功能。

将领会的是,在图1中图示并在上面描述的系统100的架构仅仅是示例性的,并且在本发明的实施例中可使用具有不同架构(例如具有比图1中所示更少的组件或者具有除图1中所示之外的附加和/或替换组件)的其它计算机系统100。作为示例,计算机系统100可以包括以下中的一个或多个:个人计算机;服务器计算机;移动电话;平板电脑;膝上计算机;电视接收机;机顶盒;游戏控制台;其它移动设备或消费者电子设备等。

图2示意性地图示了根据本发明的实施例的系统200。系统200包括:软件生成系统210;软件保护系统250;用户系统280;以及网络290。

软件生成系统210包括(或者执行或使用)生成初始软件项目220的软件生成工具212。软件生成工具212可以是例如软件生成系统210的处理器执行的软件应用程序。软件生成系统210可被布置成自主地生成初始软件项目220;附加地或替换地,软件生成系统210可被布置成在至少部分地写形成初始软件项目220的部分的软件代码的一个或多个软件开发者的控制下生成初始软件项目220。用于生成或开发软件项目的工具是众所周知的,并且因此在本文中将不较详细地描述。

初始软件项目220可包括源代码、目标代码、可执行代码和二进制代码中的一个或多个。可以用一个或多个编程语言对初始软件项目220进行编程或写,所述一个或多个编程语言可包括编译编程语言和/或解释或脚本编程语言。初始软件项目220可包括一个或多个模块或软件组件或计算机程序,其可被呈现或存储在一个或多个文件内。实际上,初始软件项目220可以是整个软件应用程序、软件库,或一个或多个软件函数或过程的整体或部分,或者之间的任何地方(如由本领域技术人员将领会的那样)。

初始软件项目220在被处理器执行时被布置成执行(或者引起处理器执行)基于一个或多个数据项的数据处理。每个数据项可以分别地是任何类型的数据,诸如音频数据、视频数据、多媒体数据、文本数据、财务数据、一个或多个加密密钥、数字权限管理数据、条件访问数据等。数据处理可包括以下中的一个或多个:(a)至少部分地基于一个或多个数据项中的至少一个的决定;(b)安全相关功能;(c)访问控制功能;(d)加密功能;以及(e)权限管理功能。然而,将领会的是,除上面的示例之外或作为对上面的示例的替换,数据处理可包括一个或多个其它类型的功能或操作。作为一个示例,数据处理可涉及提供对被接收和/或存储为加密内容的内容(诸如音频和/或视频数据)的用户访问,其中只有当用户具有适当的访问许可/权限时才为用户提供对内容的访问。一个或多个数据项因此可包括:加密内容;关于用户和/或用户系统280的细节或其标识;指定一个或多个许可和/或权限的数据;以及一个或多个加密密钥(其可以被存储为初始软件项目220的部分)。因此,期望的是保护初始软件项目220,使得攻击者不能以未授权方式使用初始软件项目220以从而即使攻击者未被授权访问内容也获得对内容的访问,即阻止攻击者(例如,通过确定一个或多个解密密钥或者避开初始软件项目220中的涉及是否应为用户提供对内容的访问的决策点或分支点)绕过由初始软件项目220提供的条件访问和/或数字权限管理功能。将领会的是,当然存在初始软件项目220可以执行的其它功能和/或初始软件项目220使用的初始软件项目220将(出于类似或可能替换的原因)期望保护其免于攻击者的其它信息。因此,如图2中所示,初始软件项目220被提供(或传输或传送)至软件保护系统250。

软件保护系统250包括(或者执行或使用)软件保护工具252。软件保护工具252可以是例如软件保护系统250的处理器执行的软件应用程序。软件保护工具252被布置成接收初始软件项目220作为输入。软件保护工具252基于接收到的初始软件项目220而生成受保护的软件项目260。稍后将会描述软件保护工具252用来生成受保护的软件项目260的方法。

软件生成系统210和软件保护系统250可被不同的实体运行或操作。因此,如图2中所示,软件保护系统250可将受保护的软件项目260输出到软件生成系统210。用此模型,软件保护系统250向软件生成系统210提供保护服务。替换地,软件生成系统210和软件保护系统250可被同一实体运行或操作——实际上,软件生成系统210和软件保护系统250可以形成单个系统的部分(在图2中通过虚线270示出),其使用软件生成工具212来生成初始软件项目220并且其使用软件保护工具252以通过生成受保护的软件项目260来保护该初始软件项目220。

因此,软件生成系统210和/或软件保护系统250可经由网络290将受保护的软件项目260输出(或提供或传送)到用户系统280。然而,将领会的是,受保护的软件项目260的分发可由图2中未示出的不同实体执行。

还将领会的是,受保护的软件项目260可在已经由软件保护系统250生成受保护的软件项目260之后且在到用户系统280的分发之前经历各种附加处理。因此,将领会的是,在以下描述中,对受保护的软件项目260的分发或使用的引用包括由对受保护的软件项目260应用附加处理而引起的软件块的分发或使用。例如,受保护的软件项目260可能需要被编译和/或与其它软件项目链接(例如,如果受保护的软件项目260将形成要分发到用户系统280的较大软件应用程序的部分的话)。然而,将领会的是,可能不要求这样的附加处理(例如,如果受保护的软件项目260是准备好用于分发的JavaScript的最终块的话)。

网络290可以是适合于向用户系统280传送或传输受保护的软件项目260的任何种类的数据通信网络。因此,网络290可包括以下中的一个或多个:局域网、广域网、城域网、因特网、无线通信网、有线或线缆通信网、卫星通信网、电话网等。软件生成系统210和/或软件保护系统250可被布置成经由任何适当的数据通信协议经由网络290与用户系统280通信。实际上,可经由物理介质(诸如被存储在一个或多个CD或DVD上)将受保护的软件项目260提供给用户系统280,使得网络290于是可以包括用于将物理介质在物理上递送给用户系统280的递送系统。

用户系统280被布置成例如通过在用户系统280的一个或多个处理器上执行受保护的软件项目280来使用受保护的软件项目260。

用户系统280可以是适合于执行受保护的软件项目280的任何系统。因此,用户系统280可以是以下中的一个或多个:个人计算机、膝上计算机、笔记本、平板计算机、移动电话、机顶盒、电视、服务器、游戏控制台等。软件保护系统250和软件生成系统210可例如包括一个或多个个人计算机和/或服务器计算机。因此,用户系统280、软件保护系统250和软件生成系统210中的每个可包括如上面参考图1描述的一个或多个相应系统100。

将领会的是,虽然图2将系统200图示为包括单个用户设备280、单个软件生成系统210以及单个软件保护系统250,但系统200可包括多个用户设备280和/或多个软件生成系统210和/或多个软件保护系统250。

图3示意性地图示了根据本发明的实施例的系统300。系统300包括:计算机310;地址系统350;以及网络370。

计算机310可以是任何数据处理装置,并且因此可以是如上面参考图1描述的计算机系统100。计算机310包括处理器312。处理器312被布置成执行软件项目320和一个或多个安全模块330。在图3中,图示了3个安全模块(被标注为330-a、330-b和330-c)——当然,将领会的是,处理器310可以执行任何数目的安全模块330。

软件项目320可以包括源代码、目标代码、可执行代码和二进制代码中的一个或多个。可用一个或多个编程语言对软件项目320进行编程或写,所述一个或多个编程语言可包括编译编程语言和/或解释或脚本编程语言。软件项目320可包括一个或多个模块或软件组件或计算机程序,其可被呈现或存储于一个或多个文件内。实际上,软件项目320可以是整个软件应用程序、软件库,或一个或多个软件函数或过程的整体或部分或者之间的任何地方(如由本领域技术人员将领会的那样)。

每个安全模块330是被布置成执行(或引起处理器312执行)与软件项目320相关的相应的安全相关操作的软件项目。由安全模块330执行的安全相关操作可以例如包括以下中的一个或多个:(a)与软件项目320相关的软件许可处理;(b)阻止软件项目在除了计算机310之外的设备上执行(即,节点锁定功能);(c)认证软件项目320;(d)认证软件项目320的用户;(e)授权对软件项目320的使用;(f)提供对抗对软件项目320的攻击的对策;以及(g)检测对软件项目320的攻击。然而,将领会的是,安全模块330可以被布置成执行(或引起处理器312执行)用以帮助保护软件项目320的任何其它功能(诸如任何数字权限管理或条件访问功能)。上面提及的安全相关或保护操作是众所周知的,并且因此在本文中将不被较详细地描述。

在某些实施例中,安全模块330中的一个或多个可以被布置成与软件项目320交互——在图3中,安全模块330-a和330-c被示出为与软件项目320交互。例如,安全模块330-a可以是软件许可模块,并且软件项目320可以被布置成与软件许可模块330-a协作以确保软件项目320的某功能仅被提供给用户,如果该用户已经获得了有效许可的话。在某些实施例中,安全模块330中的一个或多个可以被布置成不与软件项目320交互——在图3中,安全模块330-b被示出为不与软件项目320交互。例如,安全模块330-b可以是监视是否正关于软件项目320执行软件调试器的模块,并且如果是这样,则将其视为针对软件项目320的可能攻击;作为另一示例,安全模块330-b可以是确定计算机310的身份或计算机310的型号/类型并输出对其的指示的模块。因此,软件项目320可以完全地与安全模块330中的一个或多个分离;附加地或替换地,软件项目320可以与安全模块330中的一个或多个链接或与其组合(诸如是同一软件应用程序的部分)。此外,因为安全模块330的操作/运转和安全模块330与软件项目320的交互(或在某些情况下,不交互)是众所周知的,所以这除了在对理解本发明的实施例来说有必要的情况下在本文中将不被较详细地描述。

软件项目320是所准备的受保护的软件项目260,并且被提供给计算机310,如上面参考图2描述的那样(因此,图3中所示的计算机310可以与图2中所示的用户系统280相同)。应用于或提供给软件项目320的保护的性质将从下面的讨论变得显而易见。在某些实施例中,安全模块330中的一个或多个与软件项目320一起被提供给计算机310,例如作为软件套件或作为软件应用程序的模块或库。在某些实施例中,安全模块330中的一个或多个可能在计算机310接收到软件项目320之前就已经存在于计算机310上或者对计算机310可用。

在图3的系统300中,地址系统350被布置成经由网络370与计算机310(或者更具体地,软件项目320以及安全模块330中的一个或多个)通信。网络370可以是适合于在计算机310和地址系统350之间传送数据的任何种类的数据通信网络。因此,网络370可包括以下中的一个或多个:局域网、广域网、城域网、因特网、无线通信网、有线或线缆通信网、卫星通信网、电话网等。计算机310可以被布置成经由任何适当的数据通信协议经由网络370与地址系统350通信。

地址系统350包括地址生成模块352和数据库354。地址系统350可以包括一个或多个计算机系统(诸如图1的计算机系统100中的一个或多个)。例如,地址系统350可以包括一个或多个服务器,在该情况下,地址生成模块352可以包括由一个或多个服务器的一个或多个处理器执行的一个或多个计算机程序或模块;一个或多个服务器可以经由任何常规手段存储数据库354。

然而,在某些实施例中,地址系统350可以是计算机310的部分——例如,地址生成模块352可以包括由计算机310的处理器312执行的一个或多个计算机程序或模块,其中计算机310经由任何常规手段存储数据库354。在该实施例中,系统300不需要网络370,因为在软件项目320(以及安全模块330中的一个或多个)与地址系统350之间的通信可以在计算机310内内部地发生。

软件项目320和地址系统350以与上面参考WO2013/116918描述的方式类似的方式一起操作。特别地:

·以初始软件项目220开始,初始软件项目220(以及受保护的软件项目260还有320)包括用于执行预定函数的代码或指令。该预定函数可以在由处理器310执行时被布置成实行任何期望的功能。如上面提及的那样,术语“函数”将被理解成意味着程序函数、程序过程、程序子例程或者任何其它代码块或指令中的任何。

·初始软件项目220的代码或指令包括引起初始软件项目220的执行从当前执行地址跳至不同的执行地址的程序语句或命令。特别地,程序语句或命令当由处理器处理时引起执行(或调用或启用或实行)预定函数。程序语句或命令可以包括显式过程调用或显式函数调用。程序语句或命令可以替代地是引起初始软件项目220的执行从当前地址跳至新地址(在那里存在针对预定函数的代码或指令)的任何其它操作或指令(诸如GOTO语句)。

·软件保护工具252被布置成以与在WO2013/116918中相同的方式生成受保护的软件项目260、320。特别地,软件保护工具252利用替换代码来替换初始软件项目220中的调用或启用预定函数的程序语句或命令,所述替换代码在由处理器310执行时引起将“地址请求”发送至地址系统350。地址请求是包含预定函数的标识符(诸如唯一标识代码或与预定函数相关联且适合于标识预定函数的某其它数字或标签或标号或名称)的消息。该消息的内容可以仅为标识符。

·替换代码也被布置成使得在从地址系统350接收到地址时受保护的软件项目260、320的执行在所接收到的地址处继续或跳至其处。

因此,软件保护工具252可以使用在WO2013/116918中描述的用于形成/实现替换代码并用于将替换代码包括到初始软件项目220中以生成受保护的软件项目260、320的方法和技术中的任何。

本发明的实施例至少在地址系统350如何生成地址方面与WO2013/116918不同。

已关于初始软件项目220的特定的预定函数和对该预定函数的特定调用阐述了上面的描述。当然,将领会的是,上面的描述(以及以下描述)可以被应用于对预定函数的多个分离的调用,并且实际上,可以关于多个不同的预定函数被应用。

2-由地址系统对地址的生成

图4a是根据本发明的实施例的示意性地图示了操作系统300的方法400的流程图。

如上面提及的那样,在步骤410处,在软件项目320的执行期间(即,运行时间),软件项目320向地址系统350发送地址请求。地址请求包括现在在软件项目320的执行的当前阶段处期望其执行的软件项目320的预定函数的标识符。

在步骤415处,地址系统350的地址生成模块352从软件项目320接收地址请求。

在步骤420处,地址生成模块352从数据库354检索对应于在地址请求中包含的标识符的数据记录,即,地址生成模块352使用地址请求中的标识符作为到数据库354中的索引以检索对应数据记录。

图3图示了保持/存储在数据库354中的数据记录的示例结构。当然,将领会的是,可以替代地使用其它结构来实现如下面讨论的相同功能。

存储在数据库354中的每个数据记录对应于相应的标识符。因为每个标识符对应于软件项目320中相应的函数,所以存储在数据库354中的每个数据记录有效地对应于软件项目320中的相应的函数。如在图3中所示,对应于标识符的数据记录存储与该标识符相关联的“补偿值”。将简短地描述补偿值的性质和目的。数据记录可以可选地包括数据的一个或多个进一步字段或量。例如,如图3中所示,数据记录中的一个或多个可以存储安全模块330中的一个或多个的标识。

在某些实施例中,步骤420仅包括地址生成模块352从数据库354检索来自对应于地址请求中包含的标识符的数据记录的一个或多个字段——例如,步骤420可以仅包括地址生成模块352从数据库354检索对应于地址请求中包含的标识符的补偿值。

在步骤425处,地址系统350(或地址生成模块352)向安全模块330中的一个或多个发送请求。被发送给安全模块330中的一个或多个的(一个或多个)请求是对“验证数据”的请求。将简短地描述“验证数据”的性质和目的。

在某些实施例中,向正在计算机310上执行的安全模块330中的全部发送对验证数据的请求。在替换实施例中,向正在计算机310上执行的安全模块330的子集发送对验证数据的请求。向其发送对验证数据的请求的(一个或多个)安全模块330的特定集合可以被预定,即,可以使用(一个或多个)安全模块330的默认集合。向其发送对验证数据的请求的(一个或多个)安全模块330的特定集合可以与地址请求中的标识符无关。替换地,在某些实施例(如在图3中所示)中,数据库354中的对应于地址请求中的标识符的记录可以存储安全模块330中的一个或多个的标识,并且对验证数据的请求被发送到这些经标识的(一个或多个)安全模块330;如果数据库354中的对应于地址请求中的标识符的记录没有标识任何安全模块330,则可以向(一个或多个)安全模块330的预定/默认集合发送对验证数据的请求。

因此,在步骤430处,安全模块330中的一个或多个接收对验证数据的请求。

在步骤435处,在步骤430处接收到对验证数据的请求的一个或多个安全模块330中的每个返回(或发送或提供)相应的验证数据给地址系统350。为此,安全模块330中的一个或多个可能需要生成其相应的验证数据。由安全模块330输出的验证数据可以包括一个或多个验证值,如下面描述的那样。

在某些实施例中,由安全模块330生成并输出的验证值可能取决于一个或多个安全模块330中的至少一个的当前“状态”。该验证值可以取决于不同的安全模块330的当前状态(在该情况下,正在输出验证值的安全模块330可以被视为“监视”其它安全模块330的状态);附加地或替换地,该验证值可以取决于正在输出验证值的安全模块330的当前状态。

安全模块330的状态可能涉及安全模块330的当前操作条件,例如:安全模块330是否正在如正常/预期的那样操作或者是否发生了(或正发生)一个或多个错误;安全模块330现在是否具有当前许可或过期许可;安全模块330的版本;安全模块330的操作可以被视为有限状态机,在该情况下,安全模块330的状态可以是有限状态机中的当前状态的指示;等等。安全模块330的状态可能涉及安全模块330的安全相关功能,例如:如果安全相关功能涉及针对被执行的潜在攻击来检查或监视软件项目320(以及潜在地其自身和/或其它安全模块330),则安全模块330的状态可以指示是否检测到了攻击;如果安全相关功能涉及授权或认证操作,则安全模块330的状态可能涉及授权或认证是否在某点处失败,或在给定的时间段内失败的授权或认证尝试的数目;如果安全相关功能涉及检查一个或多个其它安全模块330正在执行,则安全模块330的状态可能涉及那些一个或多个其它安全模块330是否确实正在执行;等等。

将领会的是,存在安全模块330的许多其它可能状态。

如果安全模块330被布置成输出(或提供)取决于一个或多个安全模块330中的至少一个的当前状态的验证值,则安全模块330被布置成如下设置验证值。如果验证值要取决于其的(一个或多个)状态全部是当前正常/预期/合法状态,例如将在计算机300在没有攻击存在(或已被执行)的情况下执行软件项目320的情况下被预期的状态,并且所有安全模块320正在适当地执行且是最新的,则验证值被设置成是预定值。然而,如果验证值要取决于其的(一个或多个)状态中的一个或多个当前不是正常/预期/合法状态(例如,许可过期了,或者检测到了攻击,或者打算执行的特定安全模块330实际上没在执行),则安全模块330被布置成设置验证值使得其为除上面中的预定值之外的值。如果验证值为预定值则其将是“正确的”验证值;否则,其将是“错误的”验证值。因此,地址系统330仅在计算机300正以安全/预期的未受攻击的方式操作时接收正确的验证值。

预定值可以是任何值。不同的安全模块330可以使用不同的预定值。

在某些实施例中,以类似方式,由安全模块330生成并输出的验证值可以取决于软件项目320的当前“状态”。

在某些实施例中,由安全模块330生成并输出的验证值可以是(或者可以基于)一个或多个软件部分的(加密)散列,其中每个软件部分是软件项目320的相应部分或者一个或多个安全模块330中的相应的一个的相应部分。“部分”可以是整个软件项目320或整个相应的安全模块330。散列是众所周知的,并且因此将不在本文中详细描述。然而,概括地说:散列是生成散列值的算法,所述散列值是从一些输入数据(其可以是任意大小的)通过散列导出的固定长度(即,固定位数)的值;布置散列使得甚至对输入数据的量(quantity)的小的改变都导致在散列值中的显著改变;布置散列使得确定将导致特定散列值的输入数据的量是不可行的;散列通常是基于或根植于加密密钥。因此,例如,安全模块330中的一个可以被布置成使用散列函数计算散列值,其中散列的输入包括来自软件项目320和/或来自安全模块330中的一个或多个的一个或多个预定部分。这些预定部分可能涉及攻击者可能希望(例如,通过攻击者利用替换代码/指令替换软件项目320的部分或者安全模块330的部分)攻击并且因此期望针对其检查是否已经对预定部分中的一个或多个做出了修改的功能。如果预定部分尚未被修改,则正在生成散列值的安全模块330将生成对应于在那些预定部分中的原始/正确代码/指令的散列值——作为结果的验证值将在本文中被称为“正确的”验证值。另一方面,如果预定部分中的一个或多个被修改了,则正在生成散列值的安全模块330将生成不对应于在那些预定部分中的原始/正确的代码/指令的散列值——作为结果的验证值将在本文中被称为“错误的”验证值。

在某些实施例中,由安全模块330生成并输出的验证值可以是(或者可以基于)表示计算机310的一个或多个性质的数据,诸如(a)计算机310的标识号和/或(b)计算机310的类型或型号。因此,安全模块330可以被布置成确定计算机310的这些一个或多个性质。软件项目320可能意图在特定计算机310上执行——因此,如果验证值基于计算机310的标识号,则(a)如果软件项目320正在原始意图的特定计算机310上执行,则验证值将是“正确的”验证值;否则(b)如果软件项目320没有正在原始意图的特定计算机310上执行,则验证值将不是“正确的”验证值并且将因此是“错误的”验证值。附加地或替换地,软件项目320可能意图在特定类型或型号的计算机310上执行(例如,特定型号的移动电话,或者软件项目320应在台式计算机而不是平板计算机或者移动设备上执行,等等)——则,如果验证值基于计算机310的型号或类型,则(a)如果软件项目320正在原始意图的型号或类型的计算机310上执行,则验证值将是“正确的”验证值;否则(b)如果软件项目320没有正在原始意图的型号或类型的计算机310上执行,则验证值将不是“正确的”验证值并且因此将是“错误的”验证值。

当然,将领会的是,安全模块330可以生成并输出其它验证值,包括其它类型的验证值。一般而言,如果验证值是软件项目320的提供者(或某其它实体,诸如地址系统350的操作者)在正常(或正确/有效/授权)操作条件下预期接收的值则其是“正确的”验证值;否则,验证值为“错误的”验证值,其指示软件项目320可能未在正常(或正确/有效/授权)操作条件下执行。

在步骤440处,地址系统350从安全模块330中的一个或多个接收验证数据。

因此,如上面描述的那样,地址系统350响应于地址系统350向一个或多个安全模块330请求验证数据而从那些一个或多个安全模块330接收验证数据。然而,在替换实施例中,安全模块330中的一个或多个(以及潜在地所有)可以被布置成周期性地向地址系统350提供验证数据,在该情况下,地址系统350不向这样的安全模块330发送对验证数据的请求(并且因此至少关于该安全模块330省略步骤425和430)。自然地,如果地址系统350还没有从安全模块330接收到这样的周期性验证数据,则地址系统350仍可以被布置成向该安全模块330发送对验证数据的请求。

在步骤445处,地址系统350的地址生成模块352基于在步骤440处接收的验证数据并基于在步骤420处检索(或获得)的补偿值生成地址。将简短地描述用于完成这点的方法。

在步骤450处,地址系统350的地址生成模块352向软件项目320提供(或发送或输出)所生成的地址。

在步骤455处,软件项目320从地址系统350接收所生成的地址。

在步骤460处,处理器312在步骤455处接收到的地址处继续软件项目320的执行。

然后,我们转向在步骤445处通过其生成地址的方法。在下文中,令通过V1,……,Vn(其中n≥1)来表示在步骤440处接收到的验证数据中的(一个或多个)验证值,并且令通过C来表示步骤420处检索到的补偿值。然后,地址生成模块352使用函数F来基于V1,……,Vn和C生成地址A,即,A=F(V1,……,Vn,C)。选择补偿值C使得如果验证值V1,……,Vn中的全部都为正确验证值,则作为结果的地址A为针对期望被执行的软件项目320的预定函数的指令的地址,反之如果验证值V1,……,Vn中的一个或多个是错误验证值,则作为结果的地址A不是(或者至少非常不可能是)针对期望被执行的软件项目320的预定函数的指令的地址。

作为示例,函数F可能涉及:

(ⅰ)基于验证值V1,……,Vn生成第一值H。例如,第一值H可以是通过对验证值V1,……,Vn的集合执行一个或多个散列而生成的散列值。然而将领会的是,可以使用其它函数根据验证值V1,……,Vn生成第一值H(例如,对验证值V1,……,Vn一起执行异或,或者将验证值V1,……,Vn乘到一起,或者执行对验证值V1,……,Vn的某多项式组合,或者上面中的任何的某组合,等等)。第一值H也可以基于一个或多个其它数据值,诸如在地址请求中接收到的标识符。例如,第一值H可以是通过对验证值V1,……,Vn的集合与标识符一起执行一个或多个散列而生成的散列值。

(ⅱ)使用组合函数W将第一值H与补偿值C组合以生成结果值R,即R=W(H,C)。优选地选择组合函数W使得在给定目标结果值R'和特定第一值H'的情况下,可以标识补偿值C'使得R'=W(H',C')。作为示例,函数W可能涉及对第一值H与补偿值C进行异或,使得R=H⊕C。作为另一示例,R=W(H,C)=H+C。将领会的是,可以以类似方式使用其它组合函数W。

(ⅲ)然后可以将地址A标识为结果值R的整体或者部分。例如,地址A可以是从结果值R中取的b位(例如,前b位),其中b为要由地址系统350输出的地址的位尺寸。补偿值C的目的在于,当验证值V1,……,Vn全部为正确的验证值时,由补偿值C调整作为结果的第一值H以便得到从其可获得地址A的结果值R。补偿值C还是攻击者不知道的秘密数据,这使得对攻击者来说更难以成功地攻击软件项目320。

然而将领会的是,可以使用用于生成地址A的其它函数F。在某些实施例中,补偿值是可选的——特别地,可以设置针对正确的验证值的值使得地址A是可直接从上面提及的第一值H导出的(例如,作为上面提及的第一值H的整体或部分)。

因此,地址的生成至少部分地基于从安全模块330中的一个或多个获得的验证数据。

类似地,地址的生成至少部分地基于地址请求中的标识符(例如,由于地址系统350基于标识符来标识要向其发送对验证数据的请求的(一个或多个)安全模块330和/或由于地址系统350获得与标识符相关联的补偿值)。

因此,如果所接收到的验证值V1,……,Vn中的全部都为正确的验证值,则在软件项目320的执行在针对期望的预定函数的代码/指令处重新开始(resume)的情况下,软件项目320的正常执行继续。同样地,如果所接收到的验证值V1,……,Vn中的一个或多个是错误验证值,则软件项目320的正常执行不继续,因为在步骤450处返回至软件项目320的地址不是用于针对期望的预定函数的代码/指令的正确地址。

在某些实施例中,结果值R包括根据纠错码或检错码编码的地址A。例如,结果值R可以包括地址A和循环冗余检查值。因此,步骤445可以包括生成结果值R和(基于纠错码和检错码)对结果值R执行检错操作。如果没有检测到错误,则如上面阐述的那样从结果值R获得地址A;如果检测到错误,则地址生成模块352现在知道了验证值V1,……,Vn中的一个或多个是错误验证值并且地址生成模块352因此可以被布置成使要被返回至软件项目320的地址设置成预定地址。可以例如布置该预定地址使得在预定地址处继续软件项目320的执行引起软件项目320执行以下中的至少一个:

(a)停止软件项目320的执行——例如,预定地址可以是软件项目320中的(潜在地温和地)终止软件项目320的执行的函数的地址。

(b)向软件项目320的提供者或向另一实体提供通知——例如,预定地址可以是软件项目320中的引起输出这样的通知的函数的地址。该通知可以例如包括标识计算机310和/或计算机310的用户的数据,以从而促进跟踪或标识攻击者。

(c)阻止软件项目320的未来执行——例如,预定地址可以是引起删除用于软件项目320的一个或多个重要的代码或数据项的函数的地址。

(d)确保由软件项目320输出的数据被毁坏——例如,在预定地址处的软件项目320的执行可以引起软件项目320修改一个或多个数据值和/或执行毁坏由软件项目320输出的数据(从而致使软件项目320对于攻击者来说无用)的一个或多个操作步骤。

在某些实施例中,如果安全模块330未能响应于来自地址生成模块352的请求而提供验证数据,则任何(a)预期从该安全模块330返回的验证值可以被设置成预定错误值和/或(b)在步骤445处生成的地址可以被设置成是上面提及的预定地址。

图4b是根据本发明的实施例的示意性地图示了配置地址系统350的方法470的流程图。针对软件项目320中的每个预定函数执行方法470,针对其以上面阐述的方式保护对该预定函数的调用。

在步骤480处,如上面讨论的那样生成软件项目320。在该阶段处,软件项目320可以是以准备好用于到终端用户(即,到计算机310)的分发的形式。因此,可以在非常晚的阶段处(例如,在软件项目320已经被编译、链接和绑定之后)执行方法470的随后步骤。这使得本发明的实施例特别灵活并且易于并入到软件产品链中。

在步骤482处,做出关于(要由计算机310执行的)一个或多个安全模块330中的那个(哪些)应被涉及到预定函数或与预定函数结合地使用,即,安全模块330中的那个(哪些)应被用于提供用于图4a的步骤425、430、435和440的验证数据。该决定可以基于任何准则(诸如什么安全模块330将实际上在计算机310处可用,应在确定是否应允许预定函数的执行时检查或执行什么类型的安全相关功能,等等)。因此,标识一个或多个安全模块330。

在步骤484处,确定所标识的安全模块330应输出的(一个或多个)正确的验证值。例如,如果所标识的安全模块330要输出基于特定安全模块330的状态或软件项目320的状态的验证值,则可以标识指示特定安全模块330的状态或软件项目320的状态是正常状态的验证值。这可以是例如与安全模块330相关联的预定值。类似地,如果安全模块330要输出基于代码的一个或多个部分的散列的验证值,则因为代码的那些一个或多个部分将在“未受攻击”/“安全”的背景中可用,所以可以通过执行散列来确定正确的验证值。类似地,如果安全模块330要输出基于计算机310的一个或多个性质的验证值,则可以基于用于目标计算机310的一个或多个性质的实际值来确定验证值。

在步骤486处,可以基于软件项目320中的针对预定函数和所确定的正确验证值的地址来确定针对该预定函数的补偿值C。如上面阐述的那样,选择补偿值C使得如果在步骤440处接收到的验证值V1,……,Vn中的全部都为正确验证值,则通过计算A=F(V1,……,Vn,C)而得出的地址A为针对软件项目320的预定函数的指令的正确地址。在其中从结果值R(其中R=H⊕C)确定地址A的上面的示例中,则:(a)可以选择针对结果值R的目标值R'使得A是可从目标值R'获得的;(b)可以基于所标识的正确验证值来确定针对值H的正确值H';以及(c)可以将补偿值C设置成C=R'⊕H'。自然地,如果在图4a的步骤445处以不同方式使用补偿值C,则可以在图4b的步骤486处以对应不同的方式确定补偿值C。

在步骤488处,更新数据库354。特别地,在数据库354中包括存储与软件项目320将(在地址请求中)用于预定函数的标识符相关联的补偿值C的记录。记录还可以存储在步骤482处标识出的一个或多个安全模块330的标识。

如在图4b中所示,方法470可以包括在执行步骤488之后返回至步骤486。例如,软件项目320可以包括多个预定函数并且可以通过改变针对该特定标识符的数据库354中的记录中的补偿值来改变或选择将响应于具有特定标识符的地址请求而执行哪个预定函数。因此,如果期望将软件项目320布置成从执行第一预定函数变成执行第二预定函数,则仅需要计算将导致地址系统350生成针对第二预定函数的地址的新的补偿值C,并且然后用新的补偿值C更新数据库354中的记录。

如图4b中所示,方法470可以包括在执行步骤488之后返回至步骤482。特别地,可能期望的是改变在步骤482处做出的对一个或多个安全模块330的选择——例如,这可能是由于在安全模块330中的更新、要使用的新的安全模块330的包括以及安全模块330从计算机300的移除(或者停止对在计算机300处的安全模块330的信赖)。

可以由地址系统350的操作者执行方法470。该操作者可以是使用软件保护工具252来生成软件项目320的实体,或者其可以是不同的实体。

3-修改

将领会的是,所描述的方法已被示为按照特定顺序执行的单独步骤。然而,技术人员将领会到这些步骤可被组合或者按照不同的顺序执行,同时仍实现期望的结果。

将领会的是,可使用多种不同的信息处理系统来实现本发明的实施例。特别地,虽然图及其讨论提供了示例性计算系统和方法,但是这些被呈现仅为了在讨论本发明的各种方面时提供有用参考。可在任何适当的数据处理设备上执行本发明的实施例,所述数据处理设备诸如个人计算机、膝上型计算机、个人数字助理、移动电话、机顶盒、电视、服务器计算机等。当然,已出于讨论的目的简化了系统和方法的描述,并且其仅是可被用于本发明的实施例的许多不同类型的系统和方法中的一个。将领会的是,逻辑块之间的边界仅仅是说明性的,并且替换实施例可将逻辑块或元素合并,或者可对各种逻辑块或元素施加功能的替换分解。

将领会的是,可将上面提及的功能实现为一个或多个对应模块,如硬件和/或软件。例如,可将上面提及的功能实现为一个或多个软件组件以用于由系统的处理器执行。替换地,可将上面提及的功能实现为硬件,诸如在一个或多个现场可编程门阵列(FPGA)和/或一个或多个专用集成电路(ASIC)和/或一个或多个数字信号处理器(DSP)和/或其它硬件布置上。如上面描述的方法步骤中的每个可由对应的相应模块实现;多个方法步骤可一起由单个模块实现。

将领会的是,在由计算机程序实现本发明的实施例的情况下,则承载计算机程序的存储介质和传输介质形成本发明的方面。计算机程序可具有一个或多个程序指令或程序代码,其在被计算机执行时实现本发明的实施例。如本文中使用的术语“程序”可以是被设计用于在计算机系统上执行的指令序列,并且可包括子例程、函数、过程、模块、对象方法、对象实现、可执行应用程序、小应用程序、小服务程序、源代码、目标代码、共享库、动态链接库和/或被设计用于在计算机系统上而设计的其它指令序列。存储介质可以是磁盘(诸如硬驱或软盘)、光盘(诸如CD-ROM、DVD-ROM或蓝光盘)或存储器(诸如ROM、RAM、EEPROM、EPROM、闪存或便携式/可移除存储器设备)等。传输介质可以是通信信号、数据广播、两个或更多计算机之间的通信链路等。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1