首页> 中国专利> 提供用于抗攻击的遍及应用的相依性网络的系统和方法

提供用于抗攻击的遍及应用的相依性网络的系统和方法

摘要

提供了一种用来自动地将相依性从软件应用的一部分传播到另一个以前不相关的部分的方法和系统。到程序的其它部分的基本代码功能和数据的传播用来用混合布尔算术(MBA)公式增大普通算术函数,所述混合布尔算术(MBA)公式被绑定到程序的先前存在的部分。首先在编译级上分析软件应用以确定在程序中保持的程序属性。此后,基于这些属性构造条件,并在公式中对这些条件进行编码,所述公式以数据和运算对该条件进行编码。因此创建遍及应用的真实相依性,使得如果相依性被破坏,则程序将不再正确地运行。

著录项

  • 公开/公告号CN103858128A

    专利类型发明专利

  • 公开/公告日2014-06-11

    原文格式PDF

  • 申请/专利权人 耶德托公司;

    申请/专利号CN201180071105.0

  • 发明设计人 C.利姆;Y.周;Y.X.古;

    申请日2011-03-24

  • 分类号G06F21/10;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人蒋骏

  • 地址 荷兰霍夫多普

  • 入库时间 2023-12-17 00:20:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-06-16

    授权

    授权

  • 2015-09-02

    著录事项变更 IPC(主分类):G06F21/10 变更前: 变更后: 申请日:20110324

    著录事项变更

  • 2014-07-09

    实质审查的生效 IPC(主分类):G06F21/10 申请日:20110324

    实质审查的生效

  • 2014-06-11

    公开

    公开

说明书

版权通知

该专利文献的公开内容的一部分包含受版权保护的材料。版权拥有者不反对专利文献或专利公开内容中的任何一个的影印复制,因为它出现在了官方的专利文件或记录中,但保留任何另外的所有版权权利。

技术领域

本发明一般涉及隐蔽和抗篡改的软件保护。更特别地,本发明涉及软件应用的保护,借此将隐蔽和抗篡改技术相组合以形成高度相依的编码,以便由此增加对攻击的抵抗,所述高度相依的编码具有遍及受保护应用的自动编排的相依性的积极设置。

背景技术

在不断成长的计算机软件产业中,由攻击者(例如,软件黑客)对有价值且敏感的软件应用的未经授权或未获执照的流氓使用的许多示例存在。此外,因为在现场部署新的软件应用,所以它们的基础程序代码的模块化的、基于功能的结构经常使这样的软件应用容易成为代码盗用和数据盗用攻击的目标。

当前软件保护技术通常集中在两个主要防御区域,包括隐蔽和抗篡改。隐蔽通常涉及提供用于对攻击者隐藏敏感资产和功能的机构。抗篡改通常涉及提供这样的一种机构,借此如果部分的软件被攻击者更改,则受保护软件反应异常。然而,这些技术中的任意一个都不足以解决代码盗用和数据盗用攻击。

例如,仅通过从攻击者的应用调用可用函数,动态链路库(DLL)在流氓上下文中可以容易被识别并重新使用。可替换地,函数或代码片断可以被从原始程序盗用并在攻击者程序中重新使用。此外,一旦数据的使用被攻击者识别,则数据可以容易地从可执行文件的部分或者从待读取的数据文件中被提取,并且根据黑客的应用被使用,而不管正被使用的数据量。仍进一步的,即使软件应用的设计者能够使程序的技术细节(mechanics)模糊,确定的攻击者可以盗用调用功能的汇编代码,并且此后在他自己的流氓软件应用中重新实现该代码。存在黑客工具(例如,反汇编程序和反编译程序),其有助于攻击该软件的这个过程。

软件保护的另一个示例包括已知的节点锁定方法,其将程序绑定到特定装置,借此取得来自一片硬件的唯一标识符(ID),并且使程序取决于给定的ID。这可以是装置密钥的计算,所述装置密钥通过使用如介质访问控制(MAC)地址、硬件磁盘ID和其它指纹信息的硬件标识符来构造。使用这些标识符的以产生密钥的算法可能是函数和数据的精心设计的过程。然而,最后,整个代码和数据的集合对盗用攻击而言是易受攻击的。

