CN104321774B - 用于防逆向工程和/或篡改程序的方法、系统以及设备 - Google Patents
用于防逆向工程和/或篡改程序的方法、系统以及设备 Download PDFInfo
- Publication number
- CN104321774B CN104321774B CN201380027303.6A CN201380027303A CN104321774B CN 104321774 B CN104321774 B CN 104321774B CN 201380027303 A CN201380027303 A CN 201380027303A CN 104321774 B CN104321774 B CN 104321774B
- Authority
- CN
- China
- Prior art keywords
- processor
- program
- bit string
- instruction
- machine instruction
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 230000008859 change Effects 0.000 claims abstract description 49
- 238000006243 chemical reaction Methods 0.000 claims description 25
- 230000014509 gene expression Effects 0.000 claims description 7
- 238000003860 storage Methods 0.000 claims description 5
- 238000013507 mapping Methods 0.000 claims description 2
- 238000004088 simulation Methods 0.000 claims 1
- 238000004590 computer program Methods 0.000 abstract description 5
- 230000008569 process Effects 0.000 abstract description 4
- 230000006870 function Effects 0.000 description 11
- 238000012545 processing Methods 0.000 description 8
- 229910002056 binary alloy Inorganic materials 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000004044 response Effects 0.000 description 5
- 238000013500 data storage Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 238000009826 distribution Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000002708 enhancing effect Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- 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/16—Program or content traceability, e.g. by watermarking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
Abstract
计算机程序的未授权使用通过编译处理器而不是仅仅将程序编译成机器代码而变得困难。处理器应该以其对机器指令(即其转换数据)做出响应的方式根据作为输入的任意位串B和程序P被计算。处理器的转换数据被计算,所述处理器在所述处理器将给定位串B用作机器指令的源时将执行由所述程序P所定义的操作。处理器被配置为使得它将根据所述转换数据执行机器指令。其他程序P’然后可以被编译成针对该处理器并且由所述处理器执行的机器指令B’。在没有所述位串B和所述原始程序P的知识的情况下,难以修改机器指令B’使得不同的处理器将执行其他程序P’。
Description
技术领域
本发明涉及一种提供支持防逆向工程和/或篡改程序的计算机程序的执行的方法,并且涉及一种用于执行程序的设备和系统。
背景技术
现今互联网提供对数字内容的方便且无所不在的访问。由于参与设备(例如,PC平台)的开放性,互联网作为用于敏感内容的分发媒介的使用对确保内容提供商的利益产生强迫挑战。特别地,对于诸如PC或安卓(Android)操作系统之类的平台,必须假定用户完全控制提供对内容和无限数量的时间与资源的访问以攻击和绕过任何内容保护机制的硬件和软件。
对于应用的统一执行,互联网需要接收平台运行所谓的虚拟机(例如,Java VM)。这些虚拟机提供开放的、统一的且文档齐全(well-documented)的执行环境。结果,互联网作为分发机制的弱点被放大,因为应用的逆向工程和篡改应用的预防是困难的。
US 2010/313188公开了一种用于防止软件的未授权修改的方法。根据这个方法,特殊的转换器将软件转换成仅适合于在“秘密虚拟机”(SVM)上执行的“秘密虚拟机语言”,对于所述秘密虚拟机来说其操作和存储器分配的方法未被公布。因为处理的SVM方法是未知的,所以黑客将发现难以理解和修改代码,或者难以尝试在运行时期间拦截数据。
发明内容
除了其它的之外,目的在于增强在开放环境中执行的应用对逆向工程和篡改攻击的保护。本发明由独立权利要求定义;从属权利要求定义有利的实施例。
根据一个方面提供了配置处理器的方法,所述方法包括
- 接收位串和程序,
- 配置处理器使得当处理器相继将所述位串用作至少两个机器指令的源时处理器执行所述程序,其中处理器被配置成在处理器不将所述位串用作机器指令的源时不执行所述程序。
以这种方式,将另外的程序未授权地用于经配置的处理器变得困难。攻击者将需要知道处理器如何被配置,这是困难的因为配置取决于用来配置处理器的程序,并且这个程序对于攻击者而言可能是未知的。
所述方法可以用进行常规编译器所做的操作相反的操作的编译器来具体化:不是从较高级程序为给定(虚拟)处理器编译机器指令程序,而是编译器从机器指令程序和较高级程序编译(虚拟)处理器。这可以与从另外的较高级程序为经编译的(虚拟)处理器编译另外的程序的编译器组合。
在优选实施例中,所述方法包括:相继将程序转换成至少两个参考机器指令,并且相继根据位串和所述至少两个参考机器指令来计算转换数据,以用于配置处理器使得当处理器将位串用作机器指令的源时经配置的处理器执行程序;以及配置处理器使得它将根据所述转换数据执行机器指令。
转换数据可以包括定义从位串的一部分到机器指令的操作码的转换的数据,所述操作码诸如用于加、减、加载、存储以及跳转操作等的操作码。
实现虚拟机的任何已知方法可以被用来配置处理器。例如,经配置的处理器的软件仿真可以使用例如因JAVA虚拟机仿真而所知的技术。并且参考指令可以是用于虚拟机的指令。
作为其他示例,可以通过将数据加载到将机器指令转换成用于处理器的控制信号以使处理器施行操作的查找表中、或者通过将诸如可编程逻辑阵列之类的转换电路配置成施行该转换、或者通过制造具有带设计成根据转换数据来执行响应机器指令中对应的操作的逻辑电路结构的处理电路的集成电路、或者通过支持虚拟机的任何其他方式来配置处理器。
可以通过配置的迭代应用进一步掩盖处理器的配置。
在实施例中,所述方法包括将位串划分成连续部分以供由处理器用作相应的机器指令,以及确定用于在对应位置处相继将位串的连续部分转换成至少两个参考机器指令的转换。通过将位串划分成连续部分它们可以与系列中的相应的机器指令一对一配对。对于每对部分位串和机器指令,转换可以例如以查找表的形式或作为布尔函数的一部分被设计。
尽管可能碰巧多个不同的位串需要被转换成相同的参考指令,但是这是不成问题的。转换数据可以简单地将多个不同的位串映射到相同的参考指令。可以以许多方式解决其中位串的两个或更多个部分是相同的而需要被映射到不同的参考指令上的相反情形。
例如,一个人可以选择位串的连续部分以具有比参考机器指令的长度更大的长度。例如,所有参考机器指令可以是特定位数长的,然而位串的所有连续部分是某个较大位数长的。在每个附加位被分配给位串情况下冲突的机会降低了。
作为用来解决冲突的第二方式,所述方法可以包括确定与子串在由处理器执行时的不同部分相对应的程序计数器值。例如,一个人可以模拟程序到参考处理器中的加载并且确定每个指令被加载所在的地址。与参考指令相对应的部分被确定为具有相同的程序计数器值。在确定从一部分到指令的转换数据之前,位串的各部分与从程序计数器值得到的信息组合,如此获得消歧部分。从消歧部分到参考机器指令的转换被完成。
例如,一个人可以将程序计数器的一个或多个最低有效位级连到该部分。例如,一个人可以将程序计数器值打散成较少位并且将较少位附加到该部分。
以更大转换数据为代价,将程序计数器值的足够多信息与各部分组合将在对各部分进行消歧时总是成功。
可以在更小规模上确定转换,例如,转换数据将该部分的不同子部分转换成参考机器指令在参考机器程序中的对应位置处的操作码、操作数和/或结果代码。
例如,可以针对操作码分别地做参考指令的一部分所需的转换,然后可以每操作码地做转换。
可能碰巧位串中的各部分的数目短于程序中的参考指令的数目。这可以通过填补位串(即将具有值零的位插入到位串中)来解决;它还可以通过忽略这个部分的位串并且仅依靠程序计数器来解决。然而如果各部分的数目至少是参考指令的数目则是优选的。例如,在实施例中要求B中的位数至少和参考指令的数目一样大。
有趣地,获得了在它接收位串并且根据转换数据应用转换时执行参考指令的处理器。而且,处理器仍然是可编程的并且能够执行任意程序。例如,所述方法可以包括确定没有在由转换数据所定义的转换下转换成参考机器指令的原型的参考机器指令,以及为没有不同于已经被定义在转换数据中的原型的原型的所述参考机器指令选择原型并且扩展转换数据以用于配置处理器,使得当处理器将所选原型用作机器指令的源时经配置的处理器执行所确定的参考机器指令。
还可以使得转换数据对于用于采用所述转换数据而被配置的处理器的编译器可用。这允许采用该编译器编译另一程序,所述编译为该处理器产生编译的机器指令的程序,并且采用所述处理器执行编译的机器指令的程序。
本发明的一个方面涉及用于配置处理器的设备,所述设备包括
- 用于接收位串和程序的接收器
- 配置处理器,其被配置成
- 相继将程序(P)转换成至少两个参考机器指令;并且
- 相继根据位串和所述至少两个参考机器指令来计算转换数据,以用于配置处理器使得当处理器相继将位串用作至少两个机器指令的源时经配置的处理器执行程序,而当所述处理器不将位串用作机器指令的源时处理器不执行程序,并且配置成
- 配置处理器使得它将根据所述转换数据执行机器指令。
根据一个方面提供了配置处理器的方法,所述方法包括
- 提供位串B;
- 接收程序P;
- 计算在处理器将位串B用作机器指令的源时将执行由程序P所定义的操作的处理器的操作语义,所述操作语义根据作为输入的位串B和程序P被计算;
- 配置处理器使得它将根据所述操作语义执行机器指令。
以这种方式,将其他处理器上的另外的程序未授权地用于经配置的处理器变得困难。攻击者将需要确定经配置的处理器的操作语义来这样做,如果被用来配置处理器的位串和程序是未知的则这是困难的。
提供了进行常规编译器所做的操作相反的操作的编译器:不是从较高级程序为给定(虚拟)处理器编译机器指令程序,而是编译器从机器指令程序和较高级程序编译(虚拟)处理器。这可以与从另外的较高级程序为经编译的(虚拟)处理器编译另外的程序的编译器组合。
处理器的操作语义可以包括定义与机器指令的操作码相对应的操作的数据,所述操作码诸如用于加、减、加载、存储以及跳转操作等的操作码。实现虚拟机的任何已知方法可以被用来根据给定操作语义来配置处理器。例如,可以使用例如因JAVA虚拟机仿真而所知的技术来使用操作语义的软件仿真。作为其他示例,可以通过将数据加载到将机器指令转换成用于处理器的控制信号以使处理器施行操作的查找表中、或者通过将诸如可编程逻辑阵列之类的转换电路配置成施行该转换、或者通过制造具有带设计成根据操作语义执行响应机器指令中对应的操作的逻辑电路结构的处理电路的集成电路、或者通过支持虚拟机的任何其他方式来配置处理器。
可以通过配置的迭代应用进一步掩盖处理器的配置。
计算机程序的未授权使用通过编译处理器而不是只将程序编译成机器代码而变得困难。处理器应该以其对机器指令即其操作语义做出响应的方式根据作为输入的任意位串B和程序P被计算。处理器的操作语义被计算,所述处理器在处理器将给定位串B用作机器指令的源时将执行由程序P所定义的操作。处理器被配置为使得它将根据所述操作语义执行机器指令。其他程序P’然后可以被编译成针对该处理器并且由该处理器执行的机器指令B’。在没有位串B和原始程序P的知识的情况下,难以修改机器指令B’使得不同的处理器将执行其它程序P’。
在实施例中,所述方法包括:采用用于具有所述操作语义的处理器的编译器来编译另一程序P’,所述编译为该处理器产生编译的机器指令的程序;采用所述处理器执行编译的机器指令的程序。
在实施例中,程序P是可编程处理器模拟器程序,以用于模拟另一处理器。
在实施例中,可编程处理器模拟器程序通过以下步骤获得:提供另一位串;接收另一可编程处理器模拟器程序;计算另一可编程处理器的另外的操作语义,所述另一可编程处理器在该另一可编程处理器将另一位串用作机器指令的源时将执行由另一可编程处理器模拟器程序所定义的操作,所述另外的操作语义根据作为输入的另一位串和另一可编程处理器模拟器程序被计算。
在实施例中,位串B和另一位串是相互不同的。
在实施例中,所述方法包括接收原始应用A、将原始应用A分成第一部分A1和第二部分A2、将第一部分A1用作程序P以及将第二部分A2的目标代码用作位串B。
在实施例中,所述方法包括接收原始应用A、将原始应用A分成第一部分A1和第二部分A2、将第一部分A1用作程序P、将第二部分A2与水印C组合以及将第二部分A2与水印C的组合用作位串B。
在实施例中,结果得到的处理器P被表示为可综合硬件描述。
在实施例中,位串B的各部分是声明知识产权的文本或符号的表示。
在实施例中,位串B的各部分是识别用户的文本的表示。
在实施例中,位串B的各部分从计算环境动态地收集。
在实施例中,对输入串的任何改变将防止原始应用α正确地工作。
本发明的一个方面涉及计算机程序产品,包括指令的程序,所述指令当由计算机执行时将使计算机接收程序P;计算在处理器将位串B用作机器指令的源时将执行由程序P所定义的操作的处理器的操作语义,所述操作语义根据作为输入的位串B和程序P被计算;生成配置数据以用于配置处理器,使得它将根据所述操作语义执行机器指令。
附图说明
这些和其他目的及有利方面使用下图从示例性实施例的描述中将变得显而易见
图1示出了用于执行程序的系统
图2图示了处理器架构
图3-8图示了变形编译
图9-11图示了另一实施例
具体实施方式
图1示出了用于执行程序的示例性系统。应强调,所图示的实施例被提供以图示而不是限制本发明。例如本发明可以由除该图中所示出的处理器外的其他类型的处理器来实现。系统包括配置编译器10、程序编译器11以及处理器12。配置编译器10和程序编译器11可以借助于在计算机(未显式地示出)上运行的计算机程序来实现。
处理器12包括程序存储器120、程序计数器122、指令解码器124、指令解码控制存储器126、执行电路128以及数据存储器129。编译器10具有用于接收程序P的输入端以及耦合到程序存储器120和指令解码控制存储器126的输出端,用于将机器代码程序B和定义处理器12对来自机器代码程序B的指令的响应的数据Q分别存储到程序存储器120和指令解码控制存储器126中。指令解码器124被耦合在指令存储器的输出端与执行电路128的控制输入端之间。程序计数器122具有耦合到指令存储器120的地址输入端并且耦合到指令解码器124的输出端。执行电路128被耦合到数据存储器129并且耦合到执行电路126的I/O端子。
配置编译器10、程序编译器11以及处理器12被示出为单个系统的一部分,应理解,它们不必被直接地耦合。处理器12可以在处理器12已接收到用来执行程序的命令时将配置编译器10和程序编译器11的输出从诸如半导体存储器、磁或光盘等的计算机可读介质加载到处理器12中,或者它可以被较早地(例如和在处理器12的制造期间一样早)加载。配置编译器10和程序编译器11可以在计算机可读介质上直接地写入输出数据,或者它可以在它到达处理器12之前随后被发送和/或拷贝任何次数。
取决于来自指令解码控制存储器126的数据,处理器12通过指令解码器124来提供来自程序存储器120的机器指令变成用于执行电路的控制码的转换。在实施例中,机器指令包含操作码(op码)和可选地一个或多个操作数码。操作数码可以识别具有用于由操作码所指示的操作的输入数据的寄存器的地址和来自操作的输出数据必须被存储在的寄存器的地址。代替地址,操作数码可以指示存储操作数数据的地址的寄存器的立即数(literaldata)或地址。在实施例中,经转换的控制码可以类似地具有待由执行电路128解释和执行的操作码和操作数码,但是可替换地,控制码可以是用于直接地控制执行电路128的组件的微码。
不同类型的处理器可能需要使用不同的op码来指示相同的操作,并且它们可能需要指示操作数数据和结果存储位置的不同方式。特定类型的处理器将向指令给予的解释(即,它将对单独的指令做出响应的方式)将被称作这种处理器的操作语义Q。如本文中所用的,操作语义指代定义处理器12如何将对机器指令做出响应的数据。不同类型的处理器可以具有不同的操作语义Q和Q’。符号Q还将被用来指代具有操作语义Q的处理器,即当该处理器被配置成执行与操作语义Q一致的指令时。
图2图示了更通用的处理器架构,包括程序存储器、指令取指器(fetcher)、指令解码器、执行单元、程序计数器(PC)、寄存器文件以及数据存储器。指令取指器接收程序计数器值,并且从程序存储器取出位模式(bit pattern)。这个位模式(指令)被供应给指令解码器。指令解码器生成执行位以掌控执行单元。这些执行位可以包含和微指令一样复杂且和用于寄存器索引的一元编码一样简单的事物。执行单元执行执行位,即,它在这些位的控制下施行操作。在执行位的控制下,执行单元可以从寄存器文件/程序存储器中取出数据并且更新程序计数器。
被保持在程序存储器中的指令常常被称为“机器代码”。它们是常常与汇编指令具有1对1关系的位模式。它们导致执行单元中的执行的模式。执行的这种模式确定程序的执行行为。我们将执行的模式称作程序的语义。
在图2的示例中,操作语义Q可以由指令解码器和/或执行单元定义。在图1的示例中,操作语义Q可以由存储在指令解码控制存储器126中的信息适配地定义。
指令解码器124可以例如通过使用从指令存储器120接收到的指令的操作码来在指令解码控制存储器126中查找经转换的操作码来转换位模式,以用于供应给执行电路128。原始操作码和经转换的操作码可以具有相同的长度,例如八个位,但是这是不必要的:原始操作码可以长于经转换的操作码,或者,如将说明的那样甚至更短。类似地指令解码器124可以通过使用所接收到的指令的一部分来在指令解码控制存储器126中查找经转换的地址或数据来转换来自所接收到的指令的操作数和结果寄存器地址、立即数和/或其他数据,以用于供应给执行电路128。原始操作数/结果地址/数据和经转换的操作数/结果地址/数据具有相同的长度,但是如在操作码的情况下一样这是不必要的。
程序编译器11可以是被配置成在编译模式下支持编译的常规编译器,其中编译器11将程序P’转换成用于具体地配置的处理器12的机器指令的序列以用于存储在指令存储器120中。配置编译器10被配置成支持编译模式,其中它输入机器代码程序B并且程序P在第二编译模式下生成定义处理器12对指令的响应的数据Q。在这个编译模式下,配置编译器10将操作语义Q作为定义处理器12对指令的响应的数据存储在指令解码控制存储器126中。
变形编译(metamorphic compiler)的基本原理
可编程设备(诸如处理器)能够运行各式各样的软件程序。可能能够被运行的程序的数目通常仅受诸如可用时间和存储器之类的资源限制约束。在处理器上运行的程序被编码为由处理器解释的位模式。在示例性实施例中位模式包括机器指令的序列。编译器将程序的高级描述变换成这些位模式。高级描述通常使用诸如C、Java、Fortran之类的编程语言来创建。在这个变换中有决定性的是处理器对位模式的解释等于根据编程语言规范的较高级程序的意义。在其他实施例中,编译器可以变换较低级程序,诸如汇编级程序或用于虚拟机的程序,诸如JAVA字节码的程序。
如果我们调用原始程序P、位模式B、语言标准解释(或符号语义)M以及处理器的解释(或操作语义)Q,则正确的编译器必须建立:
M(P) = Q(B)
因此,考虑到P和M,正确的编译器C将创建满足上述等式的位-模式B=C(P)。换句话说,程序B的执行必须产生如由程序考虑到语言标准解释所定义的对输入数据的处理器响应。例如如果在位串B中的对应位置处和在程序P变成参考机器语言程序的转换中的所有指令具有满足M(OB)=M(OP)的操作码OB、OP,则可以满足等式M(P) = Q(B),即这些指令指代相同的操作并且在由指令中的操作数/结果代码所指示的存储位置之间存在一对一映射和/或立即数是相等的。
注意,M取决于编程语言。对于不同的编程语言来说程序P能够具有不同的意义。类似地,Q取决于执行应用的实际处理器。相同的位模式在由不同的处理器执行时可以具有不同的结果。例如,被英特尔处理器解释为web浏览器的位模式可能在ARM处理器上不具有有效的解释。对于具有不同的操作语义Q和Q’的不同类型的处理器,满足条件M(P) = Q(B)和M(P) = Q’(B’)的不同位模式B和B’通常是需要的。
对于常规编译器,我们通常发现M和Q是固定的并且B针对给定P被计算。有时M是固定的,并且工具生成定制硬件Q和伴随的位模式B,使得等式成立。通过改变B,能够在硬件Q上运行新的程序P,但是这些程序的选择限于所生成的Q能够仅解释几个位模式的程度。在这种情况下我们谈及定制的非可编程设计。
在变形编译中P和B是固定的,并且Q被生成。因此变形编译器创建将把给定位模式B解释为程序P的处理器。这能够通过生成忽略B的定制硬件而容易地实现。和非可编程设计对比,变形编译器生成在能够由处理器Q执行的应用的范围仅受存储器和时间资源约束的意义上为可编程的处理器Q。
在变形编译期间生成的处理器Q可以是在另一执行平台上仿真的虚拟机,或者它可以是例如由可综合Verilog或VHDL所表示的硬件设计。为了支持这个方法变形编译还将生成编译器CQ,所述编译器CQ将编译用由CQ接受以在处理器Q上执行的编程语言编写的任意程序P’。
总之我们能够将变形编译与经典的硬件和软件编译相比较如下:
- 软件编译为任意程序和固定处理器生成位模式
- 硬件编译为固定应用生成位模式和处理器
- 变形编译为固定位模式和任意程序生成处理器和编译器
这将使用图3-8来图示。假设“P”为程序。假设“B”为由编译器“C”为指令存储器中的该程序所创建的二进制映像。假设“S”为由“B”所引发的执行单元中的执行的模式。(见图3)。
假设“P_1”为不同的程序。相同的编译器“C”将将“P_1”变换成不同的二进制“B_1”。这个二进制将在相同的处理器中引发执行“S_1”的新的模式。(见图4)
在变形编译中我们替换图2的指令解码器。假设“Z”为由用户所选取的二进制模式。这可以是任何二进制模式,例如表示图片、文本文件或任何其他数据的模式。我们将用不同解码decode_2替换图2中的指令解码器,使得decode_2从指令存储器读取并且产生执行位。decode_2从包含“Z”的指令存储器生成的位等于由原始指令解码器为二进制映像“B”所生成的执行位。因此,由“Z”所引发的执行模式与由“B”所引发的执行模式相同。图5中的“MM_处理器”是使用新的指令解码器的处理器。只要所生成的执行模式是等效的,没有必要生成精确地相同的执行位。在我们的示例实现中我们生成相同的执行位。
因为“Z”由用户选取,所以它可以是任何事物,例如包含仅仅“0”的存储器。为了能够生成执行位的相同序列,指令解码器可以使用程序计数器位模式(其对于程序存储器中的每个指令(它是指令地址)来说是唯一的))来生成适当的执行位。这意味着我们使用的处理器模板使用解码单元中的程序计数器。见图6。
decode_2能够生成各式各样的执行位模式。使用decode_2构建的处理器仍然是可编程的。能够创建与图2中的规则编译器相似的、为程序存储器生成位模式的编译器。这个新的软件编译器(D)将把原始程序“P”编译成位模式“Z”。见图7。
它还将能够将程序“P_1”编译成引发我们早先看到的相同执行模式“S_1”的新的二进制(比如说“B_2”)。(图8)
变形编译的示例性实施例
在使用通过参考图1所描述的类型的处理器的实施例中,配置编译器10可以在一系列步骤中实现变形编译。在第一步骤中,配置编译器10可以将程序P转换成用于参考执行电路的参考机器指令的系列。在第二步骤中,配置编译器10可以将输入位串B划分成将各自被用作相应的机器指令的连续部分。
在第三步骤中,配置编译器10可以将参考机器指令与在参考机器指令的系列中的对应位置处的位串B的各部分和与位串B分别相比较。根据这个比较配置编译器10确定将位串的各部分转换成在对应位置处的参考机器指令所需的转换。例如,所述部分的不同子部分可以与在参考机器程序中的对应位置处的参考机器指令的操作码和操作数以及结果代码相比较。根据这个,可以从参考机器指令中提取针对来自子部分中的位串B的信息的查找数据。在第四步骤中,配置编译器10使结果得到的信息(例如,查找数据)被使得对于程序编译器11可用,使得程序编译器10被配置成采用所生成的操作语义为处理器编译程序P’。在第五步骤中,配置编译器10使结果得到的信息(例如,查找数据)被存储在指令解码控制存储器126中。
在实施例中,不重叠的子部分被使用。但是还有可能使用重叠子部分。例如,参考机器指令程序中的某些操作可以包含特定寄存器操作数。然后配置编译器10可以通过检查所对应的参考机器指令来搜索需要该特定寄存器操作数的位串B中的所有部分(“B-指令”)。配置编译器10可以生成对于参考机器程序中的对应指令指示‘B’中的指令是否确实需要或确实不需要这个特定操作数(或可能不关心)的查找表。代替查找表,配置编译器10可以得到布尔公式,所述布尔公式当被应用于参考机器程序中的对应指令时,产生是否需要这个特定操作数的指示。基于查找表来生成布尔公式的方法本身是已知的。在程序的执行期间,这个布尔公式能够被应用于B的每个部分(“B-指令”),或者各部分能够被用作查找表的输入,以确定该指令是否确实需要或确实不需要操作数。布尔函数需要B的一部分的子部分作为输入。可以得到其他布尔函数以使用B的一部分的不同的(但是可能重叠)子部分来确定指令的其他方面(例如操作码)。
取决于程序P和位串B的内容,多义性可能出现,因为可能需要以不同的方式转换在位串的不同子部分中的相同内容。配置编译器10可以以各种方式解决这样的多义性。在一个实施例中,编译器可以增加将被视为指令的位串B的各部分的长度并且可选地增加将被用作操作码或操作数/结果数据/地址的子部分的长度以避免这样的多义性,或者减少它们的数目。
在实施例中指令解码器124可以被配置成使用程序计数器值来对转换进行消歧。例如,指令解码器124可以被配置成与来自指令存储器120的指令的一部分或各部分相结合地供应从程序计数器值得到的信息以查找转换。编译器10可以被配置成确定与子串的不同部分相对应的程序计数器值,以选择来自位串B的各部分的数据和从程序计数器值得到的信息的不同组合的转换。
在另一实施例中,指令解码器124可以提供信息从程序计数器中的可配置提取。在这个实施例中,配置编译器10可以被布置成选择指令解码器124的配置,以便定义将被使用的信息。例如,编译器10可以收集应该被给予给位串B的相同子部分的所有不同的转换,选择从程序计数器值得到提供足够的信息来对这些转换进行消歧的信息的多个预定方式中的一个,并且使指令解码器124被配置成使用得到信息的所选方式。可以选择满足这个条件并且需要最小数量的得到信息的方式。例如得到信息的不同方式可以使用程序计数器值的不同数目的可变最低有效位。
相似消歧可以被应用于具有多义转换的位串B的多个子部分。配置编译器10可以使用在将位串B的更长部分用作指令与将更多程序计数器用于消歧之间的折衷。此外,多义性的数量可以通过使用程序P的仅一部分来定义转换并且通过对于程序的剩余部分使用常规编译来减少。
当然,一些可能的参考机器指令、操作码或操作数码将没有转换成可能的参考机器指令的原型。当这些可能的参考机器指令、操作码或操作数码对于该程序不在机器程序中发生时,这对于程序P来说不是问题。但是为了执行其他程序,可以为这些机器指令、操作码或操作数码选择任意原型,只要它们不同于已经被选择的原型即可。可选地,可以基于位串B的不用部分选择这样的原型。
以这种方式,可以基于程序P和位串B来定义处理器的操作语义Q(具有这个操作语义的处理器还被称为处理器Q)。尽管已经在图1的系统背景下给出了配置编译器10的操作的示例,但是应注意,其他实施例是可能的。例如,可以在软件控制下施行指令的转换,即,可以使用仿真。在这种情况下指令解码器124和指令解码控制存储器126的功能可以由仿真程序来实现。作为另一示例,编译器10可以被配置成生成处理器的例如由可综合Verilog或VHDL描述所表示的硬件设计,所述处理器将响应于接收到位串B的连续部分而执行参考机器指令的系列。
尽管已经描述了其中位串B被接收的示例,但是应了解,可替换地配置编译器10可以例如借助于随机生成或作为不同于程序P的另一程序P’的转换来生成位串B。
总之,位串B被用来根据具有如下性质的程序P确定操作语义Q:如果具有操作语义Q的处理器执行取自位串B的指令的系列,则处理器将有效地执行程序P。这还可以说是配置程序编译器11,也就是说,以创建特定编译器CQ以用于根据操作语义Q来转换任何程序P’,或者换句话说,将把任何程序P’转换成当被具有操作语义的处理器执行时将使该处理器施行处理器的机器指令的特定编译器将有效地执行程序P’。
针对抗篡改、模糊化以及水印的变形编译的应用
当使用任意位模式B使应用A变形成处理器Q使得处理器Q对于B的解释在语义上相当于应用A时,发生两个事情。首先,处理器Q(虚拟机或一件硬件)和二进制目标B的表示是密不可分的,意味着Q和B均不能够在不破坏原始应用A的情况下被改变。其次,原始算法A的编码现在被分成两个部分。该算法的一个部分使用位模式B被编码,另一部分在处理器Q中被编码。
处理器Q是可编程的。结果,对于任何任意应用,编译器CQ将生成代码使得通过Q的解释将是这个任意应用的实现。因此,孤立地研究Q的表示将不揭示关于原始应用A的任何信息。并且研究位模式B将不揭示关于应用A的任何信息,因为B被随机地选取。为了学习到关于原始应用A的任何事物,攻击者必须通过观察由Q所执行的程序B的执行轨迹来得到处理器Q的指令集和架构。这是比对在开放平台上执行的应用进行逆向工程更加困难的挑战。
位模式B能够被自由地选取并且与处理器Q密不可分以及不能够在不破坏原始应用的情况下被改变的事实意味着有可能将B用作水印。例如,B(除其他信息以外还)包括许可者的徽标和版权文本或受许可者的名字和组织是可能的。以这种方式,原始应用不仅是模糊的而且与声明合法所有者和受许可者的权利的法律文本密不可分。
变形编译的另一有吸引力的应用在于使应用的一部分模糊并且在于使剩余部分不受篡改。为了实现这个我们将原始应用A分成两个部分A1和A2,使得A1包含我们想要模糊(例如,以隐藏许可证校验码或者以防止专有算法的逆向工程)的所有代码。我们应用将A1用作程序P以使A1变形成虚拟机Q、将A2的目标代码用作程序代码的变形编译。A的实现现在由两个部分构成:一个部分是将A2的目标代码用作程序代码从而导致部分A1的模糊实现的虚拟机Q的模拟器。第二部分A2被实现为用于应用A的主机平台的标准目标代码。
A2的目标代码现在用作主机机器的代码以及负责执行应用部分A1的虚拟机Q的代码两者。尽管攻击者可能能够对应用部分A2的目标代码进行逆向工程,但是它还将改变针对应用部分A1的实现的行为。结果,不再有可能在不影响完整应用的情况下在本地改变软件。这使对变形应用的攻击变得困难。
除组合模糊化和抗篡改之外,同样水印能够被用于应用。这通过再次将原始应用程序A分成两个部分A1和A2使得A1包含我们想要模糊的所有代码并且A2包含我们想要仅变得抗篡改的代码来完成。我们能够使用变形编译来使A1变形成虚拟机Q,从而将与水印C结合的A2的目标代码用作程序代码。如之前所描述的,程序部分A1的实现现在被模糊,程序部分A2成为抗篡改的,并且水印C被添加,所述水印C在不中断应用部分A1的执行的情况下不能够被去除或者改变。
变形编译的更为有关的使用是分层自应用。变形编译的一个结果是将能够执行任意位模式B的虚拟机Q。虚拟机Q它本身由程序PQ实现。现在有可能使用位模式B或又一个自由地选取的位模式对程序PQ应用变形编译。这个过程能够使用自由地选取的二进制模式来应用数次。每个层将增强模糊化和抗篡改,并且允许应用不同的水印。
总之,变形编译允许:
- 将不能够被改变或去除的水印添加到程序
- 对于应用的不同部分使用不同级别的保护。
- 为了防止攻击者能够改变实现,应用部分能够成为抗篡改的。
- 为了防止攻击者能够改变实现并且理解实现/对实现进行逆向工程,能够使应用部分模糊。
我们提出了变形编译的方法作为用来增强在开放环境中所执行的应用对抗逆向工程和篡改攻击的保护的手段。变形编译可以被用来实现下列中的一个或多个:(a)通过使(多个)虚拟机分层来使程序执行模糊,(b)密不可分地链接应用和执行环境,以及(c)将法律信息公开地嵌入到应用代码、虚拟机和应用数据中。变形编译的性质确保了更改虚拟机、应用或应用数据将致使应用无用。
图9示出了变形编译器如何取得用户指定映像“Z”和用户指定程序“P”。程序“P”将通常被编译成位模式“B”(未示出),所述位模式B将在我们的规则处理器中引发执行模式“S”。
图10示出了执行模式“S”如何通过二进制映像“Z”在变形处理器中被引发。
如果我们的变形编译器生成新的指令解码器的软件实现,则该软件实现连同处理器的其余部分的软件实现一起形成程序。这个程序将在我们的处理器上引发执行模式“NS”。
变形编译器能够生成新的解码器_2,使得原始用户映像将在处理器_2上引发执行模式“NS”。
如图11中所图示的,处理器_2可以执行映像“Z”并且引发作为处理器_1的模拟器的执行模式“NS”,该处理器_1执行映像“Z”并且引发作为我们与我们的用户程序“P”相关联的执行模式的模式“S”。
因为我们正在单个平台上执行,所以执行模式“N”和“NS”交织在该平台上。
形式表示法
形式上这可以用以下表示法加以指定。应用由希腊字母α、β、γ表示并且指代任何编程语言的应用的源代码表示。可编程处理器由大写字母Y、Z等表示。由可编程处理器用作输入的串由小写字母a、b以及c表示。根据语言标准的应用α的符号语义由项M(α)指代。在处理器Y上执行的二进制a的操作语义由项MY(a)表示。项CY(α)是由编译器C在MY(CY(α)) = M(α)情况下为处理器Y所生成的二进制的表示。
在这个表示法中,考虑到应用α以及任意字符串a,可编程处理器Y和编译器CY生成并且有以下性质:MY(a) = M(α)。对于任意应用β,编译器CY将生成串CY(β)使得MY(CY(β))= Μ(β)。
在实施例中应用α是可编程处理器模拟器Z,产生处理器Za和对应的编译器。在另一实施例中,结果得到的可编程处理器Y通过应用得到步骤任意次数来得到。
如本文中所用的,术语处理器的操作语义包括定义与机器指令的操作码相对应的操作的数据,所述操作码诸如用于加、减、加载、存储以及跳转操作的操作码。这个数据可以定义待用来使实际处理器或模拟程序根据操作码操作的实际处理器和处理器模拟程序的另外的操作码,并且数据可以包括待用来使执行电路根据操作码操作的用于在执行电路中使用的电路控制信号值的集合。如本文中所用的,配置处理器使得它将根据所述操作语义来执行机器指令包括将这样的数据存储到处理器和/或制造具有将使它根据这样的数据操作的自动地生成的电路配置的处理器和/或生成用于模拟根据所述数据对操作码做出响应的处理器的模拟程序。如本文中所用的,机器指令是能够由处理器或处理器模拟程序个别地执行的指令,包括例如添加、加载、存储以及跳转指令。
应注意,上面提到的实施例举例说明本发明而不是限制本发明,并且在不脱离所附权利要求的范围的情况下,本领域的技术人员将能够设计许多可替换的实施例。在权利要求中,放置在括弧之间的任何附图标记不应该被解释为限制该权利要求。单词“包括”不排除除权利要求中所列举的那些以外的元件或步骤的存在。继之以元件的单词“一”或“一个”不排除多个这样的元件的存在。本发明可以借助于包括数个不同元件的硬件和/或借助于适当地编程的处理器被实现。在枚举数个装置的设备权利要求中,这些装置中的数个可以由硬件的同一个项具体化。特定手段被记载在相互不同的从属权利要求中的仅有事实不指示这些手段的组合不能够被有利地使用。
Claims (15)
1.一种配置处理器(12)的方法,所述方法包括
- 接收位串(B)和程序(P),
- 使用编译器(10)将程序(P)转换成用于参考执行电路的参考机器指令的系列,
- 将位串(B)划分成由处理器(12)用作相应的机器指令的连续部分,
- 将所述参考机器指令与在参考机器指令的系列中的对应位置处的位串(B)的各部分和与位串(B)分别相比较,并确定将所述位串(B)的各部分转换成在对应位置处的参考机器指令的转换数据,以及
- 利用所述转换数据配置处理器(12),处理器(12)的指令解码器(124)被配置为基于所述转换数据提供机器指令从位串(B)到参考机器指令的转换,使得当所述处理器(12)将所述位串(B)用作机器指令的源时所述处理器(12)执行程序(P)。
2.根据权利要求1所述的方法,其中所述转换数据将所述位串(B)的多个不同部分映射到相同的参考指令,并且其中所述方法包括:
-通过增加将被视为指令的所述位串(B)的各部分的长度,解决其中位串(B)的两个或更多个部分相同而需要来映射到不同参考指令上的多义性。
3.根据权利要求1的方法,
- 其中所述转换数据将所述部分的不同子部分转换成所述参考机器指令在参考机器指令中的对应位置处的操作码、操作数以及结果代码中的至少一个。
4.根据权利要求1的方法,其中所述转换数据包括用于查找位串(B)的各部分以获得参考机器指令的查找数据。
5.根据权利要求1的方法,其中所述位串(B)的连续部分具有比参考机器指令的长度更大的长度。
6.根据权利要求1的方法,包括
- 确定与所述位串(B)当由所述处理器(12)执行时的不同部分相对应的程序计数器值,
- 将所述位串(B)的各部分与从所述程序计数器值得到的信息组合,如此获得消歧部分,并且确定用于将所述消歧部分转换成所述参考机器指令的转换。
7.根据权利要求1的方法,
- 确定没有在由所述转换数据所定义的所述转换下转换成所述参考机器指令的原始操作数码的参考机器指令,
- 为没有不同于已经被定义在所述转换数据中的所述原始操作数码的原始操作数码的所述参考机器指令选择原始操作数码并且扩展所述转换数据以用于配置所述处理器(12),使得当所述处理器将所选原始操作数码用作机器指令的源时经配置的处理器(12)执行所确定的参考机器指令。
8.根据权利要求1的方法,包括
- 使所述转换数据对于用于采用所述转换数据而被配置的所述处理器的编译器可用,
- 采用所述编译器编译另一程序(P’),所述编译为所述处理器(12)产生编译的机器指令的程序;
- 采用所述处理器(12)执行编译的机器指令的程序。
9.根据权利要求8的方法,其中所述程序(P)是可编程处理器模拟器程序,以用于模拟另一处理器,
其中所述可编程处理器模拟器程序通过以下步骤获得
- 接收另一位串和另一可编程处理器模拟器程序;
- 计算另一可编程处理器的另一转换数据,所述另一可编程处理器在所述另一可编程处理器将所述另一位串用作机器指令的源时将执行由所述另一可编程处理器模拟器程序所定义的操作,所述另一转换数据根据作为输入的所述另一位串和所述另一可编程处理器模拟器程序被计算。
10.根据权利要求1的方法,包括接收原始应用A、将所述原始应用A分成第一部分A1和第二部分A2、将所述第一部分A1用作所述程序(P)以及将所述第二部分A2的目标代码用作所述位串(B)。
11.根据权利要求1的方法,包括接收原始应用A、将所述原始应用A分成第一部分A1和第二部分A2、将所述第一部分A1用作所述程序(P)、将所述第二部分A2与水印C组合以及将所述第二部分A2与所述水印C的组合用作所述位串(B)。
12.如权利要求1-11中的方法,其中所述处理器被表示为可综合硬件描述。
13.如权利要求1-11中的方法,其中所述位串(B)的各部分是从计算环境动态地收集到的文本、符号以及信息的表示中的至少一个。
14.一种用于配置处理器(12)的设备,所述设备包括
- 用于接收位串(B)和程序(P)的接收器;以及
- 配置处理器,其被配置成
- 使用编译器(10)将程序(P)转换成用于参考执行电路的参考机器指令的系列,
- 将位串(B)划分成由处理器(12)用作相应的机器指令的连续部分,
- 将所述参考机器指令与在参考机器指令的系列中的对应位置处的位串(B)的各部分和与位串(B)分别相比较,并确定将所述位串(B)的各部分转换成在对应位置处的参考机器指令的转换数据,以及
- 利用所述转换数据配置处理器(12),处理器(12)的指令解码器(124)被配置为基于所述转换数据提供机器指令从位串(B)到参考机器指令的转换,使得其根据所述转换数据执行机器指令。
15.一种或多种其上存储计算机可执行指令的计算机可读存储媒体,所述指令当由计算设备执行时,使得所述计算设备:
- 接收位串(B)和程序(P);并且
- 使用编译器(10)将程序(P)转换成用于参考执行电路的参考机器指令的系列,
- 将位串(B)划分成由处理器(12)用作相应的机器指令的连续部分,
- 将所述参考机器指令与在参考机器指令的系列中的对应位置处的位串(B)的各部分和与位串(B)分别相比较,并确定将所述位串(B)的各部分转换成在对应位置处的参考机器指令的转换数据,以及
- 利用所述转换数据生成用于配置处理器(12)的配置数据,处理器(12)的指令解码器(124)被配置为基于所述转换数据提供机器指令从位串(B)到参考机器指令的机器指令的转换。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
NL2008888 | 2012-05-25 | ||
NL2008888 | 2012-05-25 | ||
PCT/IB2013/054042 WO2013175368A1 (en) | 2012-05-25 | 2013-05-17 | Method, system and device for protection against reverse engineering and/or tampering with programs |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104321774A CN104321774A (zh) | 2015-01-28 |
CN104321774B true CN104321774B (zh) | 2018-08-28 |
Family
ID=48808407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380027303.6A Active CN104321774B (zh) | 2012-05-25 | 2013-05-17 | 用于防逆向工程和/或篡改程序的方法、系统以及设备 |
Country Status (9)
Country | Link |
---|---|
US (1) | US10095847B2 (zh) |
EP (1) | EP2856378B1 (zh) |
JP (1) | JP6133409B2 (zh) |
CN (1) | CN104321774B (zh) |
BR (1) | BR112014028947A2 (zh) |
MX (1) | MX2014014102A (zh) |
RU (1) | RU2014152808A (zh) |
WO (1) | WO2013175368A1 (zh) |
ZA (1) | ZA201409425B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9659156B1 (en) * | 2014-03-20 | 2017-05-23 | Symantec Corporation | Systems and methods for protecting virtual machine program code |
US9501301B2 (en) * | 2015-02-26 | 2016-11-22 | Nxp B.V. | Flexible instruction sets for obfuscated virtual machines |
US9760736B2 (en) * | 2015-09-29 | 2017-09-12 | International Business Machines Corporation | CPU obfuscation for cloud applications |
CN105825089A (zh) * | 2016-03-15 | 2016-08-03 | 上海斐讯数据通信技术有限公司 | 一种智能终端jni数据跟踪方法及系统 |
CN109358844A (zh) * | 2018-09-30 | 2019-02-19 | 仝瑞麟 | 程序执行方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101300584A (zh) * | 2005-08-06 | 2008-11-05 | 安全尺度有限公司 | 防止软件逆向工程、未经授权修改以及运行时数据截取的方法 |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01321519A (ja) * | 1988-06-24 | 1989-12-27 | Hitachi Micro Comput Eng Ltd | マイクロプロセッサ |
JPH0475137A (ja) * | 1990-07-18 | 1992-03-10 | Hitachi Ltd | データ処理装置 |
JPH07182304A (ja) * | 1993-12-24 | 1995-07-21 | Rohm Co Ltd | マイクロコンピュータ及びその製造方法 |
US6101592A (en) * | 1998-12-18 | 2000-08-08 | Billions Of Operations Per Second, Inc. | Methods and apparatus for scalable instruction set architecture with dynamic compact instructions |
US6862563B1 (en) * | 1998-10-14 | 2005-03-01 | Arc International | Method and apparatus for managing the configuration and functionality of a semiconductor design |
US6834343B1 (en) * | 1999-05-27 | 2004-12-21 | Microsoft Corporation | Method for watermarking computer programs |
US7770016B2 (en) * | 1999-07-29 | 2010-08-03 | Intertrust Technologies Corporation | Systems and methods for watermarking software and other media |
US6757831B1 (en) * | 1999-08-18 | 2004-06-29 | Sun Microsystems, Inc. | Logic block used to check instruction buffer configuration |
US7080257B1 (en) * | 2000-03-27 | 2006-07-18 | Microsoft Corporation | Protecting digital goods using oblivious checking |
WO2002025415A2 (en) * | 2000-09-22 | 2002-03-28 | Edc Systems, Inc. | Systems and methods for preventing unauthorized use of digital content |
JP2002132364A (ja) * | 2000-10-19 | 2002-05-10 | Yutaka Iizuka | プログラムを内部解析から保護する方法、コンピュータ読み取り可能な記録媒体及びプログラムの配布方法 |
CA2327911A1 (en) * | 2000-12-08 | 2002-06-08 | Cloakware Corporation | Obscuring functions in computer software |
WO2002061574A1 (en) * | 2001-01-30 | 2002-08-08 | Koninklijke Philips Electronics N.V. | Computer instruction with instruction fetch control bits |
US7266811B2 (en) * | 2001-09-05 | 2007-09-04 | Conexant Systems, Inc. | Methods, systems, and computer program products for translating machine code associated with a first processor for execution on a second processor |
JP2003288203A (ja) * | 2002-03-27 | 2003-10-10 | Asahi Kasei Corp | プロセッサの開発支援装置 |
JP4073913B2 (ja) * | 2002-07-09 | 2008-04-09 | 富士通株式会社 | 開放型汎用耐攻撃cpu及びその応用システム |
US20050028132A1 (en) | 2003-07-31 | 2005-02-03 | Srinivasamurthy Venugopal K. | Application specific optimization of interpreters for embedded systems |
US20050102474A1 (en) * | 2003-11-06 | 2005-05-12 | Sridhar Lakshmanamurthy | Dynamically caching engine instructions |
US7594221B2 (en) * | 2004-04-20 | 2009-09-22 | Hewlett-Packard Development Company, L.P. | Method and apparatus for translating binary code |
EP1850261A1 (en) * | 2005-02-10 | 2007-10-31 | Matsushita Electric Industrial Co., Ltd. | Program conversion device and program execution device |
JP2006286084A (ja) | 2005-03-31 | 2006-10-19 | Fujitsu Ltd | 符号器、復号器および符号化方法 |
US7760903B2 (en) * | 2005-08-30 | 2010-07-20 | Microsoft Corporation | Tamper-resistant text stream watermarking |
US20100191959A1 (en) * | 2005-09-23 | 2010-07-29 | Space Micro Inc. | Secure microprocessor and method |
CN101491000B (zh) * | 2006-07-12 | 2011-12-28 | 耶德托公司 | 用于混淆密码函数的方法和系统 |
BRPI0714242A2 (pt) * | 2006-07-12 | 2013-01-29 | Koninkl Philips Electronics Nv | sistema e mÉtodo para aumentar a resistÊncia Á adulteraÇço de uma unidade de processamento de dados digitais, e, produto de programa de computador |
US8505002B2 (en) * | 2006-09-29 | 2013-08-06 | Arm Limited | Translation of SIMD instructions in a data processing system |
US8584109B2 (en) * | 2006-10-27 | 2013-11-12 | Microsoft Corporation | Virtualization for diversified tamper resistance |
DE602006007029D1 (de) * | 2006-12-21 | 2009-07-09 | Ericsson Telefon Ab L M | Verschleierung von Computerprogrammcodes |
JP4708446B2 (ja) * | 2007-03-02 | 2011-06-22 | パナソニック株式会社 | 符号化装置、復号装置およびそれらの方法 |
US20080229115A1 (en) * | 2007-03-16 | 2008-09-18 | Microsoft Corporation | Provision of functionality via obfuscated software |
US20110035601A1 (en) * | 2007-12-21 | 2011-02-10 | University Of Virginia Patent Foundation | System, method and computer program product for protecting software via continuous anti-tampering and obfuscation transforms |
WO2010127438A1 (en) * | 2009-05-06 | 2010-11-11 | Irdeto Canada Corporation | Interlocked binary protection using whitebox cryptography |
US20100325446A1 (en) * | 2009-06-19 | 2010-12-23 | Joseph Martin Mordetsky | Securing Executable Code Integrity Using Auto-Derivative Key |
EP2388730A1 (en) * | 2010-05-17 | 2011-11-23 | Nagravision S.A. | Method for generating software code |
US20120159444A1 (en) * | 2010-12-17 | 2012-06-21 | Microsoft Corporation | Fusing debug information from different compiler stages |
US8621620B2 (en) * | 2011-03-29 | 2013-12-31 | Mcafee, Inc. | System and method for protecting and securing storage devices using below-operating system trapping |
US9575903B2 (en) * | 2011-08-04 | 2017-02-21 | Elwha Llc | Security perimeter |
JP2013070026A (ja) | 2011-09-08 | 2013-04-18 | Rohm Co Ltd | 半導体装置、半導体装置の製造方法、半導体装置の実装構造、およびパワー用半導体装置 |
-
2013
- 2013-05-17 MX MX2014014102A patent/MX2014014102A/es unknown
- 2013-05-17 BR BR112014028947A patent/BR112014028947A2/pt not_active IP Right Cessation
- 2013-05-17 RU RU2014152808A patent/RU2014152808A/ru not_active Application Discontinuation
- 2013-05-17 JP JP2015513320A patent/JP6133409B2/ja active Active
- 2013-05-17 US US14/400,586 patent/US10095847B2/en active Active
- 2013-05-17 EP EP13739501.8A patent/EP2856378B1/en active Active
- 2013-05-17 WO PCT/IB2013/054042 patent/WO2013175368A1/en active Application Filing
- 2013-05-17 CN CN201380027303.6A patent/CN104321774B/zh active Active
-
2014
- 2014-12-19 ZA ZA2014/09425A patent/ZA201409425B/en unknown
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101300584A (zh) * | 2005-08-06 | 2008-11-05 | 安全尺度有限公司 | 防止软件逆向工程、未经授权修改以及运行时数据截取的方法 |
Also Published As
Publication number | Publication date |
---|---|
BR112014028947A2 (pt) | 2017-06-27 |
RU2014152808A (ru) | 2016-07-20 |
EP2856378A1 (en) | 2015-04-08 |
EP2856378B1 (en) | 2017-12-27 |
JP6133409B2 (ja) | 2017-05-24 |
US20150161363A1 (en) | 2015-06-11 |
WO2013175368A1 (en) | 2013-11-28 |
JP2015523635A (ja) | 2015-08-13 |
ZA201409425B (en) | 2017-05-31 |
US10095847B2 (en) | 2018-10-09 |
MX2014014102A (es) | 2015-01-26 |
CN104321774A (zh) | 2015-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI431500B (zh) | 多樣性抗侵入技術虛擬化 | |
CN108633309B (zh) | 协同程序的编译器优化 | |
CN106716361B (zh) | 用于运行时例程冗余跟踪的编译器高速缓存 | |
CN105830025B (zh) | 动态类型化的编程语言中的属性访问 | |
CN104321774B (zh) | 用于防逆向工程和/或篡改程序的方法、系统以及设备 | |
CN107729725A (zh) | 一种基于虚拟机指令修改的Android应用加固系统及方法 | |
JP6429785B2 (ja) | 演算子のないコンパイラ | |
JP6300796B2 (ja) | 算術及び論理ユニットを伴わないコンピュータプロセッサ及びシステム | |
Cazzola et al. | @ Java: Bringing a richer annotation model to Java | |
CN105930694A (zh) | 用于模糊虚拟机的灵活指令集 | |
Reijers et al. | Ahead-of-Time Compilation of Stack-Based JVM Bytecode on Resource-Constrained Devices. | |
McCormick et al. | Exploring the construction of a domain-aware toolchain for high-performance computing | |
CN108369499A (zh) | 编译器自动代码虚拟化 | |
McNamara | Rust in Action | |
EP3106980A1 (en) | A processing unit, software and method for controlling interactive components | |
Morelli et al. | Java, Java, Java: Object-Oriented Problem Solving | |
Kaufmann et al. | Superblock compilation and other optimization techniques for a Java-based DBT machine emulator | |
von Ronne et al. | Interpreting programs in static single assignment form | |
Oguntunde | Comparative analysis of some programming languages | |
Balasubramanian et al. | Designing RISC-V Instruction Set Extensions for Artificial Neural Networks: An LLVM Compiler-Driven Perspective | |
Papadimitriou | Performance Optimisations for Heterogeneous Managed Runtime Systems | |
Lin et al. | An assistance tool employing a systematic methodology for GCC retargeting | |
Damevski | Tool Support for Efficient Programming of Graphics Processing Units | |
Sutherland | Learn C++ for game development | |
Morelli et al. | Java, Java, Java |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |