一种基于语义的二进制代码反混淆方法
【技术领域】
[0001] 本发明属于软件安全领域,特别涉及一种基于语义的二进制代码反混淆方法。
【背景技术】
[0002] 如今随着人们对计算机程序的依赖性越来越高,为了增加程序的安全性,使用安 全软件进行程序保护已经成为重要的保护方式。但恶意软件厂商为了令自身的恶意程序 "逃脱"安全软件的查杀,会使用"混淆"的方式增加恶意软件的复杂程度,达到改变恶意程 序原有的代码特征的效果,从而增加安全软件厂商对其进行逆向分析的系统开销,实现免 于查杀的目的。针对上述情况,就需要使用"反混淆"的方式,以便于得到去除"伪装"后恶 意软件的真正特征码,进而对实现对恶意软件的查杀。
[0003] 现有的反混淆技术,如静态模式匹配技术、针对于标识符重命名的反混淆算法等 都是基于静态的或者在源码的基础上进行反混淆,对于虚拟化混淆技术的反混淆的研宄更 为稀少。
[0004] 在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005] 已有的虚拟化反混淆技术首先逆向分析虚拟解释器的结构,然后使用这些信息去 计算所有的字节码,最后恢复嵌入到解释器中的原始代码。当我们处理的解释器结构符合 我们的特定需求时,这种方法虽然有效的,但通用性较差,不能适用于大量的"反混淆"处 理。
【发明内容】
[0006] 为了解决现有技术的问题,本发明提供了一种基于语义的二进制代码反混淆方 法,所述基于语义的二进制代码反混淆方法,包括:
[0007] 构建反变形模板库,所述反变形模板库中包括基于语义的指令变形策略;
[0008] 导入目标程序,通过检测所述目标程序的二进制代码确定所述目标程序是否为可 执行文件;
[0009] 当所述目标程序为所述可执行文件时,执行所述目标程序,提取所述目标程序的 执行过程信息;
[0010] 对所述执行过程信息进行污点分析,获取带有污点标记的指令序列,根据所述带 有污点标记的指令序列构造控制流图,所述控制流图中包括至少两个数据基本块,多个所 述数据基本块构成显式路径;
[0011] 根据控制依赖关系对所述控制流图进行信息补充,得到与所述数据基本块具有控 制依赖关系的控制基本块;
[0012] 根据所述控制流图中的跳转关系,得到所述控制流图中除所述显式路径之外的隐 式路径,将所述显式路径和所述隐式路径构成所述控制流图中的多执行路径,得到完整控 制流图;
[0013] 根据所述完整控制流图,结合所述反变形模板库对所述目标程序进行指令裁剪, 得到裁剪后指令对应的简洁控制流图,根据所述目标程序的执行过程信息获取函数调用关 系图。
[0014] 可选的,所述构建反变形模板库,所述反变形模板库中包括基于语义的指令变形 策略,包括:
[0015] 获取已知的基于语义的指令变形策略,所述指令变形策略包括变形前的原始指令 和变形后的反混淆指令;
[0016] 将所述指令变形策略进行组合,得到反变形模板库。
[0017] 可选的,所述当所述目标程序为所述可执行文件时提取所述目标程序的执行过程 信息,包括:
[0018] 在确定所述目标程序为所述可执行文件时,执行所述目标程序,并对所述目标程 序的所有执行数据中进行动态分析:
[0019] 提取所述所有执行数据中的执行过程信息,所述执行过程信息包括在所述目标程 序执行过程中的所有指令信息、寄存器信息和内存数据信息,在执行所述目标程序存在函 数调用时,还需提取函数调用信息。
[0020] 可选的,所述对所述执行过程信息进行污点分析,获取带有污点标记的指令序列, 根据所述带有污点标记的指令序列构造控制流图,所述控制流图中包括至少两个数据基本 块,多个所述数据基本块构成显式路径,包括:
[0021] 确定所述目标程序的污点信息,将所述执行过程信息中含有所述污点信息的所有 指令进行污点标记,获取带有所述污点标记的指令序列;
[0022] 根据所述带有所述污点标记的指令序列的存储位置和前后跳转关系,构造控制流 图,所述控制流图中包括至少两个数据基本块,多个所述数据基本块构成显式路径。
[0023] 可选的,所述确定所述目标程序的污点信息,包括:
[0024] 将符合预设格式的内容作为污点信息;或
[0025] 当不存在所述预设格式时,将输入内容作为所述污点信息。
[0026] 可选的,所述根据控制依赖关系对所述控制流图进行信息补充,得到与所述数据 基本块具有控制依赖关系的控制基本块,包括:
[0027] 获取所述控制流图中的所有数据基本块;
[0028] 根据控制依赖关系,获取所述控制流图中与所述数据基本块具有控制依赖关系的 控制基本块,将所述控制基本块补充至所述控制流图中。
[0029] 可选的,所述根据所述控制流图中的跳转关系,得到所述控制流图中除所述显式 路径之外的隐式路径,将所述显式路径和所述隐式路径构成所述控制流图中的多执行路 径,得到完整控制流图,包括:
[0030] 根据所述控制流图中的跳转关系,确定在执行所述目标程序过程中发生跳转的所 述数据基本块;
[0031] 在发生跳转的所述数据基本块中,根据与所述数据基本块对应的跳转关系,通过 深度优先的路径选择算法对所述数据基本块进行路径搜索,得到除所述显式路径的外的隐 藏路径,所述隐藏路径构成隐式路径;
[0032] 基于所述显式路径和所述隐式路径构成多路径,在所述控制流图的基础上,获取 完整控制流图。
[0033] 可选的,所述根据所述完整控制流图,结合所述反变形模板库对所述目标程序进 行指令裁剪,得到裁剪后指令对应的简洁控制流图,根据所述目标程序的执行过程信息获 取函数调用关系图,包括:
[0034] 首先,在所述完整控制流图中的所述数据基本块和所述控制基本块之间以及所述 数据基本块或所述控制基本块内部,将所述控制流图中不带有所述污点标记的指令序列进 行丢弃;
[0035] 其次,检测到与反变形模板库中所述变形前的原始指令匹配的指令序列,则将所 述指令序列进行裁剪,将所述完整控制流图中剩余的指令序列保存为简洁控制流图,提取 所述目标程序的执行过程信息中的函数调用关系,获取函数调用关系图。
[0036] 本发明提供的技术方案带来的有益效果是:
[0037] 通过在判定目标程序为可执行文件后,执行目标程序,并获取执行过程中的所有 数据,使用动态污点分析和控制依赖分析对所有数据中的关键数据以及与关键数据相关的 指令序列进行标记,将带有标记的指令序列构建控制流图,最终删减控制流图中不带有标 记的指令序列得到简洁控制流图,根据获取的执行过程中的数据得到函数调用关系图,根 据简洁控制流图同时结合函数调用关系图对恶意软件进行反混淆处理,避免了现有技术中 对恶意软件进行反混淆处理时通用性差的缺陷,提高了反混淆处理适用对象的通用性,还 在一定程度上降低了系统开销。
【附图说明】
[0038] 为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图 作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普 通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0039] 图1是本发明提供的一种基于语义的二进制代码反混淆方法的流程示意图; [0040] 图2是本发明提供的一种基于语义的二进制代码反混淆方法中提取执行过程信 息的流程示意图;