所以,期望提供包括改善的抗篡改和隐蔽属性的抗攻击能力。

发明内容

本发明的目标是排除或减轻以前的软件保护机构的至少一个缺点。

本发明涉及一种提供遍及软件应用的相依性网络以增加对这种软件应用的抗攻击能力的系统和方法。该系统和方法包括相组合的抗篡改和隐蔽机构,规定了生成在这种软件应用之下且抗攻击的高度相依的代码。一般地,通过本发明提供遍及软件应用的自动编排的相依性的积极设置。更重要的是,这些相依性防止给定软件应用的任何部分(即,包括例如代码部分或软件模块的子部分)独自进行使用。除了抗篡改属性以外,本发明技术包括隐蔽属性,其使识别并移除插入在给定软件应用中的相依性变得困难。

在第一方面,本发明提供了一种用于提供遍及软件应用的抗攻击能力的方法,所述方法包括:识别软件应用的关键资产,所述关键资产由一个或多个预定程序属性组成;将程序属性函数关联到所述关键资产中的对应一个;根据用户定义的容限调整所述关联步骤;在所述软件应用的一个或多个点处,根据所述程序属性函数生成所计算的程序属性;以及针对所述一个或多个预定程序属性中的对应一个校验所计算的程序属性。

在进一步方面,本发明提供了一种用于提供遍及软件应用的抗攻击能力的方法,所述方法包括:从所述软件应用的中间编译器表示中连同原始数据和程序相依性一起识别关键资产;根据用户特定标准对所述关键资产进行优先化;使所述原始数据和程序相依性与所述优先化的关键资产相关;获得用于所述软件应用的用户特定控制容限;关于所述用户特定标准和所述用户特定控制容限,将新的数据和程序相依性元素插入所述软件应用的中间编译器表示中,以形成替换的中间表示;以及从替换的中间表示生成变换后的软件应用;其中,所述变换后的软件应用包括增强的相依性网络,其提供增加的抗攻击能力。

又在另一个方面,本发明提供了一种用于提供遍及软件应用的抗攻击能力的系统,所述系统包括:所述软件应用的关键资产的用户规范;自动程序变换机构,其体现在软件中并被配置为:从所述软件应用的中间编译器表示中识别原始数据和程序相依性,根据用户特定标准对所述关键资产进行优先化,使所述原始数据和程序相依性与所述优先化的关键资产相关,获得用于所述软件应用的用户特定控制容限,关于所述用户特定标准和所述用户特定控制容限,将新的数据和程序相依性元素插入所述软件应用的中间编译器表示中,以形成替换的中间表示;以及从替换的中间表示生成变换后的软件应用;其中,所述变换后的软件应用包括增强的相依性网络,其提供增加的抗攻击能力。

对本领域技术人员而言,在结合附图查看下面的本发明的特定实施例的描述时,本发明的其它方面和特征将变得明显。

附图说明

现在将参考附图仅通过举例来描述本发明的实施例。

图1是根据本发明的变换过程的概括流程图。

图2是示出了根据本发明的函数调用和数据相依性的插入的图解。

图3是示出了根据本发明的程序变换的图解。

图4是根据本发明的用于程序变换的方法步骤的流程图。

图5是示出了机器指纹识别的现有技术示例的图解。

图6是示出了如进一步应用于如图5中所示的机器指纹识别的示例的根据本发明的变换的图解。

具体实施方式

一般说来,本发明提供了一种用来自动地将相依性从软件应用(或简称为“程序”)的一部分传播到另一个以前不相关的部分的方法和系统。可以按期望重复该过程许多次。

更具体地,本发明涉及到程序的其它部分的基本编码功能和数据的传播。本发明用绑定到程序的先前存在部分的混合布尔算术(MBA)公式来代替普通的算术函数。首先在编译级上分析程序以确定在程序中保持的属性。此后,基于这些属性构造条件,并在公式中对该条件进行编码,所述公式以数据和运算对该条件进行编码。然后,这可以用来创建遍及应用的真实相依性,使得如果相依性被破坏,则程序将不再正确地运行。

