一种目标代码控制流图生成方法技术

技术编号:15541077 阅读:291 留言:0更新日期:2017-06-05 10:39
本发明专利技术公开了一种基于符号执行的目标代码控制流图生成方法,该方法包括预处理步骤、反汇编与控制流图生成步骤、目标地址分析步骤。其中,预处理步骤实现目标代码文件的格式识别与程序入口地址的定位,反汇编与控制流图生成步骤实现机器指令的翻译与控制流图的生成,目标地址分析步骤实现间接跳转指令处目的地址的可能值分析计算,其包括符号执行、SMT求解器求解、自动测试用例生成、二进制仿真执行步骤。该方法对间接地址跳转地址进行了分析,其生成的控制流图,相比于一般方法生成的控制流图,具有更加精确、相对完整的特点。

An object code control flow graph generation method

The invention discloses a target code control flow graph generation method based on symbolic execution, which comprises a preprocessing step, a disassembly and control flow chart generation step, and a target address analysis step. The realization of positioning format recognition and program entrance address object code file of the preprocessing step, generating anti compilation and translation and control machine instruction control flow graph generation process flow chart, analysis steps to achieve the target address at the destination address of the indirect jump instruction to value analysis, including symbolic execution and SMT solution solver, the automatic generation of test cases, binary simulation step. In this method, the address of indirect address is analyzed, and the control flow graph generated by this method is more accurate and relatively complete than the control flow graph generated by general method.

【技术实现步骤摘要】
一种目标代码控制流图生成方法
本专利技术涉及一种计算机
,尤其是涉及基于符号执行的目标代码控制流图生成方法。
技术介绍
面对众多的无法获取源码的目标程序,研究人员不得不需要通过逆向工程的手段对程序的目标代码进行分析。在分析过程中,一个精确而完善的控制流图能够帮助研究人员对程序结构进行直观的认识,以辅助其进一步的深入分析与理解。通常,人们通过反汇编的手段,对目标代码进行反汇编,根据程序中的跳转与子过程调用,生成相应的控制流节点,构造出相应的控制流图。而在控制流图构造的过程中,通常会遭遇到间接地址跳转的问题。间接跳转地址是指目标地址存放在内存或寄存器中的跳转地址,这类值通常无法通过静态分析得到。而在一些控制流图生成工具的实现中,采用了抽象解释的方法,使用近似值的方法对控制流进行扩充。这种方法相对不够精确,同时引入了不该存在的控制流路径。
技术实现思路
本专利技术的目的是通过以下技术方案实现的。具体的,本专利技术公开一种目标代码控制流图生成方法,包括如下步骤:A1.预处理步骤:用于对目标代码文件进行封装格式的识别,定位程序指令的入口地址;A2.反汇编与控制流图生成步骤:用于机器指令的反汇编与控制流图生成;A3.目标地址分析步骤:用于间接跳转指令处目的地址的可能值分析计算。优选地,所述预处理步骤包括:C1.文件类型识别步骤:通过对特定封装格式文件头部数据结构的匹配,进行文件类型的识别;C2.目标平台确定步骤:读取并解析目标代码文件的头部数据,确定目标代码的目标平台;C3.入口偏移地址定位步骤:读取并解析目标代码文件的头部数据,定位目标文件指令序列的入口偏移地址。优选地,所述反汇编与控制流图生成步骤包括:D1.反汇编引擎选择步骤:根据所述预处理步骤所识别的目标平台信息,自动选择相应的反汇编引擎;D2.反汇编步骤:对于顺序指令序列,进行线性扫描式的反汇编处理;对于目的地址明确的跳转,直接跳转至目标地址进行反汇编,对于目标地址为寄存器的间接地址跳转,调用目标地址分析方法进行目标地址分析,得到目标地址后跳转至相应位置进行反汇编,并构建相应的控制流图节点。优选地,所述目标地址分析步骤包括:E1.路径条件符号计算步骤:对程序进行符号执行,分析推导抵达间接跳转指令处所需满足的条件,输出一个条件公式;E2.SMT求解步骤:对所述路径条件符号计算步骤输出的条件公式进行求解,计算公式中变量的可行取值;E3.二进制仿真步骤:以所述SMT求解步骤中获取的变量可行值作为输入参数,仿真执行相应的指令序列,以跟踪指令序列运行过程中的寄存器中值的变化,最终确定间接跳转指令的目的地址,以之作为下一条待反汇编指令的地址,使用反汇编与控制流图生成方法重新处理指令。优选地,所述反汇编步骤中的反汇编采用递归下降的反汇编方法。与现有技术相比,本专利技术公开的一种目标代码控制流图生成方法,具有如下有益效果:该方法通过符号执行,SMT求解器求解,模拟执行的方式,对间接地址寄存器的值进行分析,以计算出相应的目的地址,使得控制流图更加完善。而通过模拟执行计算的目的地址,是真实运行环境下可能存在的值,使得生产的控制流图相对抽象解释方法获得的控制流图而言更加精确。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:附图1示出了根据本专利技术实施例的目标代码控制流图生成系统示例图;附图2示出了根据本专利技术实施例的目标代码控制流图生成方法流程框图;附图3示出了根据本专利技术实施例的目标代码控制流图生成方法中的预处理步骤的流程框图;附图4示出了根据本专利技术实施例的目标代码控制流图生成方法中的反汇编与控制流图生成步骤的流程框图;附图5示出了根据本专利技术实施例的目标代码控制流图生成方法中的目标地址分析步骤的流程框图;附图6示出了根据本专利技术实施例的目标代码控制流图生成方法的详细流程图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。如图1所示,本专利技术公开一种目标代码控制流图生成系统,包括:预处理模块:负责对目标代码文件进行封装格式的识别,定位程序指令的入口地址;反汇编与控制流图生成模块:负责机器指令的反汇编与控制流图生成;目标地址分析模块:负责间接跳转指令处目的地址的可能值分析计算。如图1所示,如上所述的目标代码控制流图生成系统中,所述目标地址分析模块包括:路径条件符号计算模块(相当于符号执行模块):对程序进行符号执行,分析推导抵达间接跳转指令处所需满足的条件,输出一个条件公式;SMT求解器模块:对所述反汇编引擎选择模块输出的条件公式进行求解,计算公式中变量的可行取值,获得输入参数;二进制仿真模块:利用所述SMT求解器模块中获得的可能值,仿真执行相应的指令序列,以跟踪指令序列运行过程中的寄存器中值的变化,最终确定间接跳转指令的目的地址,以之作为下一条待反汇编指令的地址,使用反汇编与控制流图生成模块重新处理指令。如图2所示,以上述系统实现的目标代码控制流图生成方法包括步骤:A1.预处理步骤:用于对目标代码文件进行封装格式的识别,定位程序指令的入口地址;A2.反汇编与控制流图生成步骤:用于机器指令的反汇编与控制流图生成;A3.目标地址分析步骤:用于间接跳转指令处目的地址的可能值分析计算。优选的,如上所述的目标代码控制流图生成方法中,所述预处理步骤如图3所示,包括:C1.文件类型识别步骤:通过对特定封装格式文件头部数据结构的匹配,进行文件类型的识别;C2.目标平台确定步骤:读取并解析目标代码文件的头部数据,确定目标代码的目标平台;C3.入口偏移地址定位步骤:读取并解析目标代码文件的头部数据,定位目标文件指令序列的入口偏移地址。优选的,如上所述的目标代码控制流图生成方法,所述反汇编与控制流图生成步骤如图4所示,包括:D1.反汇编引擎选择步骤:根据预处理方法所识别的目标平台信息,自动选择相应的反汇编引擎;D2.反汇编步骤:对于顺序指令序列,进行线性扫描式的反汇编处理;对于目的地址明确的跳转,直接跳转至目标地址进行反汇编,对于目标地址为寄存器的间接地址跳转,调用目标地址分析方法进行目标地址分析,得到目标地址后跳转至相应位置进行反汇编,并构建相应的控制流图节点。优选的,如上所述的目标代码控制流图生成方法,所述目标地址分析步骤如图5所示,包括:E1.路径条件符号计算步骤(相当于符号执行步骤):对程序进行符号执行,分析推导抵达间接跳转指令处所需满足的条件,输出一个条件公式;E2.SMT求解步骤:对E1输出的条件公式进行求解,计算公式中变量的可行取值,即公式的解;E3.二进制仿真步骤:以E2中获取的变量可行值作为输入参数,仿真执行相应的指令序列,以跟踪指令序列运行过程中的寄存器中值的变化,最终确定间接跳转指令的目的地址,以之作为下一条待反汇编指令的地址,使用反汇编与控制流图生成方法重新处理指令。优选的,如上所述的目标代码控本文档来自技高网...
一种目标代码控制流图生成方法

【技术保护点】
一种目标代码控制流图生成方法,包括如下步骤:A1.预处理步骤:用于对目标代码文件进行封装格式的识别,定位程序指令的入口地址;A2.反汇编与控制流图生成步骤:用于机器指令的反汇编与控制流图生成;A3.目标地址分析步骤:用于间接跳转指令处目的地址的可能值分析计算。

【技术特征摘要】
1.一种目标代码控制流图生成方法,包括如下步骤:A1.预处理步骤:用于对目标代码文件进行封装格式的识别,定位程序指令的入口地址;A2.反汇编与控制流图生成步骤:用于机器指令的反汇编与控制流图生成;A3.目标地址分析步骤:用于间接跳转指令处目的地址的可能值分析计算。2.如权利要求1所述的目标代码控制流图生成方法,其特征在于,所述预处理步骤包括:C1.文件类型识别步骤:通过对特定封装格式文件头部数据结构的匹配,进行文件类型的识别;C2.目标平台确定步骤:读取并解析目标代码文件的头部数据,确定目标代码的目标平台;C3.入口偏移地址定位步骤:读取并解析目标代码文件的头部数据,定位目标文件指令序列的入口偏移地址。3.如权利要求1或2所述的目标代码控制流图生成方法,其特征在于,所述反汇编与控制流图生成步骤包括:D1.反汇编引擎选择步骤:根据所述预处理步骤所识别的目标平台信息,自动选择相应的反汇编引擎;D2.反汇编步骤:对于顺序指令序列,进行线性扫描式的反汇编处...

【专利技术属性】
技术研发人员:何积丰熊家文史建琦黄滟鸿李昂方徽星
申请(专利权)人:华东师范大学
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1