CN106775913B - 一种目标代码控制流图生成方法 - Google Patents
一种目标代码控制流图生成方法 Download PDFInfo
- Publication number
- CN106775913B CN106775913B CN201611168496.9A CN201611168496A CN106775913B CN 106775913 B CN106775913 B CN 106775913B CN 201611168496 A CN201611168496 A CN 201611168496A CN 106775913 B CN106775913 B CN 106775913B
- Authority
- CN
- China
- Prior art keywords
- dis
- assembling
- controlling stream
- stream graph
- destination address
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于符号执行的目标代码控制流图生成方法,该方法包括预处理步骤、反汇编与控制流图生成步骤、目标地址分析步骤。其中,预处理步骤实现目标代码文件的格式识别与程序入口地址的定位,反汇编与控制流图生成步骤实现机器指令的翻译与控制流图的生成,目标地址分析步骤实现间接跳转指令处目的地址的可能值分析计算,其包括符号执行、SMT求解器求解、自动测试用例生成、二进制仿真执行步骤。该方法对间接地址跳转地址进行了分析,其生成的控制流图,相比于一般方法生成的控制流图,具有更加精确、相对完整的特点。
Description
技术领域
本发明涉及一种计算机技术领域,尤其是涉及基于符号执行的目标代码控制流图生成方法。
背景技术
面对众多的无法获取源码的目标程序,研究人员不得不需要通过逆向工程的手段对程序的目标代码进行分析。在分析过程中,一个精确而完善的控制流图能够帮助研究人员对程序结构进行直观的认识,以辅助其进一步的深入分析与理解。
通常,人们通过反汇编的手段,对目标代码进行反汇编,根据程序中的跳转与子过程调用,生成相应的控制流节点,构造出相应的控制流图。
而在控制流图构造的过程中,通常会遭遇到间接地址跳转的问题。间接跳转地址是指目标地址存放在内存或寄存器中的跳转地址,这类值通常无法通过静态分析得到。
而在一些控制流图生成工具的实现中,采用了抽象解释的方法,使用近似值的方法对控制流进行扩充。这种方法相对不够精确,同时引入了不该存在的控制流路径。
发明内容
本发明的目的是通过以下技术方案实现的。具体的,本发明公开一种目标代码控制流图生成方法,包括如下步骤:
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中获取的变量可行值作为输入参数,仿真执行相应的指令序列,以跟踪指令序列运行过程中的寄存器中值的变化,最终确定间接跳转指令的目的地址,以之作为下一条待反汇编指令的地址,使用反汇编与控制流图生成方法重新处理指令。
优选的,如上所述的目标代码控制流图生成方法中,所述D2中的反汇编采用递归下降的反汇编方法。
图6示出了根据本发明实施例的目标代码控制流图生成方法的详细流程图,包括:
B1.输入需要生成控制流图的目标代码文件路径,系统读取目标代码文件;
B2.预处理器(相当于系统中的预处理模块)对目标代码文件进行预处理,定位程序的入口地址;
B3.反汇编与控制流图生成模块读取指令,判断指令是否存在,若存在,则读取成功,则跳转至步骤B4,读取失败,则跳转至步骤B9;
B4.对指令进行反汇编;
B5.判断指令是否是间接指令跳转,若指令不是间接跳转指令,则按照一般的控制流图生成算法进行节点与连接边的生成,即,生成一个控制流图节点,构造一条边连接上一节点到本节点,回到B3;若指令是间接跳转指令,则跳转至步骤B6;
B6.分析到达间接跳转指令的路径,使用符号执行分析得到抵达该间接跳转指令的路径条件;
B7.使用SMT求解器对B6所得路径条件公式进行求解,获得输入参数,即一个测试用例;
B8.使用二进制仿真器,仿真抵达间接跳转指令的指令序列,获取到达间接跳转指令时存储间接跳转指令寄存器中的值,即跳转的目标地址,以之作为下一条反汇编指令的地址,回到B3;
B9.输出控制流图;
B10.结束。
通过本发明的方法,得到了一个精确而完善的控制流图,能够帮助研究人员对程序结构进行直观的认识。具体地,通过对间接地址寄存器的值进行分析,计算出相应的目的地址。这种通过模拟执行计算的目的地址,是真实运行环境下可能存在的值,使得得到的控制流图更加精确。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一根或多根,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一根或多根设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (2)
1.一种目标代码控制流图生成方法,包括如下步骤:
A1.预处理步骤:用于对目标代码文件进行封装格式的识别,定位程序指令的入口地址;
A2.反汇编与控制流图生成步骤:用于机器指令的反汇编与控制流图生成;
A3.目标地址分析步骤:用于间接跳转指令处目的地址的可能值分析计算,其特征在于,其中,
所述预处理步骤包括:
C1.文件类型识别步骤:通过对特定封装格式文件头部数据结构的匹配,进行文件类型的识别;
C2.目标平台确定步骤:读取并解析目标代码文件的头部数据,确定目标代码的目标平台;
C3.入口偏移地址定位步骤:读取并解析目标代码文件的头部数据,定位目标文件指令序列的入口偏移地址;
所述反汇编与控制流图生成步骤包括:
D1.反汇编引擎选择步骤:根据所述预处理步骤所识别的目标平台信息,自动选择相应的反汇编引擎;
D2.反汇编步骤:对于顺序指令序列,进行线性扫描式的反汇编处理;对于目的地址明确的跳转,直接跳转至目标地址进行反汇编,对于目标地址为寄存器的间接地址跳转,调用目标地址分析方法进行目标地址分析,得到目标地址后跳转至相应位置进行反汇编,并构建相应的控制流图节点
所述目标地址分析步骤包括:
E1.路径条件符号计算步骤:对程序进行符号执行,分析推导抵达间接跳转指令处所需满足的条件,输出一个条件公式;
E2.SMT求解步骤:对所述路径条件符号计算步骤输出的条件公式进行求解,计算公式中变量的可行取值;
E3.二进制仿真步骤:以所述SMT求解步骤中获取的变量可行值作为输入参数,仿真执行相应的指令序列,以跟踪指令序列运行过程中的寄存器中值的变化,最终确定间接跳转指令的目的地址,以之作为下一条待反汇编指令的地址,反汇编与控制流图生成方法重新处理指令。
2.如权利要求1所述的目标代码控制流图生成方法,其特征在于,所述反汇编步骤中的反汇编采用递归下降的反汇编方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611168496.9A CN106775913B (zh) | 2016-12-16 | 2016-12-16 | 一种目标代码控制流图生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611168496.9A CN106775913B (zh) | 2016-12-16 | 2016-12-16 | 一种目标代码控制流图生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106775913A CN106775913A (zh) | 2017-05-31 |
CN106775913B true CN106775913B (zh) | 2019-07-09 |
Family
ID=58893205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611168496.9A Active CN106775913B (zh) | 2016-12-16 | 2016-12-16 | 一种目标代码控制流图生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106775913B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315961B (zh) * | 2017-07-11 | 2020-06-23 | 北京奇虎科技有限公司 | 程序漏洞检测方法及装置、计算设备、存储介质 |
CN110516438B (zh) * | 2018-05-21 | 2023-11-07 | 深信服科技股份有限公司 | 一种可执行文件反汇编的方法、系统及相关组件 |
CN110457046B (zh) * | 2019-08-22 | 2023-05-12 | 广州小鹏汽车科技有限公司 | 混合指令集程序的反汇编方法、装置、存储介质及终端 |
CN111858358B (zh) * | 2020-07-23 | 2023-07-25 | 中国人民解放军国防科技大学 | 一种面向二进制代码的导向型模糊测试方法 |
CN112506564B (zh) * | 2021-02-04 | 2021-04-27 | 中国人民解放军国防科技大学 | 一种用于建立控制流图的方法、系统和介质 |
CN115129320B (zh) * | 2022-06-17 | 2024-05-24 | 南京邮电大学 | 一种基于循环不变式的间接跳转目标地址识别方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6463582B1 (en) * | 1998-10-21 | 2002-10-08 | Fujitsu Limited | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
CN103019934A (zh) * | 2012-11-28 | 2013-04-03 | 北京交控科技有限公司 | 基于数据代码分离技术的测试用例生成方法 |
CN106126225A (zh) * | 2016-06-22 | 2016-11-16 | 华东师范大学 | 一种基于程序演进模型的目标代码逆向工程方法 |
-
2016
- 2016-12-16 CN CN201611168496.9A patent/CN106775913B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6463582B1 (en) * | 1998-10-21 | 2002-10-08 | Fujitsu Limited | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
CN103019934A (zh) * | 2012-11-28 | 2013-04-03 | 北京交控科技有限公司 | 基于数据代码分离技术的测试用例生成方法 |
CN106126225A (zh) * | 2016-06-22 | 2016-11-16 | 华东师范大学 | 一种基于程序演进模型的目标代码逆向工程方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106775913A (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106775913B (zh) | 一种目标代码控制流图生成方法 | |
CN106648818B (zh) | 一种目标代码控制流图生成系统 | |
CN108710575A (zh) | 基于路径覆盖测试用例自动生成的单元测试方法 | |
CN101802792B (zh) | 用于测试航空器上的系统的操作软件的有效性的自动脚本生成方法及用于实现该方法的设备 | |
Song et al. | The darpa cyber grand challenge: A competitor's perspective | |
US9223570B2 (en) | Migration assistance using compiler metadata | |
US10915438B2 (en) | Software-testing device, software-testing system, software-testing method, and program | |
EP2561441A1 (en) | Improved embedded system performance | |
US20180357201A1 (en) | Ability-providing-data generation apparatus | |
CN104965788A (zh) | 一种代码静态检测方法 | |
CN110287702A (zh) | 一种二进制漏洞克隆检测方法及装置 | |
CN109614103A (zh) | 一种基于字符的代码补全方法及系统 | |
CN109582352A (zh) | 一种基于双ast序列的代码补全方法及系统 | |
CN105095497B (zh) | 基于网页模板生成网页的方法及装置 | |
CN104407968B (zh) | 一种通过静态分析测算代码指令最长运行时间的方法 | |
CN104536870B (zh) | 一种进程监控方法和装置 | |
CN106055343B (zh) | 一种基于程序演进模型的目标代码逆向工程系统 | |
KR101788279B1 (ko) | 테스트 기법을 이용한 최악 실행 시간 측정 시스템 및 방법 | |
CN105739481B (zh) | 工控软件的测试方法、装置及系统 | |
JP2008176453A (ja) | シミュレーション装置 | |
US20160335101A1 (en) | Method for configuring an interface unit of a computer system | |
US20020087917A1 (en) | Method and system for testing a processor | |
Gaglio et al. | WSN design and verification using on-board executable specifications | |
CN109783837A (zh) | 仿真设备、仿真系统、仿真方法和仿真程序 | |
CN106126225B (zh) | 一种基于程序演进模型的目标代码逆向工程方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210806 Address after: Room 801, no.6, Lane 600, Yunling West Road, Putuo District, Shanghai 200062 Patentee after: SHANGHAI FORMAL TECH INFORMATION TECHNOLOGY Co.,Ltd. Address before: 200062 Putuo District, Shanghai No. 3663, Zhongshan North Road, Putuo District, Shanghai Patentee before: EAST CHINA NORMAL University |