可以实现本发明,用户借此执行关键程序资产的识别,或者可替换地,借此在库中建立预定程序属性原语集,并且分析器自动地确定应用于用户程序的属性原语集。在两个替换中,相依性载体和绑定可以用来创建要求保持程序属性的条件的相依性网络。如果在代码的部分上完成了软件盗用攻击,则减小了程序属性保持的可能性,条件不再保持,并且携带相依性的程序的部分将停止正确地操作

在图1中,示出了根据本发明的变换过程100的概括流程图。此处,示出了对于发明的过程的三个输入110、113、114。首先,提供以源代码形式114的应用程序。其次,提供程序100的关键资产的用户规范(或者可替换地可以是如上面提及的应用于用户程序的属性原语集的库)。该用户规范(或者属性原语集的库)是示出了关键资产的相对优先级的原始应用的标示(mark-up)。该标示可以采取各种形式,包括:在编程语言自身上的语言扩充;参考程序的单独的描述;或者允许用户加亮程序的区域的图形用户接口(GUI)。第三个输入包括控制选项(即,容限)113,其允许用户指定在用于应用的安全、性能和尺寸目标之间的折衷方案。通过自动程序变换工具111来处理这些输入110、113、114以产生带有插入的程序相依性的变换后的应用程序。在正常操作条件下,所得的变换后的程序112具有与原始输入的程序相同的行为。然而,在关键资产在受对手攻击下的条件下,程序不按预期而运转。这种攻击可以包括但不限于:用其它数据值代替应用数据值,用其它代码代替程序的代码或部分,向另一个源和/或从另一个源重定向程序的控制流,以及盗用程序的部分以便在另一个上下文中使用。

进一步关于涉及关键资产的用户识别的实施例,本发明提供了基于编译器的变换工具,所述变换工具在关键资产处开始,并且通过插入运算、对函数的调用和数据的使用针对该资产建立又长又宽的相依性网。运算和函数被积极地被合并到应用的先前存在的函数。当可能时分析并重新使用来自应用的数据。此外,所创建的数据被合并到由应用使用的数据结构中。在用户的尺寸和性能容限内尽可能远的扩展相依性网。如上面建议的,该发明提供了折衷安全和性能的灵活性。为了高性能的目的,可以修整相依性网以避开性能关键代码,同时维持安全目标。可以在策略地放置相依性网的端点,以优化安全相对于性能的折衷。在极端情况下,相依性网覆盖整个应用,意味着关键资产是普遍相依的。

进一步关于涉及在库中建立的预定程序属性原语集的实施例,本发明提供了自动地确定应用于用户的程序的属性原语集的分析器。然后,基于每个原语的应用修改程序,从程序中的一个源点到另一个目标点携带相依性。在目标点处,创建到程序的相依性绑定,使得存在对原始来自源点的一定条件的信赖。该信赖确保如果通过修改来直接攻击程序中的源点,则副作用将发生在目标点处的程序操作中。该结果将是在攻击者的预期参数内不运转的程序。

存在多种类型的属性原语,并且附加地存在多种方式,在所述方式中可以基于属性原语修改程序。每种类型的属性原语具有一定的特性。例如,常数整数属性意味着程序的实体在程序的整个执行寿命内保持常数值。该特性暗示了该实体在程序中使用的点处必须具有常数整数值,并且将永不具有其它值。基于这个,可以做出的程序操纵的示例包括但不限于:对于原始常数值的程序实体的复制;使用常数值在程序中计算其它值;在初始化时的常数值的计算;通过替换的程序流来计算常数值,从而确保它仅在程序中使用的点处包含正确值;或者在程序中的适当时间处(即,程序的寿命、或者取决于在以前的点中所描述计算的使用点)将保持其有效性的条件(例如,等效性、大于、小于…等等)中的实体的使用。

图2是对应用的变换的一般示例,示出了根据本发明的函数调用和数据相依性的插入。变换由在原始应用侧200与变换后的应用侧201之间的大的黑色箭表示。原始应用200在左边示出且包含一组函数(F1、F2、F3、F4、F5)221至225,其通过调用图相关。函数调用图是这样的一种图表,它的节点表示函数且定向的边(函数到函数的箭)表示在一端(没有箭头)处的函数调用者以及在另一端(箭头)处的函数被调用者。图2中的图表也通过定向的边(数据到函数的箭)示出了对存储器(D1、D2、D3)211至213的数据相依性。该示例示出了只读(常数)数据,虽然过程也可以用于读写数据,其中,数据的寿命是已知的或可以被分析。图2在右边示出了变换后的应用201。除了原始的调用图相依性221至225以及数据相依性211至213,已经插入了新的项目(由虚线指示)。这些新的项目包括但不限于:

