CN105117621B - 代码混淆的控制流平展化 - Google Patents

代码混淆的控制流平展化 Download PDF

Info

Publication number
CN105117621B
CN105117621B CN201510193796.1A CN201510193796A CN105117621B CN 105117621 B CN105117621 B CN 105117621B CN 201510193796 A CN201510193796 A CN 201510193796A CN 105117621 B CN105117621 B CN 105117621B
Authority
CN
China
Prior art keywords
basic block
former
block
basic
mask
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
Application number
CN201510193796.1A
Other languages
English (en)
Other versions
CN105117621A (zh
Inventor
简·胡格布鲁格
菲利普·特温
W·P·A·J·米歇尔斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NXP BV
Original Assignee
NXP BV
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NXP BV filed Critical NXP BV
Publication of CN105117621A publication Critical patent/CN105117621A/zh
Application granted granted Critical
Publication of CN105117621B publication Critical patent/CN105117621B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/106Enforcing content protection by specific content processing
    • G06F21/1066Hiding content

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

一种混淆包括多个基本块的软件代码的方法,其中所述基本块具有相关的标识符(ID),所述方法包括:由处理器确定针对第一基本块的第一前任基本块,其中第一前任基本块跳至第一基本块,第一基本块基于下一基本块ID跳至下一基本块;由处理器基于第一前任基本块的ID,产生掩码值,其中所述掩码值标识了第一前任基本块的ID的公共比特;以及由处理器在第一基本块中插入指令以便基于掩码值和第一前任基本块之一的ID,确定下一基本块ID。

Description

代码混淆的控制流平展化
技术领域
本文公开的各个示例实施例总体涉及在下一块计算需要运行时间信息的情况下用于代码混淆的控制流平展化(control flow flattening)。
背景技术
如今软件应用被广泛用于向用户提供多种服务。这些软件应用可以被安装在多种不同设备上,诸如,移动电话、个人计算机、膝上型计算机、平板电脑、机顶盒等。软件应用在消费者使用的系统中或工业系统中。软件应用还可以在智能卡和信用卡中。此外,可以跨越诸如互联网之类的网络实现软件应用,其中软件应用运行在服务器上,使用各种用户设备来访问所述软件应用。许多这些软件应用需要使用安全协议来保护内容、信息、交易和隐私。许多软件应用运行在攻击者对软件应用的操作完全控制的环境下,攻击者可以尝试对软件应用的代码进行反向工程,以便获得对安全信息的访问或者甚至理解软件的操作以便重现或修改软件应用的功能。攻击者可以使用多种反向工程工具,诸如,代码分析仪和调试器,以便获得与软件应用相关的信息。因此,开发了多种技术以便使攻击者难以对软件进行反向工程。一种使代码的反向工程困难的方式是代码混淆。代码混淆想要创建难以让人理解的混淆代码。可以将代码混淆用于隐藏软件应用的目的或逻辑,以便防止对软件应用进行篡改或反向工程。
发明内容
下文呈现出对多种示例实施例的简要概述。在以下概述中进行一些简化和省略,这是为了突出并介绍多种示例实施例的一些方面,而不是限制本发明的范围。后面部分展示了对示例实施例的具体描述,足以允许本领域技术人员理解和使用本发明构思。
多种示例实施例涉及一种混淆包括多个基本块的软件代码的方法,其中所述基本块具有相关的标识符(ID),所述方法包括:由处理器确定针对第一基本块的第一前任基本块,其中第一前任基本块跳至第一基本块,第一基本块基于下一基本块ID跳至下一基本块;由处理器基于第一前任基本块的ID而产生掩码值(mask value),其中掩码值标识了第一前任基本块的ID的公共比特(common bit);以及由处理器在第一基本块中插入指令以便基于掩码值和第一前任基本块之一的ID,确定下一基本块ID。
描述了多种实施例,其中所述确定下一基本块ID还是基于条件的。
描述了多种实施例,还包括产生由基本块ID索引的基本块地址表。
描述了多种实施例,其中通过以下操作来计算掩码值:通过对第一前任基本块的ID逐比特求“与”来计算第一结果,通过对第一前任基本块的反逐比特求“与”来计算第二结果,以及对第一结果和第二结果逐比特求“或”。
描述了多种实施例,其中第一前任基本块是多个虚拟基本块,其中所述多个虚拟基本块具有第二多个前任基本块,其中所述多个虚拟基本块将来自第二多个前任基本块的控制流合并到基本块。
描述了多种实施例,还包括:接收高级语言的软件代码;并将接收到的软件代码编译为具有基本块的软件代码。
描述了多种实施例,其中编译接收到的软件代码包括:确定针对第一基本块的第一前任基本块;产生掩码值;以及在第一基本块中插入指令。
描述了多种实施例,其中通过以下计算来确定下一基本块ID:bb_next=(bb_prev&mask)+(cond?(ID_then_BB-(ID_prev_BB&mask)):(ID_else_BB-(ID_prev_BB&mask))),其中bb_next是下一基本块ID,bb_prev是一个前任基本块ID,mask是掩码值,cond是布尔值或表达式,ID_then_BB和ID_else_BB是根据cond值的下一基本块的ID,ID_prev_BB是任意前任块的ID。
描述了多种实施例,其中当由于落空(fall through)下一基本块而结束第一基本块时,将跳变指令(jump instruction)插入下一基本块。
描述了多种实施例,还包括移动(shuffle)多个基本块。
此外,多种示例实施例涉及一种非暂时性机器可读存储介质,利用由处理器执行的软件代码的基本块的指令对非暂时性所述机器可读存储介质编码,所述非暂时性机器可读存储介质包括:用于基于掩码、前任基本块的标识符(ID)和基于条件的ID来确定下一基本块的ID的指令;以及用于跳至下一基本块的指令,其中所述掩码标识了第一多个前任基本块中的公共比特。
描述了多种实施例,还包括:用于将标识前任基本块的变量设置为基本块的ID的指令;以及用于将标识基本块的变量设置为所确定的下一基本块的ID的指令。
描述了多种实施例,其中通过以下操作来计算掩码:通过对第一前任基本块的ID逐比特求“与”来计算第一结果,通过对第一前任基本块的ID的反逐比特求“与”来计算第二结果,以及将第一结果和第二结果逐比特求“或”。
描述了多种实施例,其中第一前任基本块是多个虚拟基本块,所述多个虚拟基本块具有第二多个前任基本块,其中所述多个虚拟基本块将来自第二多个前任基本块的控制流合并到基本块。
描述了多种实施例,其中所述用于跳至下一基本块的指令包括:基于所确定的下一基本块的ID访问由基本块ID索引的基本块地址表。
描述了多种实施例,其中使用以下计算来计算用于确定下一基本块的ID的指令:bb_next=(bb_prev&mask)+(cond?(ID_then_BB-(ID_prev_BB&mask)):(ID_else_BB-(ID_prev_BB&mask))),其中bb_next是下一基本块ID,bb_prev是一个前任基本块ID,mask是掩码值,cond是布尔值或表达式,ID_then_BB和ID_else_BB是根据cond值的下一基本块的ID,ID_prev_BB是任意前任块的ID。
此外,多种示例实施例涉及一种执行由处理器执行的软件代码的基本块的指令的方法,包括:由处理器来基于掩码、前任基本块的ID和基于条件的ID确定下一基本块的标识符(ID);以及由处理器来跳至下一基本块,其中所述掩码标识了第一多个前任基本块中的公共比特。
描述了多种实施例,还包括:由处理器将标识前任基本块的变量设置为基本块的ID;以及由处理器将标识基本块的变量设置为所确定的下一基本块的ID。
描述了多种实施例,其中通过以下操作来计算掩码:通过对第一前任基本块的ID逐比特求“与”来计算第一结果,通过对第一前任基本块的ID的反逐比特求“与”来计算第二结果,以及将第一结果和第二结果逐比特求“或”。
描述了多种实施例,其中第一前任基本块是多个虚拟基本块,其中所述多个虚拟基本块具有第二多个前任基本块,其中所述多个虚拟基本块将来自第二多个的前任基本块的控制流合并到基本块。
描述了多种实施例,其中跳至下一基本块包括:基于所确定的下一基本块的ID来访问由基本块ID索引的基本块地址表。
描述了多种实施例,其中使用以下计算来确定下一基本块的ID:bb_next=(bb_prev&mask)+(cond?(ID_then_BB-(ID_prev_BB&mask)):(ID_else_BB-(ID_prev_BB&mask))),其中bb_next是下一基本块ID,bb_prev是一个前任基本块ID,mask是掩码值,cond是布尔值或表达式,ID_then_BB和ID_else_BB是根据cond值的下一基本块的ID,ID_prev_BB是任意前任块的ID。
附图说明
为了更好地理解多种示例实施例,参考附图,附图中:
图1示出了混淆软件代码的方法。
为了便于理解,将相同的附图标记用于表示基本具有相同或相似结构和/或基本具有相同或相似功能的元件。
具体实施方式
以下描述和附图示出了本发明的原理。因此,尽管文中并未明确描述或示出,然而应认识到本领域技术人员可以想出体现本发明原理并且包括在本发明的范围内的多种布置。此外,本文记载的所有示例主要显式地用于教学目的,以帮助读者理解本发明的原理和发明人所提供的构思以改进现有技术,应将本发明理解为不限于这种具体记载的示例和条件。此外,除非指出(例如,“否则”或“或替代地”),否则文中使用的术语“或”是指非排除性的或(即,和/或)。此外,本文所述的多种实施例不必是互相排除性的,这是由于可以将一些实施例合并为一个或更多个其它实施例,以形成新的实施例。
可以使用多个基本块来实现软件应用。多个基本块相互连接,这样,一些块基于一个或更多个前任块的处理后的数据。例如,基本块可以使用多个计算机指令,包括算术指令,这些计算机指令一起实现了基本块的功能。基本块是软件应用中代码的一部分,仅有一个输入点(entry point)和一个输出点(exit point)。基本块具有第一指令,当执行第一指令时,必须将基本块中的其它指令精确地按顺序执行一次。可以使用代码混淆来实现软件应用。将到达基本块结尾之后可以向其传送控制的基本块称作基本块的后继。将进行到基本块时控制源自的基本块称作基本块的前任。此外,可以与实现软件应用的其它方法(诸如查找表或有限状态机)一起使用代码混淆,以便防止对软件应用的攻击。
将基本块的网络布置为执行软件应用的功能。通常,软件应用可以接收输入信息,多个基本输入块作用于所述输入信息。多个其他基本块可以从一个或更多个基本输入块和/或从输入信息获取输入。其他基本块可以采用输入信息、基本输入块的输出和其它基本块的输出的任意组合形式的输入。最终,基本输出块的集合可以产生一些类型的输出。在这种方式下,出现了集体地执行软件应用的功能的基本块网络。
在许多情况中,必须相对试图对代码进行反向工程的攻击者保护软件应用,如上述示例所述。攻击者可以使用复杂工具来分析二进制形式的软件,从而理解软件在进行什么操作和软件如何工作。一种用于抵抗这种分析的有效且已知技术是控制流平展化,其中来自功能的控制流图(control flow graph)的所有结构都被去除。每个基本块通过确定要执行的下一基本块的小型计算就可以结束。在“Surreptitious Software---Obfuscation,Watermarking,and Tamperproofing for Software Protection”,Christian Collberg,JasvirNagra,Addison-Wesley Software Security Series,Editor:Gary McGraw,792pages,ISBN:0-321-54925-2,August 2009中描述了这种技术。因此,需要进行这种计算,使得反向工程工具无法根据基本块中的代码确定该基本块可以具有哪些后继基本块。已知其他技术,其中后继基本块的计算需要当前基本块中不可用的信息。在Jan Cappaert和Bart Preneel的“An overview of control flow graph flattening”(K.U.Leuven/ESAT/SCD-COSIC,re-trust.dit.unitn.it/files/20081015Doc/session2-1Cappaert.pdf)中描述了这种技术。如这里实施例所示,可以通过计算上次执行的基本块的ID与恒定delta之和作为后继基本块的标识符(ID),来完成该操作。问题在于基本块可能具有多个前任基本块,每个前任基本块具有各自的ID。然后可以通过以下方式来解决该问题:确定所有前任基本块的ID中的公共比特,并将这些公共比特用作掩码,其中在将上次执行的基本块的ID与恒定delta相加之前,将所述掩码应用于上次执行的基本块的ID。相较于现有技术,这里所述的实施例需要代价更低的计算,这降低了在执行时间开销和代码尺寸(code size)增加方面的性能损失。
现给出实施例的概述。实施例旨在重写基本块,如:
可以如下所示地重写上述基本块:
向如上所述的基本块应用以下定义:
-X&Y表示对X和Y逐比特求“与”;
-C?X:Y意味着如果条件C为真,则值为X,否则值为Y;
-根据cond值,当前基本块curr_BB的后继是then_BB或else_BB;
-ID_xyz是可以用于对基本块地址表(称作bb_table)进行索引的基本块标识符xyz
-ID_prey_BB是任意前任基本块的ID;
-bb,bb_prev和bb_next是用于在执行期间记录(keep track of)当前、前任和下一基本块的变量;
-mask值是常数,所述常数选择前任基本块的所有ID中具有相同值的ID的所有比特;如果当前基本块具有单个前任基本块,则mask将设置所有比特;以及
-所有基本块地址被存储在称作bb_table的表中,由基本块ID来对所述表进行索引。
尽管所添加的代码乍看之下是昂贵的,然而由于ID和掩码是恒定的,编译器可以方便地简化代码。
反向工程工具通过将二进制格式的程序划分为功能块并将功能块划分为基本块,来分析该程序。对于每个功能块,反向工程工具创建控制流图,其中节点代表基本块,边缘代表在基本块之间的控制流。例如,边缘(b1,b2)意味着在执行基本块b1之后下一块应可以是b2。当以清楚的方式向用户呈现控制流图时,用户可以得到对该代码的大量了解。控制流图将清楚地示出代码是如何架构的,例如,loops和if-then-else结构。
例如,考虑用条件跳变结束的基本块:
在该代码中,被称作curr_BB的当前基本块包括以条件跳变结束的一系列指令,如果条件cond为真,则所述条件跳变跳至基本块then_BB,否则该过程进行到随后的基本块,被称作else_BB(在一些情况下,可以仅落空下一相邻基本块)。
通过在指令流中直接指定then_BB,由于cjmp是条件跳变,反向工程工具立即得知(curr_BB,then_BB)和(curr_BB,else_BB)是控制流图中的边缘。可以通过被称作控制流平展化的已知技术,来去除这种显式的指定。构思在于向功能块(或功能块的集合)中的每个基本块分配ID,并产生可以用这些ID索引的基本块地址表。代替使用所谓的条件性或非条件性的直接跳变来结束基本块,控制流平展化用间接跳变来结束每个基本块,其中从表中获得地址。示例代码变成:
相较于假定跳变到代码中所有基本块的情形,较不先进的(less advanced)反向工程工具无法较多利用基本块结尾处的间接跳变(因为从bb_table引用所有基本块,反向工程工具知道基本块开始的位置,并且不必假定间接跳变可以跳至代码中的每个指令)。然而,更先进的反向工程工具可以分析bb是ID_then_BB还是ID_else_BB,并利用这一点来构造准确的控制流图。防止这种情况的方法是使得bb的计算依赖于当前基本块中不可用而仅在执行代码期间可用的内容。可以通过记录上次执行的基本块并使用该值作为参考来确定要执行的下一基本块,来实现该操作。那么示例代码变为:
所以代码在变量bb_prev中记录上次执行的基本块,可以通过将bb_prev与detla相加来计算下一基本块,其中detla是目标基本块的ID和上次执行的基本块的ID之间的差值。该方法存在一个问题。大部分基本块不具有可以作为delta的基础的唯一前任基本块。在这种情况下,应用本发明实施例,以便克服该问题。
如果基本块具有ID为P1..Pn的n个前任基本块,则可以确定P1..Pn中的公共比特。可以仅通过对P1..Pn逐比特求“与”并对P1..Pn的反逐比特逐比特求“与”,来进行该操作。结果分别是所有前任基本块ID中为1的比特位置以及所有前任基本块ID中为零的比特位置。对这两个比特位置逐比特求“或”得到了在所有前任基本块ID中相等的比特。可以将这个得到值用作掩码,以便从计算中无法使用的前任基本块ID中移除比特。则得到的代码为:
应注意,掩码是特定于每个基本块的常数。此外,ID_prev_BB是任意前任基本块的ID。
通过如上所述地转换基本块,获得以间接跳变结束的基本块,其中无法根据孤立的基本块和基本块表来确定间接跳变的地址。
可以通过不仅隐藏后继基本块而且还隐藏在直接功能块调用中调用哪个功能块,来方便地扩展实施例。那么可以扩展bb table以便包括功能块地址。这意味着混淆了功能块的控制流图以及程序的调用图二者。这种代码的示例为:
如果基本块具有许多前任基本块,这许多前任块的ID有可能具有极少的(如果有的话)公共比特。结果为掩码将有极少的比特被置位或变为0。这样可能令通过反向工程工具/攻击者确定代码功能的任务更容易。通过向块分配ID使得通用基本块的前任块的ID具有许多公共比特,可以避免该问题。备选地,根据多个前任基本块,一个基本块可以将一些步骤中的控制流合并到虚拟基本块,使得每个基本块具有一些前任基本块。例如,基本块g具有8个可能的前任基本块p1...p8。那么,前任基本块将如下所述地跳至中间基本块h1和h2:基本块p1...p4跳至基本块h1,基本块p5...p8调制基本块h2。那么,基本块g仅具有两个前任基本块h1和h2,而不是8个。
在对本文所述实施例的说明中,不讨论由于落空后续基本块而没有以跳变结束的基本块。可以通过以向后续基本块的直接跳变来结束基本块,来处理这些落空情况。因此,在使用控制流平展化之后,在代码中不存在落空基本块。因此,可以移动所有基本块,以便进一步混淆程序代码。
在对控制流平展化的许多描述中,将最终的代码示出为无限循环,无限循环中具有选择要执行的下一基本块的开关语句(switch statement)。这种架构比本文描述的架构(在每个基本块结尾直接跳变)具有更多开销。然而,还可以将跟踪上次执行的基本块并向其应用掩码以便计算下一基本块的构思应用于这种类型的控制流平展化。
本文所示的实施例可以实现为将高级语言编译为在处理器上执行的机器代码的编译器。此外,还可以将实施例应用于已有的机器代码以便混淆该机器代码的操作。
图1示出了混淆软件代码的方法。方法100可以在105处开始。接下来,该方法可以接收高级语言源代码110。然后,该方法100可以编译高级语言源代码115。接下来,该方法100可以标识编译代码120中的基本块。然后,该方法100可以针对每个基本块确定前任基本块125。接下来,基于前任基本块的列表,该方法100可以基于前任基本块130的ID产生掩码值。这可以如上所述地进行。然后,可以进行检查以便确定对前任基本块ID中的公共比特(comment bit)的数目加以指示的1比特的数目。如果1比特的数目不足,则可以创建135虚拟前任块,并且可以合并对基本块的流控制。上文详细描述了这一点。如果掩码中1比特的数目不足,则可以跳过该步骤。接下来,该方法100可以将跳变指令插入基本块,或修改基本块中的跳变指令140,以便考虑掩码和前任基本块ID,如上所述。然后,所述方法100可以向基本块插入指令以便更新跟踪当前和先前基本块ID的变量145。然后,该方法在150处结束。方法的一部分还可以包括:创建由基本块ID来索引的基本块地址表。例如,当标识基本块时,可以在步骤120创建这种表。然后,可以由于该方法中的其它步骤而更新该表。例如,如上所述,可以移动各种基本块,并且可以相应地修改该表。当编译代码时,可以在编译器中执行该方法。此外,在已编译代码之后,可以独立于编译器来应用步骤中的多个。在上述实施例中讨论了方法100中的步骤的多个方面。
可以在计算机系统上将根据本发明实施例的方法实现为计算机实现方法。可以将针对根据本发明的方法的可执行代码存储在计算机程序介质上。计算机程序介质的示例包括存储器设备、光学存储设备、集成电路、服务器、在线软件等。这种计算机系统还可以包括其它硬件元件,包括存储设备、用于与外部系统传输数据的网络接口、以及计算机系统元件。
在本发明实施例中,计算机程序可以包括计算机程序代码,用于当该计算机程序代码运行在计算机上时,执行根据本发明的方法的所有步骤。优选地,计算机程序体现在非暂时性计算机可读介质上。
可以在计算机上将根据本发明的创建白盒实现方案的混淆代码的方法实现为计算机实现方法。可以将针对根据实施例的方法的可执行代码存储在计算机程序介质上。在这种方法中,计算机程序可以包括计算机程序代码,用于当在计算机上运行所述计算机程序时,执行所述方法的所有步骤。计算机程序体现在非暂时性的计算机可读介质上。
运行在处理器上的用于实现本发明实施例的具体软件的任何组合构成专用机器。
如本文所用,应将术语“非暂时性机器可读存储介质”理解为包括暂时性的传播信号,并且包括所有形式的易失性和非易失性存储器。此外,如本文所用,应将术语“处理器”理解为包括诸如微处理器、场可编程门阵列(FPGA)、专用集成电路(ASIC)和其它类似处理器件的多种器件。当在所述处理器上执行软件时,所述组合成为单个具体机器。
尽管具体参考本发明的特定示例方面详细描述了多种示例实施例,然而应认识到,本发明包括其它实施例,本发明的详情包括多种明显方面的修改。对本领域技术人员显而易见的是可以在本发明的精神和范围内进行多种变形和修改。因此,上述公开、描述和附图仅是说明目的,而不是以任何方式限制本发明,本发明仅由权利要求来限定。

Claims (9)

1.一种混淆包括多个基本块的软件代码的方法,其中所述基本块具有相关的标识符(ID),所述方法包括:
由处理器确定针对第一基本块的第一前任基本块,其中第一前任基本块跳至第一基本块,第一基本块基于下一基本块ID跳至下一基本块;
由处理器基于第一前任基本块的ID,产生掩码值,其中所述掩码值标识了第一前任基本块的ID的公共比特;以及
由处理器在第一基本块中插入指令以便基于掩码值和第一前任基本块之一的ID,确定下一基本块ID,
其中通过以下操作来计算所述掩码值:通过对第一基本块的ID逐比特求“与”来计算第一结果,通过对第一基本块的ID的反逐比特求“与”来计算第二结果,以及对第一结果和第二结果逐比特求“或”。
2.根据权利要求1所述的方法,其中所述确定下一基本块ID还是基于条件的。
3.根据权利要求1所述的方法,还包括产生由基本块ID索引的基本块地址表。
4.根据权利要求1所述的方法,其中所述第一前任基本块是多个虚拟基本块,其中所述多个虚拟基本块具有第二多个前任基本块,其中所述多个虚拟基本块将来自所述第二多个前任基本块的控制流合并至所述基本块。
5.根据权利要求1所述的方法,还包括:
接收较高级语言的软件代码;以及
将接收到的软件代码编译为具有基本块的软件代码。
6.根据权利要求5所述的方法,其中编译接收到的软件代码包括:确定针对第一基本块的第一前任基本块;产生掩码值;以及在第一基本块中插入指令。
7.根据权利要求1所述的方法,其中通过以下计算来确定所述下一基本块ID:bb_next=(bb_prev&mask)+(cond?(ID_then_BB–(ID_prev_BB&mask)):(ID_else_BB-(ID_prev_BB&mask))),其中bb_next是下一基本块ID,bb_prev是一个前任基本块ID,mask是掩码值,cond是布尔值或表达式,ID_then_BB和ID_else_BB是根据cond值的下一基本块的ID,ID_prev_BB是任意前任块的ID。
8.根据权利要求1所述的方法,其中当由于进行到下一基本块而结束第一基本块时,将跳变指令插入所述下一基本块。
9.根据权利要求8所述的方法,还包括移动所述多个基本块。
CN201510193796.1A 2014-04-23 2015-04-22 代码混淆的控制流平展化 Active CN105117621B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/259,395 US10599820B2 (en) 2014-04-23 2014-04-23 Control flow flattening for code obfuscation where the next block calculation needs run-time information
US14/259,395 2014-04-23

Publications (2)

Publication Number Publication Date
CN105117621A CN105117621A (zh) 2015-12-02
CN105117621B true CN105117621B (zh) 2018-11-23

Family

ID=54335045

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510193796.1A Active CN105117621B (zh) 2014-04-23 2015-04-22 代码混淆的控制流平展化

Country Status (2)

Country Link
US (1) US10599820B2 (zh)
CN (1) CN105117621B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2913773A1 (en) * 2014-02-27 2015-09-02 Thomson Licensing Run-time Continuous Address Space Layout Randomization of flattened Control Flow Graph
CN105701410B (zh) * 2015-12-31 2019-03-01 华为技术有限公司 一种获得源代码中信息的方法、装置及系统
CN106095470B (zh) * 2016-08-17 2019-08-09 广东工业大学 基于压扁控制流认知优先度驱动的程序理解方法及系统
US10467390B1 (en) 2016-08-18 2019-11-05 Snap Inc. Cyclically dependent checks for software tamper-proofing
CN106778101B (zh) * 2016-12-08 2019-05-14 合肥康捷信息科技有限公司 一种基于控制流和外形混淆的Python代码混淆方法
EP3355218A1 (en) * 2017-01-26 2018-08-01 Gemalto Sa Method to secure a software code
DE102017204020A1 (de) * 2017-03-10 2018-09-13 Siemens Aktiengesellschaft Verfahren zur rechnergestützten Obfuskation von Programmcode
CN108446538B (zh) * 2018-02-12 2020-02-07 北京梆梆安全科技有限公司 基于状态、符号执行和单点逻辑的源代码加固方法及装置
CN108416191B (zh) * 2018-02-12 2021-11-19 北京梆梆安全科技有限公司 基于不透明谓词和有限状态机加固源代码的方法及装置
EP3617920A1 (en) 2018-08-31 2020-03-04 Nagravision S.A. Software tamper resistance
EP3722980A1 (en) * 2019-04-10 2020-10-14 SafeNet, Inc. Method to secure a software code
CN112199163B (zh) * 2020-10-16 2021-12-28 常熟理工学院 分析解释例程的虚拟指令方法、装置、设备及存储介质
US20240085520A1 (en) 2021-01-20 2024-03-14 Signify Holding B.V. A method of, an electronic sensing device and a system for processing an interference detected by a first electronic sensing device

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5509129A (en) * 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US6199095B1 (en) * 1996-01-29 2001-03-06 Compaq Computer Corporation System and method for achieving object method transparency in a multi-code execution environment
US6157955A (en) * 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
DE19907970A1 (de) 1999-02-24 2000-08-31 Bosch Gmbh Robert Lichtsensor
US7430670B1 (en) * 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
JP2001085660A (ja) 1999-09-10 2001-03-30 Toshiba Corp 固体撮像装置及びその制御方法
US7254720B1 (en) * 2002-02-13 2007-08-07 Lsi Corporation Precise exit logic for removal of security overlay of instruction space
US7266661B2 (en) * 2004-05-27 2007-09-04 Silverbrook Research Pty Ltd Method of storing bit-pattern in plural devices
US20060143454A1 (en) * 2004-05-27 2006-06-29 Silverbrook Research Pty Ltd Storage of multiple keys in memory
DE102005009019B4 (de) 2005-02-28 2008-01-10 Qimonda Ag Transistoranordnung mit Gate-Spacerstrukturen und Verfahren zu deren Herstellung
KR100722690B1 (ko) 2005-11-07 2007-05-29 플래닛팔이 주식회사 씨모스 이미지 센서의 단위 픽셀
US7779258B2 (en) * 2006-09-22 2010-08-17 International Business Machines Corporation Method for controlling security function execution with a flexible, extendable, and non-forgable block
US8422668B1 (en) * 2006-12-15 2013-04-16 Spansion Llc Table lookup operation on masked data
EP1936532B1 (en) 2006-12-21 2009-07-29 Telefonaktiebolaget LM Ericsson (publ) Obfuscating computer program code
EP2159732A1 (en) 2008-08-21 2010-03-03 Thomson Licensing Method and device for code obfuscation
US8489794B2 (en) * 2010-03-12 2013-07-16 Lsi Corporation Processor bus bridge for network processors or the like
US8756435B2 (en) 2012-03-02 2014-06-17 Apple Inc. Obfuscation of control flow of software
US9336370B2 (en) * 2012-12-06 2016-05-10 Apple Inc. Method and apparatus for dynamic obfuscation of static data

Also Published As

Publication number Publication date
US10599820B2 (en) 2020-03-24
US20150310193A1 (en) 2015-10-29
CN105117621A (zh) 2015-12-02

Similar Documents

Publication Publication Date Title
CN105117621B (zh) 代码混淆的控制流平展化
US11797278B2 (en) Method for compiling from a high-level scripting language to a blockchain native scripting language
KR102107872B1 (ko) 컴파일러 기반 난독화 기법
CN106250104B (zh) 一种针对服务器的远程操作系统、方法及装置
CN108537012B (zh) 基于变量和代码执行顺序的源代码混淆方法及装置
JP7132926B2 (ja) コンパイルデバイス及びコンパイル方法
EP2937803B1 (en) Control flow flattening for code obfuscation where the next block calculation needs run-time information
CN108595921A (zh) 一种源代码中字符串的混淆方法和装置
CN105930694A (zh) 用于模糊虚拟机的灵活指令集
EP3035228B1 (en) Code integrity protection by computing target addresses from checksums
US11119741B2 (en) Compiling device and method
JP2022009556A (ja) ソフトウェアコードをセキュアにするための方法
EP3918494B1 (en) Systems, methods, and storage media for obfuscating a computer program by representing the control flow of the computer program as data
CN110825363A (zh) 智能合约获取方法、装置、电子设备及存储介质
US11409848B2 (en) Compiler device with masking function
CN111819542A (zh) 编译设备和方法
US8327452B2 (en) Program obfuscation apparatus, program obfuscation method and computer readable medium
CN108446538B (zh) 基于状态、符号执行和单点逻辑的源代码加固方法及装置
US11210135B2 (en) Lightweight dispatcher for program control flow flattening
WO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
CN105095698A (zh) 基于最近执行的程序代码的程序代码模糊处理
WO2019149630A1 (en) Method for protecting an executable code
CN115543772A (zh) 确定测试用例的方法及装置
KR20090083762A (ko) 응용 프로그램 다형화 방법 및 그 장치
Meduna et al. Chapter 7 On Erasing Rules and Their Elimination

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