代码混淆的控制流平展化的制作方法

文档序号:9397086阅读:267来源:国知局
代码混淆的控制流平展化的制作方法
【技术领域】
[0001] 本文公开的各个示例实施例总体涉及在下一块计算需要运行时间信息的情况下 用于代码混淆的控制流平展化(control flow flattening)。
【背景技术】
[0002] 如今软件应用被广泛用于向用户提供多种服务。这些软件应用可以被安装在多种 不同设备上,诸如,移动电话、个人计算机、膝上型计算机、平板电脑、机顶盒等。软件应用在 消费者使用的系统中或工业系统中。软件应用还可以在智能卡和信用卡中。此外,可以跨 越诸如互联网之类的网络实现软件应用,其中软件应用运行在服务器上,使用各种用户设 备来访问所述软件应用。许多这些软件应用需要使用安全协议来保护内容、信息、交易和隐 私。许多软件应用运行在攻击者对软件应用的操作完全控制的环境下,攻击者可以尝试对 软件应用的代码进行反向工程,以便获得对安全信息的访问或者甚至理解软件的操作以便 重现或修改软件应用的功能。攻击者可以使用多种反向工程工具,诸如,代码分析仪和调试 器,以便获得与软件应用相关的信息。因此,开发了多种技术以便使攻击者难以对软件进行 反向工程。一种使代码的反向工程困难的方式是代码混淆。代码混淆想要创建难以让人理 解的混淆代码。可以将代码混淆用于隐藏软件应用的目的或逻辑,以便防止对软件应用进 行篡改或反向工程。

【发明内容】

[0003] 下文呈现出对多种示例实施例的简要概述。在以下概述中进行一些简化和省略, 这是为了突出并介绍多种示例实施例的一些方面,而不是限制本发明的范围。后面部分展 示了对示例实施例的具体描述,足以允许本领域技术人员理解和使用本发明构思。
[0004] 多种示例实施例涉及一种混淆包括多个基本块的软件代码的方法,其中所述基本 块具有相关的标识符(ID),所述方法包括:由处理器确定针对第一基本块的第一前任基本 块,其中第一前任基本块跳至第一基本块,第一基本炔基于下一基本块ID跳至下一基本 块;由处理器基于第一前任基本块的ID而产生掩码值(mask value),其中掩码值标识了第 一前任基本块的ID的公共比特(common bit);以及由处理器在第一基本块中插入指令以 便基于掩码值和第一前任基本块之一的ID,确定下一基本块ID。
[0005] 描述了多种实施例,其中所述确定下一基本块ID还是基于条件的。
[0006] 描述了多种实施例,还包括产生由基本块ID索引的基本块地址表。
[0007] 描述了多种实施例,其中通过以下操作来计算掩码值:通过对第一前任基本块的 ID逐比特求"与"来计算第一结果,通过对第一前任基本块的反逐比特求"与"来计算第二 结果,以及对第一结果和第二结果逐比特求"或"。
[0008] 描述了多种实施例,其中第一前任基本块是多个虚拟基本块,其中所述多个虚拟 基本块具有第二多个前任基本块,其中所述多个虚拟基本块将来自第二多个前任基本块的 控制流合并到基本块。
[0009] 描述了多种实施例,还包括:接收高级语言的软件代码;并将接收到的软件代码 编译为具有基本块的软件代码。
[0010] 描述了多种实施例,其中编译接收到的软件代码包括:确定针对第一基本块的第 一前任基本块;产生掩码值;以及在第一基本块中插入指令。
[0011] 描述了多种实施例,其中通过以下计算来确定下一基本块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。
[0012] 描述了多种实施例,其中当由于落空(fall through)下一基本块而结束第一基本 块时,将跳变指令(jump instruction)插入下一基本块。
[0013] 描述了多种实施例,还包括移动(shuffle)多个基本块。
[0014] 此外,多种示例实施例涉及一种非暂时性机器可读存储介质,利用由处理器执行 的软件代码的基本块的指令对非暂时性所述机器可读存储介质编码,所述非暂时性机器可 读存储介质包括:用于基于掩码、前任基本块的标识符(ID)和基于条件的ID来确定下一基 本块的ID的指令;以及用于跳至下一基本块的指令,其中所述掩码标识了第一多个前任基 本块中的公共比特。
[0015] 描述了多种实施例,还包括:用于将标识前任基本块的变量设置为基本块的ID的 指令;以及用于将标识基本块的变量设置为所确定的下一基本块的ID的指令。
[0016] 描述了多种实施例,其中通过以下操作来计算掩码:通过对第一前任基本块的ID 逐比特求"与"来计算第一结果,通过对第一前任基本块的ID的反逐比特求"与"来计算第 二结果,以及将第一结果和第二结果逐比特求"或"。
[0017] 描述了多种实施例,其中第一前任基本块是多个虚拟基本块,所述多个虚拟基本 块具有第二多个前任基本块,其中所述多个虚拟基本块将来自第二多个前任基本块的控制 流合并到基本块。
[0018] 描述了多种实施例,其中所述用于跳至下一基本块的指令包括:基于所确定的下 一基本块的ID访问由基本块ID索引的基本块地址表。
[0019] 描述了多种实施例,其中使用以下计算来计算用于确定下一基本块的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。
[0020] 此外,多种示例实施例涉及一种执行由处理器执行的软件代码的基本块的指令的 方法,包括:由处理器来基于掩码、前任基本块的ID和基于条件的ID确定下一基本块的标 识符(ID);以及由处理器来跳至下一基本块,其中所述掩码标识了第一多个前任基本块中 的公共比特。
[0021] 描述了多种实施例,还包括:由处理器将标识前任基本块的变量设置为基本块的 ID ;以及由处理器将标识基本块的变量设置为所确定的下一基本块的ID。
[0022] 描述了多种实施例,其中通过以下操作来计算掩码:通过对第一前任基本块的ID 逐比特求"与"来计算第一结果,通过对第一前任基本块的ID的反逐比特求"与"来计算第 二结果,以及将第一结果和第二结果逐比特求"或"。
[0023] 描述了多种实施例,其中第一前任基本块是多个虚拟基本块,其中所述多个虚拟 基本块具有第二多个前任基本块,其中所述多个虚拟基本块将来自第二多个的前任基本块 的控制流合并到基本块。
[0024] 描述了多种实施例,其中跳至下一基本块包括:基于所确定的下一基本块的ID来 访问由基本块ID索引的基本块地址表。
[0025] 描述了多种实施例,其中使用以下计算来确定下一基本块的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。
【附图说明】
[0026] 为了更好地理解多种示例实施例,参考附图,附图中:
[0027] 图1示出了混淆软件代码的方法。
[0028] 为了便于理解,将相同的附图标记用于表示基本具有相同或相似结构和/或基本 具有相同或相似功能的元件。
【具体实施方式】
[0029] 以下描述和附图示出了本发明的原理。因此,尽管文中并未明确描述或示出,然而 应认识到本领域技术人员可以想出体现本发明原理并且包括在本发明的范围内的多种布 置。此外,本文记载的所有示例主要显式地用于教学目的,以帮助读者理解本发明的原理和 发明人所提供的构思以改进现有技术,应将本发明理解为不限于这种具体记载的示例和条
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1