·对数据到它们原来不依赖的代码和/或函数的相依性。

·用来携带它们原来不依赖的代码和/或函数之间的相依性的新数据。

·在原始程序中不存在的函数调用相依性。

·函数合并,其有效地创建了用于两个以前不相关的函数的共享的函数API。

·数据复制,其使数据攻击的有意义的修改的危险减小。

·代码复制,其减小了攻击者修改代码以尝试强迫期望的程序行为的能力。

·对散列算法的调用的插入,所述散列算法当被执行时为稍后将在编码路径中使用的数据计算所需的地址。

上述项目的列表提供了手段的例子,程序通过其可以被变换为新程序,所述新程序比原始程序携带更多的相依性。

根据本发明,应当注意的是,程序属性被定义为程序的任何特性,其可以被提前(例如,在建立的时候、在安装的时候、或者在首次运行时)计算,并且在后来的点处(例如,在运行时间处)被校验。程序属性的一些示例包括但不限于:

·部分或全部程序中的代码片断的散列值。

·在程序的特定执行状态下的变量的特定值。

·在程序的代码片断中的指令的绝对和相对地址。

·在程序中的代码或数据片断中的任意一个的尺寸。

·在程序的布局中的指令的类型和方位。

·在程序中的片断的尺寸和方位。

·在程序中的函数的数量和地址方位。

·在程序中的系统调用的数量和地址方位。

·在程序中的指令的相对偏移。

程序属性对于本发明是特别重要的。特定地,这些属性可以在一个点处被计算且在一个或许多其它点处被校验。该校验预期是通过的,否则,篡改(例如,反向工程攻击、代码和数据修改攻击、代码和数据盗用攻击等等)被推测并因此被检测。在遍及程序传播作为相依性的程序属性中,最终结果是紧紧耦合的程序,其信赖程序属性仍旧完整。程序的适当运行变得高度取决于程序属性。如上所述,程序属性函数可以以两种方式来产生,属性原语库借此由开发者手动编码,以供由正在将软件保护应用于给定程序的工程师使用,或者编译器分析阶段借此确定属性原语,以便自动注入到程序中。应当理解的是,这两种替换方法都是本发明的组成方面。

在相依性载体方面,这样的载体可以涉及从简单的变量到包含编码的值计算的复杂数据结构的任何东西。此外,载体不被限制为数据,使得相依性也可以可替换地在程序代码中携带。通常,根据本发明的相依性载体将包括代码公式和数据,其以这样的方式设计,使得它们可以设置不同的值,估计运算和/或条件,并且在执行的不同点处使用结果,同时隐蔽正被设置的原始数据值。通过程序作为数据携带的相依性优选地被以变换后的形式编码,使得原始值不对攻击者出现。同样地,它们不容易遭受诸如反向工程的攻击。通过使用带有相关联的随机常数的各种变换族来对相依性载体进行编码。该各种编码方法提供了一定程度的歧义,其防止相依性被反向工程以及被从程序移除。以设计偏好为依据,在不偏离本发明的意向范围的情况下,可以为了该目的利用各种可能的已知编码方法。用于对数据相依性进行编码的可能的方法在美国专利No.6,594,761、No.6,842,862和No.7,350,085中进行了描述。通过引用将所述参考的内容并入本文中。

如上所述,可以如下对值进行编码。考虑任何函数F,其中:

y = F(x)

以及反函数F-1,其中:

x = F-1(y)

于是,F可以用作用来将x编码成相依性载体y的手段。此外,F和F-1可以针对它们的运算接纳任何数量的额外的参数,所述运算导致相同的总的作用。此外,x和y在最简情况下是单个变量。然而,它们也可以是以下中的任何一个:多个变量、条件、数据结构、阵列、大的整数等等,只要保留函数和反函数的总的作用。

作为进一步的变量,函数和反函数的绑定可以是不明显的,使得运算可以与现有的程序代码相互混合。例如,考虑F,其中:

F(x) = c(b(a(x)))

以及F-1,其中:

F-1(y) = a-1(b-1(c-1(y) )

函数a -> b -> c -> c-1 -> b-1 -> a-1共同地做携带相依性的工作,并且必须最后以该次序执行。然而,将函数和反函数拆开为数个子函数的能力是重要的能力。可以将子函数注入到由源(即,相依性起源的地方)到目标(即,代码的行为信赖相依性的地方)分开的任何数量的代码位置中。作为相依性载体执行的子函数可以:

·被放置在调用图中的不同级处(例如,在主要级处、在调用的函数中、在叶函数中)且在条件的控制下,以便确保调用的数量是适当的。

·被合并为单个片的代码。例如,如果b和b-1在运算中是相同或类似的,则它们可以被合并为单个函数。

·被合并到现有的应用函数。

·被用已知的属性(例如,常数、其它属性原语)来构造,使得可以对插入的属性做新的相依性载体和绑定。

·与应用代码混合。例如,a-1的最终运算可以与值x的最终使用混合,使得其与代码不能区别。

相依性载体的附加方面是“状态”的观念。相依性载体可以携带多于一个原始值的初始状态。例如,如果我们考虑两个初始值:x和x'以及相依性载体y。

y = F(x, x')

则,存在四种可能的初始状态:

1. 没有设置任何东西

2. x已经被设置

3. x'已经被设置

4. x和x'两者都被设置

此外,可以将“运算”的概念添加到相依性载体状态。例如,考虑在x和x'的等效性条件下我们所感兴趣的情况,则以下的操作将定义第五状态:

5. 等效性条件的估计

类似地,我们也可以考虑任何附加的编码操作或反向操作作为中间状态。这些编码可以根据任何算术或布尔运算来进行公式化。只要将信息以某种形式保留,数据可以如期望的具有许多中间状态:

6. 中间状态

n. 中间状态

应当注意的是,上面是示例,并且因此应当容易明白的是,可以针对新的载体状态考虑任何一个输入和两个输入的算术、布尔、条件等等的运算。载体状态对于载体信息与原始应用程序流的混合是重要的。一般地,可以根据任何数量的输入值以及对那些值的任何数量和类型的运算来计算相依性载体状态。如下面在本文中进一步描述的,通过相依性绑定将相依性载体的结果和它们的运算与应用程序相组合。

相依性绑定从相依性载体取得信息并将数据和运算的结果绑定到程序中的目标点。再次,在不偏离本发明的意向范围的情况下,存在用来创建相依性绑定的数个方式。一个可能的方式是基于相依性载体提供具有所计算的值的数据实体。于是,所计算的值是程序的重要操作的必不可少的部分。可以通过填充指针表来提供更复杂的绑定,所述指针是如用于基本算法的各部分的目标位置所需要的。

相依性绑定是一组程序变换,其用来建立在相依性载体与应用代码之间的连接,以履行产生抗篡改的目的。相依性绑定通过考虑以下的代码形式来使用多种变换:

1. 相依性载体,以及

2. 应用程序代码。

相依性绑定的目标是使所提及的相依性载体和应用程序代码模糊,使得分开它们是非常困难的。尽管仅通过使用在绑定点处的相依性载体值来具有到程序的直接相依性绑定是可能的,但是攻击者剪去该相依性可以是容易的。所以,相依性绑定的函数是通过使相依性载体模糊并将其混合到应用代码中来使绑定的存在不明显。此外,为了抗篡改的利益,绑定的行为必须满足一定的标准。例如,如果攻击者能够在程序不根本上改变其行为的情况下对值做非常小的修改,则攻击者具有更好的成功机会。

根据本发明,我们指定一组方法以建立混合布尔算术(MBA)表达式,从而创建相依性绑定。MBA表达式是相组合以计算期望的行为的任何数量的布尔和/或算术运算。可以构造相依性绑定,使得代码的运算可以与应用代码混合。此外,也可以构造绑定,使得当相依性载体包含预期的值时运算值显示出正常行为,并且当相依性载体包含非预期的值时它们发散(即,包含非常大或非常小的值)或显示出异常行为。

可以从诸如C的高级编程语言中找到的任何构造中构建相依性绑定。这些可以包括布尔运算:与、或、异或、非(即,                                                )或者算术运算:加、减、乘、除、取模(即,)。此外,绑定可以包含条件(即,等于、不等于、大于、小于、大于等于、小于等于)或控制流(即,跳跃、分支、循环)。

相依性绑定的形式与在相依性载体中携带的属性类型相关。载体可以包含任何信息量,包括可以用在下游计算中的简单常数,或者条件(例如,等效性条件)。此处,可以使用一个输入的函数,例如,诸如-x、~x的运算。对于两个输入的相依性的等效性类型,我们可以通过首先考虑带有两个输入和一个输出的函数来构造绑定。

int dep(int x, int y)

函数dep可以被构造为当x和y具有相同值时产生正常的行为,并且当x和y具有不同值时产生非常不同类型的行为。此外,我们可以将附加的输入添加到该函数:

int dep(int x, int y, int c)

输入c用在运算中,但仅用来将相依性计算绑定到应用程序自身。可以将任何数量的附加输入供给到该函数。

可以通过使用以下的方法来构造期望的计算:

1. 创建运算的选项板和对应的特性化。特性化参数包括运算的数量。更多的运算提高安全级,同时更少的运算提高性能。

2. 从选项板做出选择,记住安全和性能目标。

3. 将选择相组合以创建完全的计算。

选项板的选择图示如下:

             //运算(1)

            //运算(3)

  //运算(5)

  //运算(5)

运算选项板的这些运算中的每个运算等效地执行算术减法运算,每一个以不同的运算数量为代价。运算的数量对计算的安全级和性能有贡献。用于高级编程语言(例如,C)的所有算术和布尔运算可以以相同的方式进行特性化。

此外,从运算的选项板中可以创建恒等式(identity)。恒等式是一组计算,所述一组计算取得输入x以及一个或多个附加的输入c1, c2, …附加的输入c1, c2, …是任何程序值,但在恒等式的计算期间必须保持为常数。于是,恒等式在输出上产生值x。恒等式图示如下:

恒等式1(x, c)(SUB1(x, c) + (c))           //运算(+1)

恒等式2(x, c)(SUB2(x, c) + (c))           //运算(+1)

恒等式3(x, c)(SUB3(x, c) + (c))           //运算(+1)

以这种方式产生恒等式通过使用附加的输入c1, c2, …等等来创建了将相依性引进应用的能力。可以将这些输入绑定到应用程序的任何变量,其减小了攻击者的剪掉计算的能力,因为他不知道对于程序的剩下部分的在相依性后面的语义。可以创建恒等式以获得用于高级编程语言(例如,C)的所有算术和布尔运算。此外,在上面说明之外,可以以许多其它方式将运算相组合,以便产生恒等式。为了说明的目的,下面现在将详细描述用来保护应用代码的相依性绑定的示例。然而,这种详细的示例不应当被解释为限制本发明的意向范围。

以下示例说明了用来保护应用代码的相依性绑定的特性。函数dep示出了如何可以将相依性载体绑定到程序代码以达到期望的结果。假定存在必须估计为常数值190的程序属性,如函数main()中所示。该程序使用变量x来计算在运行时间处的值,并且函数dep()用来估计并携带结果。我们考虑两种情况:

1. 变量x包含正确值(即,190)。结果是在d1中。

2. 变量x包含不正确值(即,183)。结果是在d2中。

相依性载体函数dep()用来:

·对将在64位返回变量中携带的输入值a和b 进行编码。该示例使用通过算术运算(减)和布尔运算(异或)对值进行运算的非常简单的示例。

·利用在计算中的输入c;然而,该值不影响示出结果。要求仅是c的值在计算期间保持恒定。这提供了不容易由攻击者剪掉的在程序代码上的相依性。

用以下属性来构造在宏指令BLEND1(), BLEND2()中进行编码的相依性绑定:

·如果输入a具有与输入b相同的值,绑定操作计算1。

·如果输入a具有与输入b不同的值,绑定操作计算一大值。

类似地,如果相依性载体产生零,则构造PREBLEND()以添加一大常数,并且构造POSTBLEND()以减去该相同的大常数。在另一方面,如果相依性载体产生任何其它值,则,POSTBLEND()将添加该大常数值。这些相依性绑定宏指令扩展以将运算混合到应用代码中,所以它们不容易被攻击者移除。该宏指令有效地提供了用来在将所混合的相依性对属性隐蔽的同时提供等效功能的手段。在函数main()中,存在两个k和j的加法,其应当估计为100的值。应当理解的是,该加法证明了应用程序中的有意义的运算。取决于d1来做第一个加法,所述d1导致正确的值被计算,而取决于d2来做第二个加法,所述d2导致非常大的不正确的值被计算。

进一步对于本示例,存在下面本文中遵循的三个部分,包括:

1. 示例程序在其原始源形式中。

2. 预处理后的示例程序。这证明了代码到应用程序中的混合。

3. 当执行程序时运行时间输出。第一输出指示属性是正确的。第二输出指示属性是不正确的。第三输出指示属性是正确的。

在其原始源形式中的示例程序包括:

//离散公式

//如果(a==b),则产生1,如果(a!=b),则产生大数

//相依性载体计算

//如果(a==b),则零,如果(a!=b),则非零

//如果(a==b),则零,如果(a!=b),则非零

//c是任何常数

 //编码成longlong

//相依性绑定操作

//零或大数

//小数

如果(a==b),则1,如果(a!=b),则大数

如果(a==b),则1,如果(a!=b),则大数

//零或大数

加上常数

基于条件d减去常数

//两个应用值

x具有正确值190

x具有不正确值183

//中间程序函数在这里发生

计算

取决于相依性载体d1

计算

取决于相依性载体d2

//与之前相同,但使用相依性载体d1

计算

取决于相依性载体d1

预处理后的示例程序包括:

在编译和执行之后的运行时间输出包括:

通过图3图形地图示了相依性载体和绑定。此处,示出了图解,所述图解示出了根据本发明的程序变换。原始程序侧300包括数据相依性311至313(或更多),应用函数321至324(或更多),以及资产331至333(或更多)。正常的程序流由箭370表示。在进行从原始程序侧300到变换后的程序侧301的由大的黑色箭头指示的变换时,原始数据相依性、函数和资产现在包括注入后的相依性绑定(D绑定)351至355和相依性载体(D载体)361至365的相依性网络(由虚线表示)。该相依性网络有效地创建了变更后的程序流371。进一步通过插入由注入后的数据314和注入后的函数325提供的外部数据和新函数来增强相依性网络。

现在将进一步参考图4详述在图3中图示的在这种程序变换之下的方法,所述图4图示了根据本发明方法的一般步骤400。将应用变换为相依性网络包括以下步骤:

步骤1)在412处,从源形式解析在411处的原始应用,并且将其表示在中间编译器表示中

步骤2)在413处,认出关键资产(包括明确的和隐含的程序属性),并且基于用户规范对其进行优先化。

