CN105095698A - 基于最近执行的程序代码的程序代码模糊处理 - Google Patents
基于最近执行的程序代码的程序代码模糊处理 Download PDFInfo
- Publication number
- CN105095698A CN105095698A CN201510245908.3A CN201510245908A CN105095698A CN 105095698 A CN105095698 A CN 105095698A CN 201510245908 A CN201510245908 A CN 201510245908A CN 105095698 A CN105095698 A CN 105095698A
- Authority
- CN
- China
- Prior art keywords
- instruction
- code
- tie point
- function
- prior instructions
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 49
- 230000006870 function Effects 0.000 description 29
- 238000004590 computer program Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 11
- 230000009191 jumping Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program 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/106—Enforcing content protection by specific content processing
- G06F21/1066—Hiding content
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种对包括多个指令的软件代码进行掩盖的方法,包括:由处理器确定针对当前指令的N个先前指令;基于第一函数、第二函数和所述N个先前指令对当前指令进行编码,其中所述第二函数基于所述N个先前指令,并且其中所述第一函数基于当前指令和所述第二函数的输出。
Description
技术领域
这里公开的各种示例性实施例一般地涉及基于最近执行的程序代码的程序代码模糊处理。
背景技术
如今,软件应用广泛地用来向用户提供多种服务。这些软件应用可以寄宿在各种不同的设备上,比如移动电话、个人计算机、膝上型计算机、平板电脑、机顶盒等。可在许多由消费者使用的系统中或工业系统中找到软件应用。还可在智能卡和信用卡中找到软件应用。此外,软件应用还可实现在网络上,比如互联网,其中软件应用运行于服务器上,并且使用多种用户设备访问软件应用。许多这种软件应用需要使用安全协议来保护内容、信息、交易和隐私。许多软件应用运行于这样的环境中,即,攻击者具有对软件应用的操作的完全或一些控制,并且攻击者可以尝试对软件应用的代码进行反向工程以便获得对安全信息的访问,或者尝试甚至理解软件的操作以便重现或修改软件应用的功能。攻击者可使用多种反向工程工具,比如代码分析器和调试器,以获得与软件应用有关的信息。因此,已经开发了技术来使得攻击者难以对软件进行反向工程。一种用来使得对代码进行反向工程更加困难的方式是代码模糊处理。代码模糊处理试图创建经模糊处理的代码,该经模糊处理的代码是人类难以理解的。代码模糊处理可用来隐匿软件应用的目的或其逻辑,以防止对软件应用进行篡改或反向工程。
发明内容
以下给出对多种示例性实施例的简要概述。可在以下概述中进行一些简化和省略,这是为了强调和介绍多个示例性实施例的某些方面,而不是为了限制本发明的范围。在随后的部分中将对足以使得本领域普通技术人员作出和使用创造性构思的示例性实施例进行具体描述。
多种示例性实施例涉及一种对包括多个指令的软件代码进行掩盖的方法,包括:由处理器确定针对当前指令的N个先前指令;基于第一函数、第二函数和所述N个先前指令对当前指令进行编码,其中所述第二函数基于所述N个先前指令,并且其中所述第一函数基于当前指令和所述第二函数的输出。
描述了多种实施例,还包括:确定在所述N个先前指令或当前指令中存在连接点;当存在连接点时,针对所述连接点之前的每个先前指令产生掩码值,其中所述掩码是基于所述连接点之前的并行指令中的公共比特设置的;以及将所述掩码与当前指令相关联。
描述了多种实施例,还包括:确定在所述N个先前指令或当前指令中存在连接点;当存在连接点时,在所述连接点之前插入I个NOOP指令,其中I是所述连接点之前的先前指令的数量。
描述了多种实施例,还包括:确定在所述N个先前指令或当前指令中存在连接点;当存在连接点时,将所述连接点下移I个指令,其中I是所述连接点之前的先前指令的数量。
描述了多种实施例,还包括:接收采用更高级语言的软件代码;以及将所接收的软件代码编译成机器可执行指令。
描述了多种实施例,还包括:接收采用更高级语言的软件代码;以及将所接收的软件代码解译成机器可执行指令。
描述了多种实施例,还包括:产生密钥,其中所述密钥与针对第一当前指令的N个先前指令相对应。
描述了多种实施例,其中所述N个先前指令是N个先前经编码的指令。
描述了多种实施例,还包括:由处理器确定与在当前指令之前的所述N个先前指令相关联的M个先前数据值;以及其中对当前指令进行编码还基于所述M个数据值,其中所述第二函数还基于所述M个先前数据值。
描述了多种实施例,还包括:产生密钥,其中所述密钥与针对第一当前指令的N个先前指令和M个先前数据值相对应。
此外,多种示例性实施例涉及一种对包括多个经编码的指令的经掩盖的软件代码进行解码的方法,包括:由处理器确定针对当前经编码的指令的N个先前经编码的指令;基于第一函数、第二函数和所述N个先前经解码的指令对当前经编码的指令进行解码,其中所述第二函数基于所述N个先前经解码的指令,并且其中所述第一函数基于当前经编码的指令和所述第二函数的输出。
描述了多种实施例,还包括:接收密钥,其中所述密钥与针对第一经编码的当前指令的N个先前指令相对应。
此外,多种示例性实施例涉及编码有用于由处理器执行的指令的非瞬时机器可读存储介质,所述指令用于对包括多个指令的软件代码进行掩盖,所述非瞬时机器可读存储介质包括:用于确定针对当前指令的N个先前指令的指令;用于基于第一函数、第二函数和所述N个先前指令对当前指令进行编码的指令,其中所述第二函数基于所述N个先前指令,并且其中所述第一函数基于当前指令和所述第二函数的输出。
描述了多种实施例,还包括:用于确定在所述N个先前指令或当前指令中存在连接点的指令;用于当存在连接点时针对所述连接点之前的每个先前指令产生掩码值的指令,其中所述掩码是基于所述连接点之前的并行指令中的公共比特设置的;以及用于将所述掩码与当前指令相关联的指令。
描述了多种实施例,还包括:用于确定在所述N个先前指令或当前指令中存在连接点的指令;用于当存在连接点时在所述连接点之前插入I个NOOP指令的指令,其中I是所述连接点之前的先前指令的数量。
描述了多种实施例,还包括:用于确定在所述N个先前指令或当前指令中存在连接点的指令;用于当存在连接点时将所述连接点下移I个指令的指令,其中I是所述连接点之前的先前指令的数量。
描述了多种实施例,还包括:用于接收采用更高级语言的软件代码的指令;以及用于将所接收的软件代码编译成机器可执行指令的指令。
描述了多种实施例,还包括:用于接收采用更高级语言的软件代码的指令;以及用于将所接收的软件代码解译成机器可执行指令的指令。
描述了多种实施例,还包括:用于产生密钥的指令,其中所述密钥与针对第一当前指令的N个先前指令相对应。
描述了多种实施例,其中所述N个先前指令是N个先前经编码的指令。
描述了多种实施例,还包括:用于由处理器确定与当前指令之前的所述N个先前指令相关联的M个先前数据值的指令;以及其中对当前指令进行编码还基于所述M个数据值,其中所述第二函数还基于所述M个先前数据值。
描述了多种实施例,还包括:用于产生密钥的指令,其中所述密钥与针对第一当前指令的N个先前指令和M个先前数据值相对应。
此外,多种示例性实施例涉及编码有用于由处理器执行的指令的非瞬时机器可读存储介质,所述指令用于对包括多个经编码的指令的经掩盖的软件代码进行解码,所述非瞬时机器可读存储介质包括:用于确定针对当前经编码的指令的N个先前经编码的指令的指令;用于基于第一函数、第二函数和所述N个先前经解码的指令对当前经编码的指令进行解码的指令,其中所述第二函数基于所述N个先前经解码的指令,并且其中所述第二函数基于当前经编码的指令和所述第二函数的输出。
描述了多种实施例,还包括:用于接收密钥的指令,其中所述密钥与针对第一经编码的当前指令的N个先前指令相对应。
附图说明
为了更好地理解各种示例性实施例,参考附图,其中:
图1示出了对软件代码进行掩盖的方法。
为了便于理解,使用相同的附图标记来指代具有实质上相同或相似的结构和/或实质上相同或相似的功能的元素。
具体实施方式
说明书和附图示出了本发明的原理。因此,将理解的是,本领域技术人员将能够设想出实现本发明的原理并且包括在其范围内的各种布置(尽管这里并未明确地描述或示出)。此外,这里记载的所有示例主要特别旨在用于教导目的,以便辅助读者理解本发明的原理和发明人促进现有技术所贡献的构思,并且应被理解为不限于所特别描述的示例和条件。此外,除非另作指出(例如“或其它”或者“或在备选方式中”),本文中的术语“或”指代非排他性的“或”(即,和/或)。此外,本文描述的各个实施例并不必是互斥的,这是一些实施例可与一个或多个其它实施例组合,以形成新的实施例。
可使用程序代码来实现软件应用。可采用更高级语言来写程序代码。然后,该程序代码可被编译或解译。经编译的代码可以是针对特定处理器的机器代码,其中经编译的代码使用来自针对特定处理器的指令集的指令。此外,所述代码可以被编译成字节代码。字节代码是表示各种操作的代码。然后,字节代码可被进一步解译,以在特定处理器上实现。这一技术可例如与虚拟机(VM)一起使用。然后,可以将VM实现为运行在各种处理器上,但对于将在任意处理器上实现的应用来讲,字节代码将是相同的,这是因为VM所操作的字节代码然后会被VM解译成针对特定处理器的机器代码。
在许多情况中,软件应用必须防御尝试对代码进行反向工程的攻击者,如上面的示例中所述的。攻击者可以使用复杂的工具来分析采用二进制形式的软件,以便理解软件正在做什么以及软件如何工作。代码模糊处理可用来实现软件应用,以便使得攻击者更难理解代码的操作、修改代码、移动代码或从代码中提取敏感信息。由于攻击者只能够访问可执行代码而不能访问源代码,所以模糊处理技术通常应用于可执行代码。
一种用于对代码进行模糊处理的方式是使得对代码的解码(其对执行代码来讲是必要的)取决于最近执行的代码。以下实施例是通过使用在VM中实现的字节代码进行描述的。然而,在实施例中所描述的技术可以更广泛地应用于其它类型的代码和处理器。此外,除了对代码进行模糊处理之外,所述实施例还使应用免遭篡改。
在许多情况中,可能想要在可以容易地观测到软件的执行的开放平台上运行软件,但同时想要隐藏软件实际上正在做什么。这可通过使用软件模糊处理来实现。这通常用于防止软件中所使用的知识产权被盗以及隐藏涉及安全性的软件的内部处理。
一些工具可用来对软件进行模糊处理(ExeCryptor、VMProtect、CodeVirtualizer、Thermida)。其中许多工具将要保护的软件转译成虚拟机(VM),其中VM的指令以及如何在存储器中对其进行编码都是秘密。软件模糊工具还提供解译器,从而VM知道VM指令以及如何在存储器中对其进行编码。解译器与经转译的应用代码组合在一起形成经模糊处理的应用。
一种用来创建快速解译器(从而代码模糊处理的开销较低)的非常流行的方法是使用字节代码。针对字节代码VM的程序包括多个字节,其中字节值指令将被执行的操作。例如,字节值12可表示乘法,字节值13可表示减法。可在作为将被VM执行的操作的输入的字节代码之间找到立即操作数。例如,字节代码14可表示将16比特的常量与某变量相加,其中常量是从跟随该字节代码的两个字节获得的。
现在将描述实施例的概述。所描述的实施例对字节代码进行离线编码(当生成VM代码时)并且在解译期间对其进行解码。对字节代码的编码利用最近执行的字节代码。为了对字节代码B进行编码,并且在执行B之前未编码的字节代码是L1,并且在L1之前未编码的字节代码是L2,等等,则针对B的经编码的值(称为B’)是:
B’=f(B,g(L1..Ln))。
为了提高安全性,L1..Ln值可以是未编码的字节代码,但如果L1..Ln包含经编码的字节代码,本发明同样是有效的。在执行期间,解译器按照下式对所获取的字节代码进行解码:
B=f1(B’,g(L1..Ln))。
其中,f1是函数f的逆,满足:
f1(f(x,y),y)=x。
在执行了字节代码B之后,值L1..Ln被移位一个位置,其中丢弃Ln,并且新的L1变成B。换言之:
Ln=Ln-1
Ln-1=Ln-2
...
L2=L1
L1=B。
通过按所示的对字节代码进行编码,对其进行解码所需的信息变得只在执行代码期间可用。
代码中的分支(其中特定代码位置可经由几个控制路径到达)意味着L1..Ln在代码中的这些点处不是唯一确定的。下文将描述如何处理这一问题。
现在将描述两个实施例。第一实施例是针对f、g和n使用以下配置:
f(x,y)=x-y
g(x)=x
n=1
由于字节代码是使用其值和上一执行字节代码之差来编码的,所以该实施例可被称为差分字节代码。解译器通过应用f1(其是加法)来对经编码的字节代码进行解码。为了正确操作,f中的减法和f1中的加法应该在字节值范围0..255内回绕(wraparound)。
第二实施例可使用:
f(x,y)=xxory
g(x1,x2)=S[x1]xorS[x2]
n=2
其中xor代表排他性的“或”,S[x]是将字节映射到字节的替换操作。S[..]映射可以不具有结构,从而攻击者难以分析是如何对代码进行编码和解码的。
如上节所述,如果代码中存在连接点(其中使用跳(jump)来跳到代码中的不同点,这是频繁发生的),则L1..Ln不是唯一的。例如,考虑以下4个未编码的代码,其中在代码B3处存在跳条目目标:
B1
B2
J:B3
B4。
根据B3是在B1和B2之后执行还是经由到连接点J的跳来执行,L1..Ln中的执行历史将有所不同。存在不同的方式来解决这一问题。第一种方法是在使用每个先前字节代码进行编码或解码之前将其与应该应用于Li上的n个掩码值相关联。掩码指示哪些比特在引导至字节代码的所有执行路径中具有相同值。即,针对在连接点之前与其它字节代码共享执行历史中的并行位置的任何字节代码,掩码基于在并行字节代码中找到的公共比特。编码和解码从而变成:
B’=f(B,g(L1和M1..Ln和Mn))
B=f1(B’,g(L1和M1..Ln和Mn))
通过掩码Mi,从Li中移除不应当用作g的自变量的比特,这是因为它们不是恒定的。在存储器中,应该将掩码与字节代码相邻地存储。
第二种方法是确保L1..Ln总是唯一的。通过将n个noop(没有任何效果的字节代码)放置于标签J之前以及以J为目标的跳之前,总是能够实现这一点。从而,如果n=2,则上例变成:
B1
B2
NOOP
NOOP
J:B3
B4
NOOP
NOOP
跳J。
第三种方法是下移标签J以及将n个字节代码拷贝到以J为目标的跳之前的位置。针对n=1,上例变成:
B1
B2
B3
J:B4
B3//拷贝自原始J位置
跳J。
在这一变换之后,针对B4,L1总是B3。最初,代码将按照标签J所指示的跳到代码B3。取而代之地,标签J下移一个指令至代码B4,并且指令B3放置于跳指令之前具有跳指令的代码的其它部分中。如果n是2,则跳目标将下移两个指令,并且两个指令将被放置于跳指令之前。
在第二种方法和第三种方法中,通过使用noop以及拷贝字节代码,跳字节代码不应被用来使用其自己的字节代码来更新执行历史L1..Ln。
以上实施例只描述了对字节代码(即指明要执行的操作的字节)进行编码而没有描述对位于典型VM中的字节代码之间的中间数据进行编码。将这一技术应用于中间数据是一种直接扩展。
在一种对中间数据进行编码的实施例中,L1..Ln值需要在执行经保护的代码之前的初始值。然后,该初始值还可充当程序的密钥。如果正确的值是不可用的,则不能正确地执行代码。
利用高级抽象解译技术,攻击者可以尝试L1..Ln的值,并且当攻击者确信他们已经找到正确值时,攻击者借助抽象解译通过代码传播该信息以便对其进行解码。通过为n选择一个较大的值,可使得该任务更难,但是这将增加解译开销并增加处理代码中的连接点的技术的成本。另一种方法是生成将L1..Ln在代码中的特定位置处设置为计算恒定值的字节代码。例如,字节代码可将R0拷贝到L1..Ln,其中,R0是虚拟机的寄存器(register)。在执行该指令之前,寄存器R0已被计算例如gcd(12341,3131)(最大公分母)的一段代码赋值。因此,抽象解译工具不能计算出所产生的恒定值。这可防止使用抽象解译在代码中的这些地方进行攻击。
虽然本文所描述的实施例的目标是对程序代码进行模糊处理,但这些实施例还可用于使代码免遭篡改。如果攻击者尝试计算出代码中关键字节代码的位置并尝试用另一字节代码来替代该字节代码以便实现改变代码的操作的目标,则攻击者还将改变对跟随经修改的字节代码的字节代码的解译。因此,跟随的代码将成为“垃圾”代码。
如上所述,本文所述的用于对字节代码进行模糊处理的实施例可应用到其它类型的软件程序。这些实施例还可应用到例如使用(硬件)解码功能进行扩展的ARM处理器内核,其中在针对ARM处理器的编译器中实现编码。
本文描述的实施例可实现在编译器中,该编译器将更高级语言编译成用于在处理器上执行的机器代码。此外,本文所述的实施例可以实现在解译器中,该解译器将程序指令解译成用于在处理器上执行的机器代码。此外,可将实施例应用于现有机器或其它可执行代码,以掩盖对该机器代码的操作。
图1示出了一种掩盖软件代码的方法。方法100开始于105。接下来,方法可以接收高级语言源代码(110)。然后,方法100可编译或解译高级语言源代码(115)。接下来,方法100可定义第一函数和第二函数(比如上述f和g)以及将在对每个字节代码进行编码时使用的先前字节代码的数量(120)。然后,方法100可以针对每个字节代码确定是否需要掩码值(125)。备选地,在该步骤处,可在作为跳指令的目的地的任意字节代码之前添加n个NOOP字节代码。此外,取而代之地,可按上文所述下移任意跳目的地。然后,选择下一个要处理的字节代码(130)。接下来,方法100可以确定n个先前字节代码(135)。然后,可按上文所述使用前n个字节代码和第一和第二函数对当前字节代码进行编码(140)。接下来,方法100可以确定是否存在更多字节代码要编码(145)。如果是的话,则方法选择下一个用于处理的字节代码(130)并重复步骤135和140。如果不是的话,则方法100在150处结束。
所述方法还可以包括按照上文所述使用中间数据值来对任意给定的字节代码进行编码。当编译代码时,该方法可全部在编译器中执行。此外,在已经编译了代码之后,可以独立于编译器来应用其中的许多步骤。在上文所述的实施例中对方法100中的步骤的多个方面进行了讨论。此外,该方法可运行于机器代码或其它类型的计算机指令,以便对其操作进行模糊处理。
一种根据本发明的实施例的方法可作为计算机实现方法实现在计算机系统上。针对根据本发明的方法的可执行代码可存储在计算机程序介质上。计算机程序介质的示例包括存储器设备、光存储设备、集成电路、服务器、在线软件等。这种计算机系统还可包括其他硬件元件,包括存储器、用于与外部系统以及在计算机系统的元件之间传输数据的网络接口。
在本发明的实施例中,计算机程序可包括适于在计算机程序运行于计算机上时执行根据本发明的方法的所有步骤的计算机程序代码。优选地,计算机程序实现在非瞬时计算机可读介质上。
一种根据本发明创建经掩盖的代码的方法可作为计算机实现方法实现在计算机上。针对根据本实施例的方法的可执行代码可存储在计算机程序介质上。在这种方法中,计算机程序可包括适于在计算机程序运行于计算机上时执行方法的所有步骤的计算机程序代码。计算机程序实现在非瞬时计算机可读介质上。
运行于处理器上的用来实现本发明的实施例的特定软件的任意组合构成特定专用机器。
本文使用的术语“非瞬时机器可读存储介质”将被理解为排除瞬时传播信号,但包括所有形式的易失性和非易失性存储器。此外,本文使用的术语“处理器”将被理解为涵盖多种类型的设备,比如微处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)和其它类似的处理设备。当在处理器上实现软件时,组合变成单个特定机器。
虽然特别地参照多种示例性实施例的某些示例性方面对多种示例性实施例进行了具体描述,但应该理解的是,本发明能够具有其它实施例并且能够在多个明显的方面对其细节进行修改。对于本领域技术人员显而易见的是,在保持在本发明的精神和范围内的同时,可以进行各种变形和修改。从而,前述公开、说明书和附图只是为了说明,而不以任何方式限制本发明,本发明仅由权利要求限定。
Claims (12)
1.一种对包括多个指令的软件代码进行掩盖的方法,包括:
由处理器确定针对当前指令的N个先前指令;
基于第一函数、第二函数和所述N个先前指令对所述当前指令进行编码,
其中所述第二函数基于所述N个先前指令,以及
所述第一函数基于所述当前指令和所述第二函数的输出。
2.根据权利要求1所述的方法,还包括:
确定在所述N个先前指令或所述当前指令中存在连接点;
当存在连接点时,针对所述连接点之前的每个先前指令产生掩码值,其中所述掩码是基于所述连接点之前的并行指令中的公共比特设置的;以及
将所述掩码与所述当前指令相关联。
3.根据权利要求1所述的方法,还包括:
确定在所述N个先前指令或所述当前指令中存在连接点;
当存在连接点时,在所述连接点之前插入1个NOOP指令,其中I是所述连接点之前的先前指令的数量。
4.根据权利要求1所述的方法,还包括:
确定在所述N个先前指令或所述当前指令中存在连接点;
当存在连接点时,将所述连接点下移1个指令,其中I是所述连接点之前的先前指令的数量。
5.根据权利要求1所述的方法,还包括:
接收采用更高级语言的软件代码;以及
将所接收的软件代码编译成机器可执行指令。
6.根据权利要求1所述的方法,还包括:
接收采用更高级语言的软件代码;以及
将所接收的软件代码解译成机器可执行指令。
7.根据权利要求1所述的方法,还包括:产生密钥,其中所述密钥与针对第一当前指令的N个先前指令相对应。
8.根据权利要求1所述的方法,其中,所述N个先前指令是N个先前经编码的指令。
9.根据权利要求1所述的方法,还包括:
由处理器确定与当前指令之前的所述N个先前指令相关联的M个先前数据值;以及
其中对所述当前指令进行编码还基于所述M个数据值,其中所述第二函数还基于所述M个先前数据值。
10.根据权利要求9所述的方法,还包括:产生密钥,其中所述密钥与针对第一当前指令的N个先前指令和M个先前数据值相对应。
11.一种对包括多个经编码的指令的经掩盖的软件代码进行解码的方法,包括:
由处理器确定针对当前经编码的指令的N个先前经编码的指令;
基于第一函数、第二函数和所述N个先前经解码的指令对所述当前经编码的指令进行解码,
其中所述第二函数基于所述N个先前经解码的指令,以及
所述第一函数基于所述当前经编码的指令和所述第二函数的输出。
12.根据权利要求11所述的方法,还包括:接收密钥,其中所述密钥与针对第一经编码的当前指令的N个先前指令相对应。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/281,232 | 2014-05-19 | ||
US14/281,232 US9547758B2 (en) | 2014-05-19 | 2014-05-19 | Program cable obfuscation based upon recently executed program code |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105095698A true CN105095698A (zh) | 2015-11-25 |
CN105095698B CN105095698B (zh) | 2018-05-18 |
Family
ID=53039735
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510245908.3A Active CN105095698B (zh) | 2014-05-19 | 2015-05-14 | 基于最近执行的程序代码的程序代码模糊处理 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9547758B2 (zh) |
EP (1) | EP2947590B1 (zh) |
CN (1) | CN105095698B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3591550A1 (en) | 2018-07-06 | 2020-01-08 | Koninklijke Philips N.V. | A compiler device with masking function |
EP4002165A1 (en) * | 2020-11-18 | 2022-05-25 | Thales DIS France SA | Code flow protection with error propagation |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080162949A1 (en) * | 2005-02-10 | 2008-07-03 | Taichi Sato | Program Conversion Device and Program Execution Device |
US20090125728A1 (en) * | 2007-11-14 | 2009-05-14 | Sungkyunkwan University Foundation For Corporate Collaboration | Security method of system by encoding instructions |
CN101751243A (zh) * | 2008-12-15 | 2010-06-23 | 汤姆森许可贸易公司 | 用于指令级软件加密的方法和设备 |
US20130232323A1 (en) * | 2012-03-02 | 2013-09-05 | Apple Inc | Obfuscation of control flow of software |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7353499B2 (en) * | 2003-09-25 | 2008-04-01 | Sun Microsystems, Inc. | Multiple instruction dispatch tables for application program obfuscation |
US8220058B2 (en) * | 2003-09-25 | 2012-07-10 | Oracle America, Inc. | Rendering and encryption engine for application program obfuscation |
ATE456837T1 (de) * | 2007-06-29 | 2010-02-15 | Ericsson Telefon Ab L M | Verschleierung von ausführungsspuren eines computerprogrammcodes |
US9015281B2 (en) * | 2010-10-08 | 2015-04-21 | Brian Lee Moffat | Private data sharing system |
US20140013451A1 (en) * | 2012-07-06 | 2014-01-09 | Sap Ag | Data obfuscation for open data (odata) communications |
US9268677B2 (en) * | 2012-10-24 | 2016-02-23 | Apple Inc. | Dynamic obfuscation of heap memory allocations |
US9336370B2 (en) * | 2012-12-06 | 2016-05-10 | Apple Inc. | Method and apparatus for dynamic obfuscation of static data |
US9116712B2 (en) * | 2013-02-28 | 2015-08-25 | Microsoft Technology Licensing, Llc | Compile based obfuscation |
KR101350390B1 (ko) * | 2013-08-14 | 2014-01-16 | 숭실대학교산학협력단 | 코드 난독화 장치 및 그 방법 |
US9818000B2 (en) * | 2014-03-23 | 2017-11-14 | Southern Methodist University | Protecting hidden content in integrated circuits |
-
2014
- 2014-05-19 US US14/281,232 patent/US9547758B2/en active Active
-
2015
- 2015-04-24 EP EP15165106.4A patent/EP2947590B1/en active Active
- 2015-05-14 CN CN201510245908.3A patent/CN105095698B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080162949A1 (en) * | 2005-02-10 | 2008-07-03 | Taichi Sato | Program Conversion Device and Program Execution Device |
US20090125728A1 (en) * | 2007-11-14 | 2009-05-14 | Sungkyunkwan University Foundation For Corporate Collaboration | Security method of system by encoding instructions |
CN101751243A (zh) * | 2008-12-15 | 2010-06-23 | 汤姆森许可贸易公司 | 用于指令级软件加密的方法和设备 |
US20130232323A1 (en) * | 2012-03-02 | 2013-09-05 | Apple Inc | Obfuscation of control flow of software |
Also Published As
Publication number | Publication date |
---|---|
US20150332027A1 (en) | 2015-11-19 |
US9547758B2 (en) | 2017-01-17 |
CN105095698B (zh) | 2018-05-18 |
EP2947590A1 (en) | 2015-11-25 |
EP2947590B1 (en) | 2020-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106462677B (zh) | 一种保护软件项目的方法和装置 | |
CN101568927B (zh) | 混淆计算机程序代码 | |
CN108345773B (zh) | 基于虚拟机的代码保护方法及装置、电子设备、存储介质 | |
US9904526B2 (en) | Control flow graph flattening device and method | |
EP2962193B1 (en) | Compiler based obfuscation | |
CN105117621B (zh) | 代码混淆的控制流平展化 | |
US11475166B2 (en) | Compiling device and method | |
CN112639774B (zh) | 具有掩蔽功能的编译器设备 | |
CN111512307B (zh) | 编译设备和方法 | |
CN110210211A (zh) | 一种数据保护的方法和计算设备 | |
EP2937803B1 (en) | Control flow flattening for code obfuscation where the next block calculation needs run-time information | |
KR20160108427A (ko) | 암호화 알고리즘에 사용될 때 비밀 데이터를 보호하는 방법 | |
JP2007304726A (ja) | プログラム難読化装置、難読化方法及び難読化プログラム | |
CN108182358B (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
CN105095698A (zh) | 基于最近执行的程序代码的程序代码模糊处理 | |
US11210135B2 (en) | Lightweight dispatcher for program control flow flattening | |
CN108021790B (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
Xie et al. | Random table and hash coding‐based binary code obfuscation against stack trace analysis | |
CN108052806B (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
JP2011150560A (ja) | ソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラム |
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 |