CN1290007C - 实现可移植内容保护以保护机密安全 - Google Patents
实现可移植内容保护以保护机密安全 Download PDFInfo
- Publication number
- CN1290007C CN1290007C CN 03132768 CN03132768A CN1290007C CN 1290007 C CN1290007 C CN 1290007C CN 03132768 CN03132768 CN 03132768 CN 03132768 A CN03132768 A CN 03132768A CN 1290007 C CN1290007 C CN 1290007C
- Authority
- CN
- China
- Prior art keywords
- program
- mentioned
- code
- node
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000013459 approach Methods 0.000 claims description 41
- 238000000034 method Methods 0.000 claims description 40
- 238000011161 development Methods 0.000 claims description 7
- 238000013461 design Methods 0.000 claims description 5
- 238000003860 storage Methods 0.000 claims description 4
- 238000003491 array Methods 0.000 claims 1
- 238000011084 recovery Methods 0.000 claims 1
- 230000004224 protection Effects 0.000 abstract description 13
- 230000008569 process Effects 0.000 description 13
- 230000006870 function Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000002441 reversible effect Effects 0.000 description 7
- 241001673391 Entandrophragma candollei Species 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 238000005206 flow analysis Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 229910052799 carbon Inorganic materials 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 208000003443 Unconsciousness Diseases 0.000 description 1
- 230000016571 aggressive behavior Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 229910003460 diamond Inorganic materials 0.000 description 1
- 239000010432 diamond Substances 0.000 description 1
- 238000009792 diffusion process Methods 0.000 description 1
- 230000003292 diminished effect Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 231100000219 mutagenic Toxicity 0.000 description 1
- 230000003505 mutagenic effect Effects 0.000 description 1
- 235000020610 powder formula Nutrition 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000001932 seasonal effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Abstract
一个源级编译器(20)可以随机地选择编译协定来实现可移植的内容的保护,以及通过混排相关数据保护嵌入一个程序中的机密。所述的程序可以使用一个适用于相关数据的源语言开发。为了隐藏嵌入的机密,在一个实施例中,预编译器软件可以用于基于一个随机的种子指示和一个混排算法(90)来以一个随机执行顺序编译该程序,该种子指示随机地选择编译协定,在执行期间该混排算法使相关数据跨越该程序移动。
Description
技术领域
本发明通常涉及内容保护,特别涉及用于保护嵌入软件中的机密的可移植内容保护的实现。
背景技术
许多商业组织提供敏感的基于软件的内容给不同的用户。一个被保护的内容的传播的情况是通过网络电子发布包括软件、书籍、音乐和视频的内容到系统和/或装置。然而,对所发布的内容,比如软件程序很容易受到各种不同的攻击,例如被另一个合法终端用户直接攻击,或者被一个远程黑客或一个自动的攻击间接攻击。例如:许多软件工具可以被用来执行不同类型的自动攻击,从被保护内容中获取机密。为了防止反向操纵及其它上述所述的攻击,公司不得不保护软件程序代码的完整性,使其能在敌对的环境中也可以安全使用。然而,例如未被保护的数据或者程序代码仍然可以很轻易地被拷贝并且传播到无数国际互联网络用户,在这种状态下,版权以及公司的信息的保护仍然面临很大的挑战。另外,用于再现内容的开放式平台的出现使得内容在恶意攻击面前更加脆弱。
为此,可以对内容采取某种保护形式,例如为内容的使用权支付了费用并且同意遵守使用条款的特定当事人可以拥有该内容。以这样的方式,内容保护可以允许一个授权的查看者全权使用该内容,但是禁止盗版用户非法制造拷贝或者从中获取嵌入的机密。内容保护可以包括产生抗干扰软件,使其很难监测到程序代码的执行。对于机密的内容,这样保护可以结合加密技术使用,加密技术是对抗干扰软件的补充。尽管加密技术在其中用于传输的发送和接收双方都是可信赖的用户这样的环境中可以顺利地执行,在敌对的环境中来自恶意软件以及具有不良企图的用户的软件攻击都是不可避免的。因此,传统的软件所执行的密码算法是不够的,特别是在阻止包括可以访问和控制执行环境的敌对的用户或自动攻击工具的许多复杂攻击的情况下。随着软件自动攻击工具的出现,在公开的程序代码中静态地隐藏机密也许不再适用。
尤其是通过空间(在代码中的)和时间(更新的频率)保护例如所有权算法和加密密钥的嵌入机密,可以使其难以对一段软件中意图的行为进行修改。举例来说,当它需要同与需要分布在结构上不确定格式的软件相结合,所述的需要分布在结构上不确定格式的软件包括作为原始源代码的大量相同的信息,然而,分布式编译软件变得相对容易解码,在恶意反向操作的攻击下泄漏了机密。此外,设计抗干扰的软件也许是困难的,该软件可能以一种非显而易见的方式而失效,该方式不产生任何对攻击者有用的信息,因为在该软件中保持对来自攻击者的任何不期望的更改的脆弱性的同时令软件难以被更改是两个相对的要求。
因此,继而需要一个实现对可移植的内容进行保护的更好的方法,尤其是保护嵌入在软件中的机密的方法。
发明内容
本发明的目的是提供实现可移植内容保护以保护机密安全的方法和系统。
本发明的一种实现可移植内容保护以保护机密安全的方法包括:
基于适合于相关数据的源语言而开发一个包括该相关数据和一个机密的程序;以及
为隐藏上述的机密而以一个随机的执行顺序编译该程序。
该方法还包括:使用一个种子指示以便随机地选择编译协定。
该方法中,以随机的执行顺序编译该程序包括在执行期间混排上述的相关数据。
本发明的另一种实现可移植内容保护以保护机密安全的方法包括:
开发一个程序,该程序包括一个或多个数据变量,代码块,跳转以及在控制流程图中指示对于上述的一个或多个数据变量的至少一个唯一变量设计的机密;以及
以上述的至少一个唯一变量设计为基础编译程序隐藏上述的机密,在执行期间混排数据。
该方法还包括:识别一个或多个代码块作为节点和识别一个或多个跳转作为控制流程图的弧线。
本发明的实现可移植内容保护以保护机密安全的系统包括:
用于开发程序的用户接口,该程序包括基于适合相关数据的源语言的相关数据和一个机密;
与上述的用户接口连在一起的预编译器,用以为隐藏上述的机密而以一个随机的执行顺序编译该程序;和
一个处理器,用以执行上述的用户接口以及上述的预编译器。
本发明提供的系统进一步可以包括:生成器,提供一个种子指示以便为程序的不同的编译随机地选择编译协定。
本发明提供的系统进一步可以包括:一个混排装置,通过上述的预编译器在执行期间移动上述的相关数据。
在本发明提供的系统中,用户接口允许在上述的预编译器以一个抗干扰方式将程序的源代码转换成为与平台无关的编译器改进源代码之前将上述的机密嵌入到程序的源代码中。
附图说明
图1是与本发明的一些实施例相符合的程序编译器模块的示意图;
图2是根据本发明的一个实施例如图1中所示的以随机执行顺序经由源级编译器编译的程序以遮掩机密的流程图;
图3是根据本发明的一个实施例的程序源代码的代码映射,其中程序代码块用来构造如图1所示的预编译器软件的控制流程图;
图4是根据本发明的一个实施例的混排算法的流程图,该算法在如图1所示的预编译器软件执行期间在程序间移动相关数据;
图5A是按照本发明的一个实施例的、一个通过一个网络在编译器平台和用户平台之间的通信链路的示意图,该通信链路分布用于实现内容保护的软件,通过图1所示的预编译器软件来实现机密的安全;
图5B是根据本发明的另一个实施例的一个无线通信链路的示意图,;
图6A是根据本发明的一个实施例的基于图5A中所示的编译器平台与图1所示的预编译器软件相结合的基于处理器的系统;和
图6B是根据本发明的一个实施例的如图5B所示的用户平台为基础的无线装置。
具体实施方式
如图1所示的依照本发明的一个实施例的编译器模块20包括,一个接收用于产生编译器改进的代码45的程序源代码35的源级编译器30,实现对可移植的内容保护确保嵌入机密的安全。在本发明的一些实施例中,程序编译器模块20可以包括用户接口50,用于根据源语言60开发程序55。用户接口50的一个例子可以是一个语言编辑器,该语言编辑器能够提供一个适合于使用不同的非标准语言的语言语义的程序设计环境。
在程序开发中,相应于程序55的程序源代码35可以包括相关数据65和一个或多个嵌入机密75。源语言60对程序55中的相关数据65是可应用的。因为源语言60在相关数据65上是适用的,源语言60可以操纵变量,比如程序55中引用的数据变量。然而,数据变量可以根据开发程序55使用的具体源语言被初始化和/或改变。
在一些例子中,程序55可以包括以语言语义和非标准语言为基础的语句或指令,包括的变量的数据可以作为相关数据65而与程序55相关。在分布之前,程序55可以被程序编译器模块20按一个随机执行顺序编译,实质上从非故意的公开中隐藏了嵌入的机密75。利用源级编译器30,编译器模块20可以隐藏这些机密75,例如一些情况下在源级别嵌入在程序源代码35之内的所有权信息和程序设计技术。
与本发明相关的一些实施例相符合,源级编译器30可以包括预编译器软件80,该预编译器可通过一个利用了可提供伪随机种子数目的生成器85的随机数而被播种。为了在隐藏嵌入的机密75时以随机执行的顺序编译程序,预编译器软件80可以使用一个混排算法90。当生成器85可以提供一个种子表示,以便随机从程序55的不同编译中选择一个或多个编译协定的时候,在预编译器软件80执行期间,混排算法90可使相关数据65在程序55间移动。
根据本发明的一些实施例,当预编译器软件80以一个抗干扰方式转换程序55成为与平台无关的编译器改进代码45时,混排算法90可以将所期望的机密75嵌入到程序源代码35。这样,当在一个平台特定的编译器上重新将编译器改进代码45编译成为对象或编译代码时,实质上源级编译器30可以实现可移植的内容保护,以便嵌入的机密75不泄密,从而使代码隐藏优化。简而言之,源级编译器30可以编译程序55,以便程序源代码35不能以有图谋的方式被有效地改变,可移植地保护适当地嵌入的机密不被无意识的泄密,例如在本发明的一些实施例中的编译器改进代码45中的所有权算法和加密密钥。
即使实现保密嵌入机密75的可移植的内容保护的逻辑被结合到预编译器软件80内,预编译器软件80转换一个以可适用的编程源语言编写的程序,其它的实施例也可以使用不同类型的分析和控制代码及/或数据流的程序和工具,例如软件分析、调试测试工具来实现。然而本发明的不同实施例也可以以其它软件开发工具的方式实现。
无论如何,与本发明的一些实施例相符合,通常用于编写或开发源级编译器30的高级计算机程序设计语言的类型可以包括面向对象的语言和过程语言两者。例如,为实现源级编译器30,可采用高级程序设计语言包括C语言和C++,作为两个例子。尽管源级编译器30的一些实施例特别适合于以源语言C语言及/或C++开发的程序,但是在本发明的一些实施例中任意通用的可提供用于程序55的相关数据65的源语言可以被方便地用于获得程序源代码35。
本发明的许多例子中可以使用其它的源语言,包括一个并行程序设计语言,该语言能够通过万维网(WWW)或其它的通信媒质分布多媒体内容。举例来说,可以使用指向于基于国际互联网络的软件内容分布的并行程序设计语言技术标准开发程序55。这个技术标准可以用来创建程序源代码35,包括图形、声音、文本或其它的媒体内容。根据本发明的一个实施例,程序55可以被分布,以便用户可以通过在国际互联网络上的可利用的具体网址访问该程序55。
参照图2,依照本发明的很多实施例,图1所示源级编译器30可以实现可移植的内容保护,其在程序源代码35中嵌入机密75,提供与平台无关的,抗干扰编译器改进代码45。源级编译器30可以接收,例如,基于可以产生可移植的低级的单块的代码(空心粉式代码)的结构化的可分析的高级源语言的程序代码35,即,编译器改进代码45可以在基于一些方案中的具体应用程序的任何一个的适当的平台特定的编译器上,被进一步的重新编译。
在块100中,在一些实施例中,可以调用用户接口50用于用源语言60开发程序55。利用源语言60,源级编译器30可以识别程序55的一个或多个存储器分配和并行流对象。根据可应用于相关数据65的并行程序设计源语言设计的技术标准,根据一个或多个存储器分配和并行流对象,程序55的随机执行顺序可以被规定在一些情况中。
根据本发明的一个实施例的一个具体的例子,当利用一个单任务语义非标准语言时,一个适用源语言可以用来获得程序源代码35。在以一个高级源语言编程的时候,比如C语言,内存泄漏以及当以并行程序设计源语言编程时,垃圾收集中断有时可以引起源级编译器30的性能降低。然而,当在实时应用程序中提供图象以及声音时,垃圾收集可以是一个重要的特性。为此,本发明的一些实施例中利用的一个应用式语言作为源语言60,可以使得源级编译器30分析和优化嵌入在程序源代码35中的机密75的性能以及隐藏。
为了允许垃圾收集的目的,可以引入引用的计算用于与垃圾收集相关的堆分配对象,为了一些情况下的单任务语义非标准语言而帮助实时的内存回收。因此,当重新编译时,可用的源语言60的单任务语义非标准语言可以通过以随机执行顺序执行的程序55被保存,为内容供应商提供坚固的拷贝保护。换句话说,当程序55执行时让相关数据65在程序源代码35中移动或混排,可以结合包括与平台无关的抗干扰,为程序55产生编译器改进代码45。结果,根据本发明的几个例子,通过源级编译器30结合使用应用的源语言以及随机的执行顺序,可以优化隐藏嵌入的机密75,按所希望地隐藏在程序源代码35中。
在块102,程序55连同相关数据65以及嵌入机密75一起可以按所希望地开发。为隐藏嵌入机密75以一个随机的执行顺序编译程序55,可以在块104调用预编译器软件80,它可以依次在块106产生随机种子指示或数字,以及在块108产生一个适当的编译协定的选择。基于在块106中选择的随机种子指示,在块108中通过使用随机选择的替换物替换标准协定,预编译器软件80可以以随机执行顺序执行程序55。例如:随机种子指示可以改变代码时间表、变量设计、函数调用协定及其它协定,以便这些选择对于同样程序源代码35的每次编译是随机的并且是不同的。然而,在理论上,编译器改进代码45的重新编译只有当存在可用到随机种子指示时,才可以被允许使用附加的调试信息。
在本发明的一些实施例中,为在执行期间在程序55之间混排相关数据65,在块110可以以一个传统的方式确立一个控制流程图。控制流程图可以表示程序源代码35内的一个或多个数据与程序代码路径。根据本发明的一些实施例,使用一个控制流分析,程序源代码35的控制流可以被分析。对于一些实施例,一个或多个数据变量可以在相关数据65中被识别。在控制流分析期间,数据变量可以被当做数组元素随机地分配。为特定的数据变量沿着一个数据路径混排数据,可以根据以下的启发式方法将代码可以被插入到程序源代码35,该启发式方法保证当在控制流程图中多条代路径汇聚时,至少两个这样的路径产生同样的数据排列,而每个路径通过数据交换的一个随机的唯一的顺序达到该排列。在一个例子中,数据排列的必然伴有加密编码的数据以便产生一个想要的加密。
为了在程序50之间混排相关数据65,在一些实施例中,图1所示源级编译器30可以跟踪数据地址断点。在确定用于程序50执行的时间表之后,源级编译器30可以压缩存储器的数量,以便通过分配同样的存储单元给不被同时需要的不同的数据值来引入平均信息量。
经过这个压缩后,程序源代码35可以被产生,沿着程序50的每个路径唯一地且随机地混排存储器任务,保证当两个路径汇聚时到达相同的排列。这样,当程序代码35执行时,数组中每个数据变量的偏移量可以改变。然而,在许多实施例中,混排的数量可以通过程序55中的代码的数量启发式地限定,而不会显著地增加执行时间。
为在多个代码路径汇聚的地方达到相同的排列,在一些对于排列的实施例中,可以进行一个有序集的两个元素的交换,例如在恒定的时间内。因此在这个方案中,代价函数是交换的次数。首先,可以检查执行从一个排列到另一个排列的必需的(两个不同的元素)交换的次数。这个次数被认为是在两个排列之间的距离。既然交换是它们自己的反转,交换的一个例子的可以是d(p1,p2)=d(p2,p1),其三角不等式为:d(p1,p3)<=d(p1,P2)+d(p2,P3)。
为了计算两个排列之间的距离,一个排列可以被用作基点,定义为“原点”位置。当检查其他排列时,一个元素可以被确定,因此作为在基排列中在相同位置上的元素,形成一单独的子集。然而,不需要进行交换以将其返回到它的原点位置。
另一方面,如果一个元素不是在它的原点位置,可以确定另一个元素。通过延续这个过程,最后返回到第一个元素,可以产生其元素不在原点位置的子集。这个子集可以被认为是一个错位排列子集。与交换被执行的顺序无关,它可以正好采取N-1个交换来重新排列元素以便它们在它们的原点位置。
结合这两种情况,两个排列之间的距离可以被计算,具有每个大小为Mi的N个子集其和为(Mi-1),,其中i从1到N,而不管子集是错位排列的还是单一的。然而,当全部的元素属于一个单一的错误排列子集时,在两个S个元素的排列之间的最大距离是S-1。例如:一个给出的(源)排列的两个元素可以被交换以便产生一个新的排列,也就是说更接近第二给出的(目标)排列。相反地,从新的排列到给出的目标排列的距离可以被增加。如此,使用目标排列来定义原点位置,源排列的全部的单个以及错误排列子集在一种情况中可以被确定。
依据控制流程图,在块112,程序55可以被以一个随机的执行顺序编译,而根据混排算法90随着程序55的运行而混排数据(图1)。通过让数据随着程序55的执行而移动,而不是使用数据断点,位置无关码理论上可能不能用于本发明的一些实施例。此外,有时自修改代码可能不需要被采用,在只读存储器(ROM)之内允许使用源级编译器30。因为源级编译器30实质上独立于特定的指令集,它可以适当地跨平台使用。
在块114,依照本发明的一个实施例,该程序源代码35可以以一个抗干扰方式被转换成为与平台无关的编译器改进代码45。使用由程序源代码35获得的控制流程图,在本发明的一些例子中,当编译器改进代码45在特定平台编译器上重新编译成为对象或编译的代码时,可以保护嵌入机密75不泄密,从而使代码隐藏优化。随机种子指示的有效性以及适当的调试信息,可以允许在一些场合下重新编译程序55。也就是说,首先适当的随机种子指示的有效性的确定可以在继续进行重新编译之前进行,产生对象或编译代码,其中可移植内容保护被实现以便保护与程序55相关的嵌入机密75。
按照本发明的一些实施例,为从划分的程序代码35a的代码映射中获得图3所示的控制流程图120,以便为了伪装在编译器生成的代码45中的程序控制流的转换可以被执行,用以抵御干扰攻击。例如:代码转换可以提供干扰抵抗,用以抵御反向设计攻击及/或防止自动攻击,同时允许在一个局部环境和选择的开放计算平台中建立以及调度应用程序时。源级编译器30可以为程序源代码35a应用干扰抵抗力,保护它不受到打算修改或绕过功能的多种的攻击,或获得可能包括敏感数据或媒介内容的嵌入机密75。
在一个特定的例子中,在一些点,响应控制转换,该控制流程图120可以从程序源代码35a处获得,识别源代码的一组块130(1),130(k+m),130(k),130(k-p)和130(N)。为了根据程序源代码35a建立控制流程图120,对应于相关块130的节点140与对应于存在于程序源代码35a的跳转150的弧线145一起可以被识别。例如:既然节点140(1)可以对应于块130(1),则弧145(2)可以对应于跳转150(2)。根据本发明的一些实施例,伪入口和出口节点可以被增加到该控制流程图120,引入多余的和辅助的计算以显著地提高脆弱性,同时在程序源代码35a可能产生改变的时候增加副作用的扩散,响应在编译器改进代码45中引入的任一修改,作为是恶意攻击的结果。
在一个实施例中,正好一个伪出口节点和一个伪入口节点可用于试探或算法,以指定控制流程图120中的节点的排列。通过获得全部入口节点和添加到一个入口节点中,一个单一伪入口节点可以被形成,该伪入口节点可以表示控制流程图120中所有可能的入口。同样地,可以通过获得全部出口节点和人工地添加弧线到一个新的伪出口节点形成一个伪出口节点,使得控制流程图120包括一个单一的伪出口节点。因此,在一些实施例中,在控制流程图120中,可能有许多入口和出口,例如一个有效的流程图,在编程语言中,一个单入口-单出口流程图可以通过组合两个伪节点获取。
如此,该控制流程图120,其中每个节点使用在开始是未指定的,一个排列可以被指定给该单独的伪入口节点,并且指定一个最短路径给该单独的伪出口节点,沿着该路径指定全部的排列。其后,在现在指定在该路径上全部的节点之间的更短路径可以被确定,建议穿过控制流程图120的任一其它的短路径或短途径应该在较长的那些路径之前被首先指定。这个过程可以重复,直到控制流程图120中每个节点被指定为止。
一个伪入口节点160(1)和一个伪出口节点160(2)可以被利用来在程序源代码35a中插入代码,为特定的数据变量沿着数据路径混排数据。例如:一个数据路径可以表示在程序源代码35a之内或在它的特定的块130之内数据变量被初始化和后来被改变的位置。同样地,一个代码路径可以表示特定的跳转150,在控制流程图120中被表示为弧145。通过在控制流程图120中的超过一个代码路径通过一个随机的唯一的数据交换的顺序汇聚到达排列时候产生数据同样的排列,一个期望的内容保护可以被实现用以保密在程序55的嵌入机密75,产生使用平台特定的商用编译器进行后来的重新编译的以编译器改进代码45的形式的可移植代码。
在一些实施例,防止未被授权的源程序遭受恶意攻击可以产生一个对利用在内容保护的规则坚固性的显著的改善,例如在为不同的工业技术标准发行内容保护许可中。规则坚固性通常表示任一意图是为抑制黑客修改或者绕过内容保护的设计要求。结果,内容供应商可以方便地提供加强它们的内容的拷贝保护。
使用该控制流程图120,在本发明的许多实施例中,连接两个标记为已指定的节点(以下简称“最短的连接途径”,例如,在一个第一和一个最后的节点之间)的一个最短的途径(包括路径和循环)可以被确定,提供一个期望的控制流转换以至足够地伪装程序控制流,抵御不同的干扰攻击。然而,未指定的节点140可以获得已指定的排列以及弧线145获得已指定的交换。例如,第一和第二节点可以为每个数据变量指定一个排列,比如变量位置。通过在建立一个从第一个状态或第一个节点的排列到最后的节点的最后的排列的转换的时候最小化交换数目,在一些实施例中,连接该两个节点的最短的途径可以被确定。在一个例子中,通过根据试探指定最短的一个,额外的交换可以被避免。
具体地,第一和第二最短的连接途径165(1)以及165(2)可能产生用于伪入口节点160(1)以及伪出口节点160(2),当不引入任何系统或平台依赖性而满足期望安全以及性能要求时优化代码隐藏或该控制流转换。第一最短的连接途径165(1)可以包括该弧线145(1)到145(4)连接伪入口节点160(1)到伪出口节点160(2)。同样地,第二最短的连接途径165(2)可以包括该弧线145(5)到145(7),连接节点140(k),140(k+m),以及140(k-p)。举例来说,在两个伪节点之间的最短的连接途径165(1),那就是说,该伪入口节点160(1)以及该伪出口节点160(2),在控制流程图上可以建议一个经过该剩余未指定的中间节点140(1)到140(N)的路径。
对于在最短的连接途径165(1)末端上的两个节点来讲,它们是未指定的节点140(1)到140(N),起始端排列可以通过用仍然为随机的最小交换数目的方法交换为结束排列。已经被指定的所述的节点140(k)和140(N)作为最短的连接途径165(2)的端点。这个过程可以被重复直到每个从节点140(1)到140(N)被指定,例如在仍然未指定的中间节点140(k+m)和140(k-p)用一些交换和一些中间排列连接指定节点140(k)和140(N)。
现在转到图4,按照本发明的某一个实施例,源级编译器30(图1)可以使用混排算法90将数据跨越程序55移动,启动预编译器软件80以随机的执行顺序执行程序源代码35,这样,嵌入的机密75可以以优化的方式被恰当地隐藏。在块175,开始如图3所示的程序源代码35a的控制流分析。在一个例子中,使用程序源代码35a,如图3所示的控制流程图120可以在块177被获取。
如上所指出的,程序源代码35a的模块130可以确定为节点140,而代码35a中的跳转150可以表示为模块179中的控制流程图120的弧线145。依赖特定的应用程序实现对所希望的嵌入的机密75的可移植内容的保护,刚好可以产生一个伪入口节点160(1),它的后继是流程图中的入口节点(没有前驱的节点)。同样地,刚好可以产生一个其前驱是出口节点(没有后继的节点)的伪出口节点160(2)。这些两个伪节点和弧线可以在模块181被加到控制流程图120中。在模块183,当伪出口节点160(2)可以被标记为指定的时候,分配一个不同大小的数据变量数组,伪入口节点160可以为变量偏移量指定一个随机排列。根据本发明实施例的一个排列引用了以混排为目的的数据的加密编码,这个实施可以包括一些数据变量的形式。
最短的途径连接已经通过未指定的节点140(1)到140(N)而指定节点160(1)和160(2),并且通过这些仍未指定的节点在模块185确定弧线。在最短的连接途径165(1)中的第一和最后的节点通常被标记为已指定的(意思指排列已经被指定给这些节点(除了伪出口节点160(2)的情况下))。在这个点,在最短的连接途径165(1)中没有中间节点是(至今)指定的排列,也没有任意弧线被指定交换。换句话说,最短的连接途径165(1)是在指定节点开始的最短的路线,即,伪入口节点160(1)并且遍历被指定的节点,即,通过未指定的弧线145和节点140(1)到140(N)的伪出口节点160(2)。如果在最短的连接途径165(1)上的第一和最后节点不同,它就是路径。如果第一和最后的节点是相同的节点,它是一个环路。通过仅在标记为已指定的伪节点开始,而不是任意其它的节点(并且没有弧线),最短的连接途径可以被重复地确定。然后可以将排列指定给节点并且交换到弧线,将它们两个标记为已指定的。可以确定一个新的最短的连接途径,重复这个过程直到没有其它的连接途径,即,没有指定的节点,或用于构造好的程序图的弧线保持为未标记。例如,最短的连接途径165(1)连接伪出口节点160(2)并且如图3所示的伪入口节点160(1)在某些情况下可以被导出。最短的连接途径165(1)可以被遍历,在模块187沿着路径标记遇到的弧线145(1)、145(2)、145(3)和145(4)和节点140(1),140(k),和140(N)。
如果在最短的连接途径165(1)的第一个节点是伪出口节点160(2),可以根据一个实施例反向该路径,从伪入口节点160(1)开始并且以伪出口节点160(2)结束。然而,对于每个从起始节点到结束″目标″节点的节点来讲,可以在该节点和目标节点排列之间计算交换距离。如果沿着该路径的距离大于交换距离,可以产生更大的交换距离的排列。这个排列可以指定给路径上的下一个节点(即,从目标节点偏移的节点)。如果该目标节点是伪出口节点,并且因此没有排列,可以产生从开始节点的交换距离大于当前节点(即,从起始节点偏移的节点)的排列。
当不能增加路径距离的时候,可以交换任意两个元素来减少路径上的距离,因为已经尽可能远地进行了遍历。如果沿着路径的距离小于或等于交换距离,可以为到目标节点的交换距离小于当前节点来产生一个排列,同时将其指定给下一个节点,前往目标节点。在这种情况下,在节点160(1)和160(2)之间的弧线145可以用交换来注释,和排列可以指定给这些节点。
在一个实施例中,为了从源产生排列,源正好是一个更接近目标排列的交换,在相同的错位排列的子集中的任意两个不同元素可以被交换,将错位排列分成两个子集(单一或错位排列),而不考虑选择了哪两个元素。通过一个来自目标排列的交换增加距离,来自任意两个不同子集的任意两个元素可以交换成为它们的单一或错位排列子集。通常不考虑每个子集中选择的元素,而将两个子集组合成一个错位排列子集。以这种方法,两个排列之间的距离可以被测量以便产生使它们彼此分离的排列,并且使它们一起返回到交换操作的界限数量。下表IA到IIIC示意性的说明了根据本发明的实施例的在排列之间交换距离的概念。
表IA
排列(p1)
S | B | Z | Y | A | C | F | Q | W | T | X |
表IB
排列(p2)
S | C | Y | X | F | B | A | Q | Z | T | W |
在表IA和IB中,一组两个排列(例如,表IA中所示的p1和表IB中所示的p2)可以通过比较发现元素的最小可能(最基本)的子集,这些元素被排列(在两个排列中每个元素在相同的位置)或错位排列(在两个排列中元素的子集不在相同的位置)。最小的排列可以包含一个元素。最小的(基本的)错位排列不能更进一步被分成更小的错位排列。
在表IA和IB所示的实施例中,最小的错位排列具有两个元素;然而在其它的实施例中可能已经超过了两个元素。在两个排列之间的交换距离可以是((D[i]-1))的和,其中Di是错位排列i中的基数(元素的数量),在全部错位排列中改变i。例如,在表IA和IB的基本子集(不包括较小的子集)中,单一的排列:{S},{Q},{T}(元素在相同的放置),和错位排列:{A,F},{B,C},{W,X,Y,Z}(元素在彼此的位置)。排列p1和p2之间的交换距离是(每个基本子集的基数减1)的和:(1-1)+(1-1)+(1-1)+(2-1)+(2-1)+(4-1)=5次交换。
表IIA
排列(p1)
S | B | Z | Y | A | C | F | Q | W | T | X |
表IIB
排列(p2)
S | C | Y | X | F | B | A | Q | Z | T | W |
表IIC
排列(p1′)
S | B | Z | W | A | C | F | Q | Y | T | X |
如表IIA到IIC所示,对于在交换距离d的两个排列p1和p2来讲,新的排列p1′可以在从p2的d-1的交换距离中通过交换两个来自相同的错位排列子集的不同的元素而被产生。当然,当没有错位排列子集时,排列p1与排列p2相同,因为这些排列不能获得进一步的接近。
参照表IIA到IIC的一个实施例,表IIC中所示的排列p1′(比排列p1更接近排列p2的一个交换)可以由在排列p1和p2中两个位置不同的元素的错位排列子集的任何两个不同元素交换形成。具体地说,元素W和Y可以从排列p1的{W,X Y,Z}被交换以形成排列p1′。而对应于排列p1′到p2的错位排列包括子集{Z,Y},{W,X},{A,F},{B,C},在一个例子中,排列p1′和排列p2之间的距离是(2-1)+(2-1)+(2-1)+(2-1)=4。
表IIIA
排列(p1)
S | B | Z | Y | A | C | F | Q | W | T | X |
表IIIB
排列(p2)
S | C | Y | X | F | B | A | Q | Z | T | W |
表IIIC
表(p1*)
S | Q | Z | Y | A | C | F | B | W | T | X |
如表IIIA到IIIC所示,对在交换距离d的两个排列p1和p2来讲,一个新的排列p1*可以在从排列p2的交换距离d+1通过交换两个不同基本子集(或者是单一的排列或者是错位排列)中的排列p1的两个元素产生,除非已经到达最大的距离。这可能发生在仅有一个错位排列子集的时候,其包括在排列中所有的元素。
根据如表IIIA到IIIC的本发明的一个实施例,排列p1*可以由排列p1形成,排列p1是进一步由排列p2通过交换一个来自两个不同子集的每一个的元素的一次交换。尤其是,来自{Q}的元素Q和来自{B,C}的元素B可以在排列p1被交换以形成排列p1*。而相应于排列p1*到p2的错位排列包括子集{B,C,Q},{A,F},{W,X,Y,Z},在一个具体例子中,排列p1*和排列p2之间的距离是(3-1)+(2-1)+(4-1)=6。
对于控制流转换,为了混排数据,数据交换表示可以被指定给那些弧线145,对于这些弧线,依据节点140的数量的排列距离依小于依据中间节点140通过最短的连接途径165(1)的其余的路径距离。在图3所示的控制流程图120中,所述的排列可以被存储在最短的连接途径165(1)的中间节点上。
在示意性的例子中,对于在中间节点140(k)的伪出口节点160(2)和伪入口节点160(1)之间的最短连接途径165,排列可以被存储。按照本发明的某一个实施例中的特定的例子中,所有两个的弧线,即在伪入口节点160(1)和节点140(k)之间的弧线和进一步到伪出口节点160(2)的弧线,这两个弧线可以沿在最短的连接途径165(1)内部的中间节点140(k)进行标记。在菱形块189进行检查可能确定在最短的连接途径165(1)中的所有弧线145是否已经被标记。如果一些弧线尚未被标记,流程回到模块185。否则,在模块191,为确定在每个模块130的变量偏移量,可以根据上面提出的例子,利用存储在例如节点140(k)的中间节点上的节点排列产生正规码。另外,数据交换代码可以在每个被标记用于最短的连接途径165的弧上产生,在程序55执行时混排数据。用这种方法,一个希望执行的程序源代码35a可以以随机顺序被执行,充分地隐藏了嵌入的机密75,以可移植方式跨越不同的平台。
以一些实施例中,一个试探的例子可以涉及一个数据排列的控制流,利用常规控制流程图确定程序55中的两个点之间的距离。不考虑弧线145的方向,为弧线指定权(例如,作为模块130中的代码的函数),一个在任意两个点之间的作为最短连接途径165的距离函数可以在点之间获取。所以,当将其连接到入口节点的时候,控制流程图120可以被增加一个伪入口节点160(1)。同样地,一个伪出口节点160(2)可以添加,将所有的出口节点连接到这个节点。
对于源级编译器30,一个函数可以仅使用一次每个弧线145将一个最短的连接途径从一组节点140的任意元素返回到第二元素。在本发明的一些实施例中,由于电路允许,两个元素不必不同。对这个组的伪入口节点和伪出口节点初始化,一个最短的连接途径可以通过所述的函数被确定。
在一个大型数组中的变量偏移量的随机排列可以被指定给入口节点。通过沿着路径从入口移动到出口,遍历离开最初的排列,排列可以被指定给节点160(1)和160(2)并且交换到控制流程图120上的弧线145。当不能离开的时候(已经在最大距离)而是在路径上更接近地移动。因此,沿着该路线的每个节点可以被加到组中,形成一组具有指定排列的节点。举例来说,弧线145可以被标记为在控制流程图120中被指定,该过程将被重复直到所有的节点140都被指定一个排列并且所有的弧线145已经指定了交换。以这样的方式,第一个路径之后,在目标排列中除伪出口节点160(2)外,最后的节点已经被指定了一个排列。
根据试探的,然而,当控制流程图120上的路径距离是两倍或更长大于排列距离的时候,通过在路径上从最初的排列移动到目标排列,产生补充的交换。依据确定的最短的连接途径165(1),排列在代码生成期间可以通过它们模块依赖偏移量被保存到参考变量。这些交换可以使附加码沿着弧线145被产生。
为了更快地发现如上所指出的最短的连接途径165(1),在一些实施例中,可以使用一个递增的最短的连接途径算法。对于一个给定的控制流程图,比如如图3所示的控制流程图120,使用了递增的最短的连接途径算法,最短的连接途径(例如,165(1)和165(2))可以被重复从一个它自己的组件(子集)来确定,遍历不在组件里的弧线145和节点140。
更确切地说,一个最短的连接途径可以被确定,例如,{N0,A1,N1,A2,N2,...,An,Nn},这样a)N0和Nn在组件中;b)N1.....N(n-1)不在组件中;c)A1....An不在组件中;d)N0可以是Nn,但是全部其它的Ni(或相当于所有的Ai)是不同的;e)每个Ai被包括而不考虑它的方向。当控制流程图120中的弧线145被指向的时候,为了这个最短的连接途径的例子的目的,方向被忽视,因为当在该反向弧线中添加交换代码时,理论上讲可以使它们的交换以反向的顺序插入。
根据一个实施例,在下表IV中示出了用于递增的最短连接途径算法的伪代码,其中控制流程图120的弧线145可以使用适当的函数被增加,所述的适当的函数包括nextOnPath弧,SPFrom节点,SPTo节点和一个整数键。然而,如果弧是在路径的开始,弧线的列表可以利用nextOnPath获取。每个弧x被认为是伪代码中的路径x。在操作中,1)函数SPHeap用组件C中的节点的初始列表首先被初始化一次;2)查找下一个将被调用的最短连接途径processSPHeap;3)对于每个在路径中的节点,将节点加到组件C中并且调用函数shortestPathUpdateNode;4)步骤2-3被重复直到步骤2返回零,表示在控制流程图120中没有其它的路径还需要被遍历。
表IV
void initializeSPHeap(heap H,component C) { for all nodes Nin C{ mark N visited shortestConnectingWalkNewNode(N,nil,H,C) } } <!-- SIPO <DP n="16"> --> <dp n="d16"/> //incrementally obtain shortest connecting walk arc processSPHeap(heap H,component C) { while(H is not empty){ remove winning arc from H and call it P ifP->SPTo has not been visited{ ifP->nextOnPath is nil{//P->SPFrom is in the component if(P->SPTo is in component c){ returnP //trivial one-arc path } } find an arc M over union of all predecessors and successors of P- >SPTo not in the component with minimum key,else let M be nil if M is not nil{ let REV be the reverse of the path M//(exchange SPFrom and SPTo,and altering nextOnPath fields) append path REV to the end of path P return arc P } } else{ mark P->SPTo as visited shortestConnecting WalkNewNode(P->SPTo,P,H,C) } } return nil } //update a previous reached node when a new path to it is found void shortestConnecting WalkUpdateNode(node N,arc I,heap H,component C) { <!-- SIPO <DP n="17"> --> <dp n="d17"/> arcM:=nil integer L:=undefined for arc A in union of predecessors and successors ofn { if arc A is not I and arc A is not in componentC { //NOTE:this is an incomplete path,but the lower bound on the length of any complete //path that includes it is 2*sum of arc values in path so far ifA->key>I->key+2*A->value { A->nextOnPath:=I//found shorter path } ifA->nextOnPath is I { A->key:=I->key+2*A->value if arc A has already been visited { shortestConnectingWalkUpdateNode(A->SPto,A, H) }else{ H->updateEntry(A) } }else{//we found a complete path--set key to its true length integer T=(incoming->key+a->key)/2 if M is nil or T<L { M:=A L:=T } <!-- SIPO <DP n="18"> --> <dp n="d18"/> } } } ifM is not nil { if I->key>=M->key { I->key:=M->key H->updateEntry(I) }else{ M->key:=L M->nextOnPath:=I H->updateEntry(M); } } } void shortestConnecting WalkNewNode(node N,arc I,heap H,component C) { arc M:=nil integer L:=undefined for arc A in union of predecessors and successors of N { if A s not I and A is not in C { if A has not been visited { mark A as visited A->key:=I->key+2*A->value A->nextOnPath:=I }else ifA->key>I->key+2*A->value <!-- SIPO <DP n="19"> --> <dp n="d19"/> { A->nextOnPath:=I A->key:=I->key+2*A->value if node A->SPTo has not been visited { shortestConnecting WalkUpdateNode(A->SPTo,A,H)} else{ H->updateEntry(A) } }else if I is not nil { integer T=(I->key+A->key)/2 if M is nil or T<L { if ArcAtEndOfpath(1)is not ArcAtEndOfpath(A) { M=A L=T } } } } } ifM is not nil { ifI->key<=L { I->key:=L H->updateEntry(I) }else{ <!-- SIPO <DP n="20"> --> <dp n="d20"/> M->key:=L M->nextOnPath:=I H->updateEntry(M) } } }
参考图5A和5B所示,一个通信链路200和一个无线链路205可以安全地分别将内容从一个平台分布到另一个平台。尤其是,一个可以通过通信链路200将编译器平台215连接到用户平台220的网络210可以在用户平台220上提供内容保护。用户平台220的例子包括基于处理器的装置,计算装置,通信装置,或从一个内容供应商传送保护内容的用户装置。同样地,如图5B所示,通过一个无线通信链路210a,一个无线编译器平台215a可以将内容提供给无线用户平台215b。例如,无线用户平台215b可以是一个无线通信装置或一个便携装置,两个都能够接收来自内容供应商的保护内容。无线用户平台215b的其它的例子包括移动装置,例如可以包括适当的安全硬件以便适当的保护其中的内容的移动电话。有时,如果不使用安全硬件,软件应用可以在移动电话中使用,在某些情况下用具有可移除的软件代替安全硬件。
在本发明的一些实施例中可以通过一个基于处理器的系统220执行软件来实现,如图6A所示的基于图5A所示的编译器平台,包括源级编译器30,用于实现基本上可以保证程序55内部的嵌入机密75的安全的内容保护。在本发明的许多实施例中,基于处理器的系统220可以包括一个通过接口235连接到显示器230和一个系统存储器232的处理器225。在一个实施例中,说明性的接口235可以是一个桥接电路,或在另一个实施例中,可以包括一个或多个总线。源级编译器30和商用编译器238可以根据与本发明的某些实施例中相一致的操作被加载到系统存储器232。
在基于处理器的系统220中,一个主总线240依据外设部件接口(PCI)标准,例如,可以通过接口235连接一个网络控制器245,一个硬盘驱动器(HDD)248和一个基本输入/输出系统(BIOS)到处理器225。以这样的方式,当提供了外围装置的接口的时候,主总线240可以连接到接口235。对于本发明的一些实施例,基于处理器的系统220可以负责分布编译器改进的代码60。其它的无线系统可以在本发明的其它的实施例中实现。
如图6B所示的无线装置260示意地描述了根据如图5B所示的用户平台215b的装置,该装置包括一个半导体非易失性存储器300,一个用户接口305,一个无线接口310,和一个天线320。根据本发明的一个实施例,无线装置260的组件可以是一个基于处理器的装置,该装置可以更进一步包括一个控制器275,一个接口280,一个只读存储器(ROM)285,和一个随机存取存储器(RAM)290,通过内部总线295连接。接口280可以通过无线接口310和天线320与例如编译器平台215或215a(分别如图5A和5B所示)的平台通信,所述的编译器平台可以分布例如编译器改进代码60的内容。在不同的实施例中,可以使用非无线装置。无线装置260的例子包括移动装置和/或蜂窝式耳机,其目标在于通过商业厂家或服务提供者提供不同的用户服务。在一些实施例中,为了操作这样的服务或简单地启动或重新配置装置、内容,例如,编译器改进代码60可以在无线电装置260中通过大气干扰以与平台无关的方式被接收。
在一些实施例中,独立于的平台编译器改进代码60可以方便地不需要独立于位置的代码,可以不使用自修改代码(即可以在ROM 285内工作),可以独立于指令集(跨平台),并且显著地改善性能,从而防止例如缓冲器溢出的攻击和其它的攻击,包括调用来自未经授权的外部代码的非输出的内部函数。独立于平台的编译器改进代码60还可以结合设计用于在机器代码级工作的不同的特定平台抗干扰的软件一起使用。顺便提一句,为无线装置260开发程序55的源语言60可以是应用语言,该应用语言的性能和隐藏可以很容易地被分析和优化,而且当允许为不同的应用程序,例如实时视频及声音提供,引用计数垃圾收集时,可以检验以证明正确性。
本发明已经针对有限的实施例进行了详细说明,本领域的普通技术人员可以据此进行很多修改和变化。附加权利要求将覆盖落在属于本发明的精神和范围内的全部这些修改和变化。
Claims (20)
1.一种实现可移植内容保护以保护机密安全的方法,包括:
基于适合于相关数据的源语言而开发一个包括该相关数据和一个机密的程序;以及
为隐藏上述的机密而以一个随机的执行顺序编译该程序。
2.如权利要求1的方法,包括:使用一个种子指示以便随机地选择编译协定。
3.如权利要求1的方法,其中,以随机的执行顺序编译该程序包括在执行期间混排上述的相关数据。
4.如权利要求3的方法,包括:
使用源语言以便识别程序的一个或多个内存分配以及并行流对象;以及
使上述的程序的随机的执行顺序能够以上述的一个或多个内存分配以及并行流对象为基础。
5.如权利要求1的方法,包括:
嵌入上述的机密到程序的源代码中;以及
以一个抗干扰方式将程序的源代码转换为与平台无关的编译器改进源代码。
6.如权利要求5的方法,包括:通过优化代码隐藏,在将编译器改进的源代码重新编译为特定平台的编译器上的目标代码,从而保护上述的机密不被泄密。
7.如权利要求2的方法,包括:
决定是否有可用的种子指示以和调试信息一起使用;以及
如果是这样的话,允许程序的重新编译以种子指示以及调试信息为基础。
8.如权利要求3的方法,包括:
为程序以及相关数据建立一个控制流程图,该控制流程图指示程序源代码内的一个或多个数据与代码的路径;
识别相关数据中的一个或多个数据变量以便作为数组元素随机地分配;
在上述程序的上述源代码中插入代码以便沿着对于上述的一个或多个数据变量的至少一个数据变量的上述的一个或多个数据路径的至少一个数据路径混排数据;以及
当通过随机、唯一的数据交换顺序,代码路径汇聚达到某一排列时,产生相同的数据排列。
9.如权利要求4的方法,包括:
在单任务语义非标准语言中使用一个适用的源语言以便获得程序的源代码;
为堆分配对象而引入参考计数,以便帮助单任务语义非标准语言而进行实时内存的回收;以及
以随机的执行顺序执行程序以便当重新编译时保存适用的源语言的单任务语义非标准语言。
10.如权利要求5的方法,包括:
在编译器改进源代码中引入至少一个多余的以及辅助的计算;以及
在重新编译期间检测在至少一个多余的以及辅助的计算中是否产生一个变化。
11.一种实现可移植内容保护以保护机密安全的方法,包括:
开发一个程序,该程序包括一个或多个数据变量,代码块,跳转以及在控制流程图中指示对于上述的一个或多个数据变量的至少一个唯一变量设计的机密;以及
以上述的至少一个唯一变量设计为基础编译程序隐藏上述的机密,在执行期间混排数据。
12.如权利要求11的方法,包括:识别一个或多个代码块作为节点和识别一个或多个跳转作为控制流程图的弧线。
13.如权利要求12的方法,包括:
为控制流程图增加一个或多个伪入口以及出口节点;
标记上述的一个或多个伪入口以及出口节点为指定的;
为上述的一个或多个数据变量分配不同的数组;以及
为上述的一个或多个数据变量的不同的变量偏移量指定随机排列。
14.如权利要求13的方法,包括:
找到控制流程图上连接上述的一个或多个伪入口以及出口节点的两个标记的节点的最短的连接途径;
遍历标记全部的弧线与节点的最短的连接途径;
判定是否全部的弧线已经被标记;以及
否则,找到另一个连接两个不同标记节点的最短的连接途径。
15.如权利要求14的方法,包括对应全部被标记的弧线,使用节点排列生成代码以便判定在上述的一个或多个块的至少一个块中上述的不同的变量的偏移量,以及为控制流程图的上述的一个或多个弧线的至少一个弧线产生辅助代码。
16.一个系统包括:
用于开发程序的用户接口,该程序包括基于适合相关数据的源语言的相关数据和一个机密;
与上述的用户接口连在一起的预编译器,用以为隐藏上述的机密而以一个随机的执行顺序编译该程序;和
一个处理器,用以执行上述的用户接口以及上述的预编译器。
17.如权利要求16的系统,进一步的包括:
生成器,提供一个种子指示以便为程序的不同的编译随机地选择编译协定。
18.如权利要求17的系统,进一步的包括:
一个混排装置,通过上述的预编译器在执行期间移动上述的相关数据。
19.如权利要求16的系统,其中用户接口允许在上述的预编译器以一个抗干扰方式将程序的源代码转换成为与平台无关的编译器改进源代码之前将上述的机密嵌入到程序的源代码中。
20.如权利要求18的系统,进一步的包括其上存储有上述的用户接口、上述的预编译器、上述的生成器以及上述的混排算法的一个存储介质。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/355,967 US7584354B2 (en) | 2003-01-31 | 2003-01-31 | Implementing portable content protection to secure secrets |
US10/355967 | 2003-01-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1519717A CN1519717A (zh) | 2004-08-11 |
CN1290007C true CN1290007C (zh) | 2006-12-13 |
Family
ID=32770666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 03132768 Expired - Fee Related CN1290007C (zh) | 2003-01-31 | 2003-08-29 | 实现可移植内容保护以保护机密安全 |
Country Status (2)
Country | Link |
---|---|
US (3) | US7584354B2 (zh) |
CN (1) | CN1290007C (zh) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7584354B2 (en) | 2003-01-31 | 2009-09-01 | Intel Corporation | Implementing portable content protection to secure secrets |
US8510571B1 (en) * | 2003-03-24 | 2013-08-13 | Hoi Chang | System and method for inserting security mechanisms into a software program |
GB2405958A (en) * | 2003-08-20 | 2005-03-16 | Macrovision Europ Ltd | Code obfuscation and controlling a processor by emulation |
FR2866451B1 (fr) * | 2004-02-18 | 2008-02-29 | Cit Alcatel | Procede et dispositif de transformation d'un systeme d'exploitation en vue de la protection d'un programme informatique contre des intrusions exterieures |
CN1977531A (zh) * | 2004-06-28 | 2007-06-06 | 松下电器产业株式会社 | 程序生成装置、程序测试装置、程序执行装置及信息处理系统 |
KR100636162B1 (ko) * | 2004-08-25 | 2006-10-18 | 삼성전자주식회사 | 소프트웨어 보호 방법 및 그 장치 |
CN101506817B (zh) * | 2006-08-21 | 2010-11-10 | 耶德托公司 | 控制数字内容的分发 |
US20090249492A1 (en) * | 2006-09-21 | 2009-10-01 | Hans Martin Boesgaard Sorensen | Fabrication of computer executable program files from source code |
US8799876B2 (en) * | 2006-09-29 | 2014-08-05 | Intel Corporation | Method and apparatus for assigning subroutines |
US8136091B2 (en) * | 2007-01-31 | 2012-03-13 | Microsoft Corporation | Architectural support for software-based protection |
US20080289045A1 (en) * | 2007-05-17 | 2008-11-20 | Thomas Michael Fryer | Method and device for encoding software to prevent reverse engineering, tampering or modifying software code, and masking the logical function of software execution |
US8312518B1 (en) * | 2007-09-27 | 2012-11-13 | Avaya Inc. | Island of trust in a service-oriented environment |
US8176337B2 (en) * | 2008-03-12 | 2012-05-08 | Apple Inc. | Computer object code obfuscation using boot installation |
US8589698B2 (en) * | 2009-05-15 | 2013-11-19 | International Business Machines Corporation | Integrity service using regenerated trust integrity gather program |
US8255620B2 (en) * | 2009-08-11 | 2012-08-28 | Texas Memory Systems, Inc. | Secure Flash-based memory system with fast wipe feature |
US9892661B2 (en) * | 2009-12-11 | 2018-02-13 | Digital Immunity Llc | Steganographic embedding of hidden payload |
US8621237B1 (en) * | 2011-06-30 | 2013-12-31 | Emc Corporation | Protecting against cryptographic key exposure in source code |
CN103685180B (zh) * | 2012-09-13 | 2015-11-25 | 腾讯科技(深圳)有限公司 | 显示控制的方法和装置 |
US9300736B2 (en) | 2012-09-13 | 2016-03-29 | Tencent Technology (Shenzhen) Company Limited | Display control method and device |
US20140230960A1 (en) * | 2013-02-20 | 2014-08-21 | Gojo Industries, Inc. | Personal Dispenser Refilling Station |
CN103413074B (zh) * | 2013-07-08 | 2016-03-16 | 北京深思数盾科技有限公司 | 一种通过api实现软件保护的方法和装置 |
CN104766019A (zh) * | 2014-01-08 | 2015-07-08 | 中兴通讯股份有限公司 | 网页中文本信息保护方法、装置和系统 |
US20150199530A1 (en) * | 2014-01-10 | 2015-07-16 | General Electric Company | Systems and Methods With Cryptography and Tamper Resistance Software Security |
CN105207986A (zh) * | 2015-07-31 | 2015-12-30 | 北京奇虎科技有限公司 | 一种展示网络攻击行为的方法和装置 |
US10068097B2 (en) * | 2015-08-12 | 2018-09-04 | Microsoft Technology Licensing, Llc | Data center privacy |
US9830149B2 (en) * | 2016-01-14 | 2017-11-28 | International Business Machines Corporation | Automatic extraction of sensitive code fragments to be executed in a sandbox |
KR101906823B1 (ko) * | 2016-03-07 | 2018-12-05 | 주식회사 럭스로보 | 멀티 모듈 컴파일 시스템 및 멀티 모듈 컴파일 방법, 그리고 컴파일러 프로그램을 갖는 컴퓨터 판독가능 저장매체 |
JP7132926B2 (ja) * | 2017-01-05 | 2022-09-07 | コーニンクレッカ フィリップス エヌ ヴェ | コンパイルデバイス及びコンパイル方法 |
WO2018211676A1 (en) * | 2017-05-18 | 2018-11-22 | Nec Corporation | Multiparty computation method, apparatus and program |
CN107423270B (zh) * | 2017-07-27 | 2020-02-18 | 国云科技股份有限公司 | 一种在线流程图和代码实时互转的实现方法 |
US10671758B2 (en) * | 2017-08-30 | 2020-06-02 | Micro Focus Llc | Redacting core dumps by identifying modifiable parameters |
US10402178B2 (en) * | 2018-01-26 | 2019-09-03 | Accenture Global Solutions Limited | Cross platform content management and distribution system |
EP3534253A1 (en) * | 2018-02-28 | 2019-09-04 | Koninklijke Philips N.V. | Compiling device and method |
US11403372B2 (en) * | 2019-01-29 | 2022-08-02 | Irdeto Canada Corporation | Systems, methods, and storage media for obfuscating a computer program by representing the control flow of the computer program as data |
US11362807B2 (en) * | 2019-08-14 | 2022-06-14 | R3 Llc | Sealed distributed ledger system |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5790859A (en) * | 1995-12-21 | 1998-08-04 | International Business Machines Corporation | Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler |
US6205550B1 (en) | 1996-06-13 | 2001-03-20 | Intel Corporation | Tamper resistant methods and apparatus |
US6286135B1 (en) * | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
CA2293650C (en) * | 1997-06-09 | 2012-09-25 | Christian Sven Collberg | Obfuscation techniques for enhancing software security |
US6480959B1 (en) * | 1997-12-05 | 2002-11-12 | Jamama, Llc | Software system and associated methods for controlling the use of computer programs |
US5991399A (en) * | 1997-12-18 | 1999-11-23 | Intel Corporation | Method for securely distributing a conditional use private key to a trusted entity on a remote system |
US6041122A (en) | 1998-02-27 | 2000-03-21 | Intel Corporation | Method and apparatus for hiding crytographic keys utilizing autocorrelation timing encoding and computation |
US6957341B2 (en) * | 1998-05-14 | 2005-10-18 | Purdue Research Foundation | Method and system for secure computational outsourcing and disguise |
US6427234B1 (en) * | 1998-06-11 | 2002-07-30 | University Of Washington | System and method for performing selective dynamic compilation using run-time information |
DE19846676C1 (de) * | 1998-10-09 | 2000-03-02 | Siemens Ag | Verfahren zur Absicherung von Einsprungsadressen |
US6463538B1 (en) * | 1998-12-30 | 2002-10-08 | Rainbow Technologies, Inc. | Method of software protection using a random code generator |
US6594761B1 (en) * | 1999-06-09 | 2003-07-15 | Cloakware Corporation | Tamper resistant software encoding |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
US6477252B1 (en) | 1999-08-29 | 2002-11-05 | Intel Corporation | Digital video content transmission ciphering and deciphering method and apparatus |
US6256577B1 (en) | 1999-09-17 | 2001-07-03 | Intel Corporation | Using predictive traffic modeling |
US6832369B1 (en) * | 2000-08-01 | 2004-12-14 | International Business Machines Corporation | Object oriented method and apparatus for class variable initialization |
US6694435B2 (en) * | 2001-07-25 | 2004-02-17 | Apple Computer, Inc. | Method of obfuscating computer instruction streams |
US20030149878A1 (en) * | 2002-02-01 | 2003-08-07 | Perkins Gregory Michael | Method of marking a program for identification/authentication |
US7086088B2 (en) * | 2002-05-15 | 2006-08-01 | Nokia, Inc. | Preventing stack buffer overflow attacks |
US7124445B2 (en) * | 2002-06-21 | 2006-10-17 | Pace Anti-Piracy, Inc. | Protecting software from unauthorized use by converting source code modules to byte codes |
US7254586B2 (en) * | 2002-06-28 | 2007-08-07 | Microsoft Corporation | Secure and opaque type library providing secure data protection of variables |
US7370321B2 (en) * | 2002-11-14 | 2008-05-06 | Microsoft Corporation | Systems and methods to read, optimize, and verify byte codes for a multiplatform jit |
US7149900B2 (en) * | 2002-12-12 | 2006-12-12 | Intel Corporation | Method of defending software from debugger attacks |
US7584354B2 (en) | 2003-01-31 | 2009-09-01 | Intel Corporation | Implementing portable content protection to secure secrets |
CN1569569B (zh) | 2003-07-24 | 2010-12-01 | 维多利诺斯公开股份有限公司 | 刀身防护装置 |
-
2003
- 2003-01-31 US US10/355,967 patent/US7584354B2/en not_active Expired - Fee Related
- 2003-08-29 CN CN 03132768 patent/CN1290007C/zh not_active Expired - Fee Related
-
2009
- 2009-07-23 US US12/507,863 patent/US8166471B2/en not_active Expired - Fee Related
-
2012
- 2012-03-22 US US13/426,708 patent/US8875112B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20040153661A1 (en) | 2004-08-05 |
US8166471B2 (en) | 2012-04-24 |
US20120180032A1 (en) | 2012-07-12 |
US7584354B2 (en) | 2009-09-01 |
CN1519717A (zh) | 2004-08-11 |
US8875112B2 (en) | 2014-10-28 |
US20100077228A1 (en) | 2010-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1290007C (zh) | 实现可移植内容保护以保护机密安全 | |
CN101568927B (zh) | 混淆计算机程序代码 | |
US7366914B2 (en) | Source code transformation based on program operators | |
CN105354449A (zh) | 一种面向Lua语言的加扰混淆方法和解密方法 | |
US20040115860A1 (en) | Method to manufacture a phase change memory | |
CN110168548B (zh) | 编译设备和方法 | |
CN110210190A (zh) | 一种基于二次汇编的代码混淆方法 | |
Edler von Koch et al. | Exploiting function similarity for code size reduction | |
CN109543368B (zh) | 一种基于中间语言解释器的跨平台源码虚拟化保护方法 | |
Murthy et al. | Buffer merging—a powerful technique for reducing memory requirements of synchronous dataflow specifications | |
CN1672132A (zh) | 源到源的分区编译 | |
Zhao et al. | Polsca: Polyhedral high-level synthesis with compiler transformations | |
CN1788251A (zh) | 处理安全消息认证控制指令 | |
CN105933111B (zh) | 一种基于OpenCL的Bitslicing-KLEIN的快速实现方法 | |
Muñoz et al. | Multiagent systems protection | |
Charot et al. | A flexible code generation framework for the design of application specific programmable processors | |
CN1321276A (zh) | 可配置的硬件块 | |
Chouhan et al. | Pertinent path profiling: Tracking interactions among relevant statements | |
Bertholon et al. | Shadobf: A c-source obfuscator based on multi-objective optimisation algorithms | |
CN105095698A (zh) | 基于最近执行的程序代码的程序代码模糊处理 | |
Kim et al. | Remote progressive firmware update for flash-based networked embedded systems | |
Nonaka et al. | How slow, or fast, are standard random walks? analysis of hitting and cover times on trees | |
CN1975753A (zh) | 一种对程序执行器的程序信息的保护方法 | |
CN106407754B (zh) | 一种生成随机布局程序的方法及装置 | |
CN105487846A (zh) | 快速开发x86/x64平台shellcode的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20061213 Termination date: 20170829 |
|
CF01 | Termination of patent right due to non-payment of annual fee |