步骤3)在414处,针对原始数据和程序相依性,对应用进行分析。也使分析信息与来自步骤2的信息相关。

步骤4)在415处,用户提供用于给定应用的性能/尺寸选项和/或容限。

步骤5)在416处,以在应用内尽可能远地扩展相依性的目标,插入新数据和代码相依性项目(如上所述)。基于关键资产的优先级(步骤3)和用户应用的性能/尺寸容限(步骤4)做出折衷。

步骤6)在417处,从中间表示生成变换后的应用。

在上面描述的步骤5内,包括有以下的子步骤:

子步骤1)基于资产关键性、程序中的关系和性能容限来为新的相依性识别数据和代码。

子步骤2)通过以下步骤在数据与代码之间、在数据与数据之间、或者在代码与代码之间创建相依性:

a)用“等效依赖函数”代替运算。这些等效依赖函数是用MBA运算来构造的,使得它们执行原始运算的相同函数,但也具有外部数据相依性。外部数据是部分函数计算且以解不开的方式进行使用。该数据的改变或移除将引起异常行为。

b)插入用于计算常数数据的运算。

c)插入函数的调用。

d)插入散列验证检查。

e)复制在使用点处的数据。

子步骤3)通过以下步骤在函数与其它函数之间创建相依性:

a)函数合并。

b)插入新代码和对函数的调用。

c)插入等效依赖函数。

上面参考的变换过程400的结果是高度绑定的程序,关于图3说明并在前面描述了所述程序。所以应当清楚的是,函数和数据变得紧密地取决于彼此遵循变换过程。这意味着关键资产、节点锁定、算法、程序属性计算等等都变得通过在整个程序中的数据和代码来变得紧密绑定且信赖彼此。这消除了篡改攻击的威胁,并使盗用攻击更困难得多。当在宽变化中一片代码或数据信赖程序中的大部分时,隔离代码和/或数据以便在另一个程序中使用是非常困难的。假设程序的个性化特性包括程序属性检查、节点锁定、加水印等等,攻击者经常被迫使在其整体上使用全部程序,使得篡改和软件盗用攻击都无效。因为攻击者被迫使在其整体上取得程序,而在这样的情况下,已经达到了抗攻击的目标。

本发明的进一步示例包括结合已知的机器指纹识别实现本系统和方法。一般地,已知的是,可以将程序分解为一组程序片,所述程序片具有在片中间的受限的相互依存。通过现有技术图5示出了这种程序片相依性。

现有技术的图5是已知的机器指纹识别场景,其检索用于特别计算机的IP地址519和硬件GUID(即,通用全局标识符)510,然后分别执行签名518和检查和算法511。该步骤生成预期的指纹517,所述指纹517用作对函数的输入,所述函数检查节点许可514,并且允许程序的剩下部分进行(在515处的“中间”和在516处的“末尾”)或者在512处异常终止程序。这作为主程序513的部分发生。该机器指纹识别场景是有效地简化节点锁定算法,其中,用户仅被允许在IP地址和硬件GUID的正确组合的情况下在计算机上运行程序。

从安全保护的角度出发,在现有技术图5中示出的机器指纹识别场景的主要问题中的一个是,它由程序片组成,其中,相依性(程序和数据两者)可预测地从一个函数流向下一个函数。这些相依性由虚线指示。尽管该逻辑流永久地做出了模块化编程实践,但是它提供了数个明显的攻击点。首先,数据(预期的指纹常数517)可以用不同的数据来代替。此外,硬件函数(检索IP_地址519,检索HW_GUID 510)可以用产生期望的数据的硬编码函数来代替。指纹函数(做出签名518、检查和511)也可以用硬编码函数来代替。仍进一步地,在检查节点许可函数514中的条件可以被卡住,使得它总允许程序开始。甚至进一步地,可以移除对检查节点许可函数的调用。所有这样的攻击点可以通过实现本发明来缓和。

在将本发明应用于现有技术图5中示出的机器指纹识别实施例之后,新插入的相依性使所有原始的片取决于彼此,使得整个程序变成相依性的网络,所述相依性的网络使进一步的分解成为困难的任务。本发明的对该机器指纹识别实施例的修改在图6中示出,借此在相同的基本示例应用已经通过使用本公开内容中描述的方法来进行了变换,从而产生了变换后的应用600。在该示例中,相依性载体和绑定是简单的数据变量,并且在下游程序点处进行使用。该示例由虚线示出,其中,考虑早先描述的有效相依性载体和绑定,相依性可以有效地被放置。如在前面的示例中,通过插入由插入的数据610提供的外部数据和新函数来进一步增强相依性网络。

与现有技术图4相关的原始程序代码可以体现为如下:

//为该节点取得第n个IP地址串

//将IP地址串转为int

//串计算的简化的检查和

//硬件全局唯一标识符

//预期的指纹签名

//测试对该节点的许可

//检查预期的值

//程序的中间

//程序的结尾

有关通过图6一般说明的根据本发明的变换的在前面段落中的该示例原始代码则可以示出为:

 decoy-在使用之前计算的实际值

加上的值

加上的值

加上的值

合并getIP&hw_guid

//合并checksum() & middle_program() & signature_of_IP

合并main(), calculate_node_permission()和end_program()

//对预期的值进行检查

计算到5

本发明的上述实施例仅意在成为示例。在不脱离单独由随附于此的权利要求限定的本发明的范围的情况下,可以由本领域技术人员对特别的实施例实现替换、修改和变化。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号