CN106648818B - 一种目标代码控制流图生成系统 - Google Patents
一种目标代码控制流图生成系统 Download PDFInfo
- Publication number
- CN106648818B CN106648818B CN201611169736.7A CN201611169736A CN106648818B CN 106648818 B CN106648818 B CN 106648818B CN 201611169736 A CN201611169736 A CN 201611169736A CN 106648818 B CN106648818 B CN 106648818B
- Authority
- CN
- China
- Prior art keywords
- module
- dis
- assembling
- controlling stream
- stream graph
- 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/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
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)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于符号执行的目标代码控制流图生成系统,该系统包括预处理模块、反汇编与控制流图生成模块、目标地址分析模块。其中,预处理模块用于目标代码文件的格式识别与程序入口地址的定位,反汇编与控制流图生成模块用于机器指令的翻译与控制流图的生成,目标地址分析模块用于间接跳转指令处目的地址的可能值分析计算,其采用符号执行、SMT求解器求解、自动测试用例生成、二进制仿真执行的模块。本发明的系统对间接地址跳转地址进行了分析,其生成的控制流图,相比于一般模块生成的控制流图,具有更加精确、相对完整的特点。
Description
技术领域
本发明涉及一种计算机技术领域,尤其是涉及基于符号执行的目标代码控制流图生成系统。
背景技术
面对众多的无法获取源码的目标程序,研究人员不得不需要通过逆向工程的手段对程序的目标代码进行分析。在分析过程中,一个精确而完善的控制流图能够帮助研究人员对程序结构进行直观的认识,以辅助其进一步的深入分析与理解。
通常,人们通过反汇编的手段,对目标代码进行反汇编,根据程序中的跳转与子过程调用,生成相应的控制流节点,构造出相应的控制流图。
而在控制流图构造的过程中,通常会遭遇到间接地址跳转的问题。间接跳转地址是指目标地址存放在内存或寄存器中的跳转地址,这类值通常无法通过静态分析得到。
而在一些控制流图生成工具的实现中,采用了抽象解释的模块,使用近似值的模块对控制流进行扩充。这种模块相对不够精确,同时引入了不该存在的控制流路径。
发明内容
本发明的目的是通过以下技术方案实现的。
具体的,本发明公开一种目标代码控制流图生成系统,其特征在于,包括:
预处理模块:用于对目标代码文件进行封装格式的识别,定位程序指令的入口地址;
反汇编与控制流图生成模块:用于机器指令的反汇编与控制流图生成;
目标地址分析模块:用于间接跳转指令处目的地址的可能值分析计算。
优选地,所述预处理模块包括:
文件类型识别模块:通过对特定封装格式文件头部数据结构的匹配,进行文件类型的识别;
目标平台确定模块:读取并解析目标代码文件的头部数据,确定目标代码的目标平台;
入口偏移地址定位模块:读取并解析目标代码文件的头部数据,定位目标文件指令序列的入口偏移地址。
优选地,所述反汇编与控制流图生成模块包括:
反汇编引擎选择模块:根据预处理模块所识别的目标平台信息,自动选择相应的反汇编引擎;
反汇编模块:对于顺序指令序列,进行线性扫描式的反汇编处理;对于目的地址明确的跳转,直接跳转至目标地址进行反汇编,对于目标地址为寄存器的间接地址跳转,调用目标地址分析模块进行目标地址分析,得到目标地址后跳转至相应位置进行反汇编,并构建相应的控制流图节点。
优选地,所述目标地址分析模块包括:
路径条件符号计算模块:对程序进行符号执行,分析推导抵达间接跳转指令处所需满足的条件,输出一个条件公式;
SMT求解器模块:对所述路径条件符号计算模块输出的条件公式进行求解,计算公式中变量的可行取值;
二进制仿真模块:以SMT求解器模块中获取的变量可行值作为输入参数,仿真执行相应的指令序列,以跟踪指令序列运行过程中的寄存器中值的变化,最终确定间接跳转指令的目的地址,以之作为下一条待反汇编指令的地址,使用反汇编与控制流图生成模块重新处理指令。
优选地,所述反汇编模块中的反汇编采用递归下降的反汇编方法。
与现有技术相比,本发明公开的一种目标代码控制流图生成系统,具有如下有益效果:该模块通过符号执行,SMT求解器求解,模拟执行的方式,对间接地址寄存器的值进行分析,以计算出相应的目的地址,使得控制流图更加完善。通过模拟执行计算的目的地址,是真实运行环境下可能存在的值,使得生产的控制流图相对抽象解释模块获得的控制流图而言更加精确。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
附图1示出了本发明的目标代码控制流图生成系统示例图;
附图2示出了本发明的目标代码控制流图生成方法流程图;
附图3示出了本发明的目标代码控制流图生成系统中的预处理模块框架图;
附图4示出了本发明的目标代码控制流图生成系统中的反汇编与控制流图生成模块框架图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
如图1所示,本发明公开一种目标代码控制流图生成系统,包括:
预处理模块:负责对目标代码文件进行封装格式的识别,定位程序指令的入口地址;反汇编与控制流图生成模块:负责机器指令的反汇编与控制流图生成;目标地址分析模块:负责间接跳转指令处目的地址的可能值分析计算。
所述的目标代码控制流图生成系统执行的目标代码控制流图生成方法流程图如图2所示,该方法包括:
B1.输入需要生成控制流图的目标代码文件路径,系统读取目标代码文件;
B2.预处理器(相当于系统中的预处理模块)对目标代码文件进行预处理,定位程序的入口地址;
B3.反汇编与控制流图生成模块读取指令,判断指令是否存在,若存在,则读取成功,则跳转至步骤B4,读取失败,则跳转至步骤B9;
B4.对指令进行反汇编;
B5.判断指令是否是间接指令跳转,若指令不是间接跳转指令,则按照一般的控制流图生成算法进行节点与连接边的生成,即,生成一个控制流图节点,构造一条边连接上一节点到本节点,回到B3;若指令是间接跳转指令,则跳转至步骤B6;
B6.分析到达间接跳转指令的路径,使用符号执行分析得到抵达该间接跳转指令的路径条件;
B7.使用SMT求解器对B6所得路径条件公式进行求解,获得输入参数,即一个测试用例;
B8.使用二进制仿真器,仿真抵达间接跳转指令的指令序列,获取到达间接跳转指令时存储间接跳转指令寄存器中的值,即跳转的目标地址,以之作为下一条反汇编指令的地址,回到B3;
B9.输出控制流图;
B10.结束;
如图3所示,如上所述的目标代码控制流图生成系统中,所述预处理模块包括:文件类型识别模块:通过特定封装格式文件头部数据结构的匹配,进行文件类型的识别;目标平台确定模块:解析读取目标代码文件的头部数据,确定目标代码的目标平台;入口偏移地址定位模块:解析读取目标代码文件的头部数据,定位目标文件指令序列的入口偏移地址。
如图4所示,如上所述的目标代码控制流图生成系统中,所述反汇编与控制流图生成模块包括:反汇编引擎选择模块:根据预处理模块所识别的目标平台信息,自动选择相应的反汇编引擎;反汇编模块:对于目的地址明确的跳转,直接跳转至目标地址进行反汇编,对于目标地址为寄存器的间接地址跳转,调用目标地址分析模块进行目标地址分析,得到目标地址后调到相应位置进行反汇编,并构建相应的控制流图节点。
如图1所示,如上所述的目标代码控制流图生成系统中,所述目标地址分析模块包括:路径条件符号计算模块(相当于符号执行模块):对程序进行符号执行,分析推导抵达间接跳转指令处所需满足的条件,输出一个条件公式;SMT求解器模块:对所述反汇编引擎选择模块输出的条件公式进行求解,计算公式中变量的可行取值,获得输入参数;二进制仿真模块:利用所述反汇编模块中获得的可能值,仿真执行相应的指令序列,以跟踪指令序列运行过程中的寄存器中值的变化,最终确定间接跳转指令的目的地址,以之作为下一条反汇编指令的地址,反汇编与控制流图生成模块重新读取指令。
优选的,如上所述的目标代码控制流图生成系统中,所述反汇编模块中的反汇编采用递归下降的反汇编方法。
通过本发明的系统,得到了一个精确而完善的控制流图,能够帮助研究人员对程序结构进行直观的认识。具体地,通过对间接地址寄存器的值进行分析,计算出相应的目的地址。这种通过模拟执行计算的目的地址,是真实运行环境下可能存在的值,使得得到的控制流图更加精确。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的模块、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一根或多根,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的模块解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一根或多根设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何模块或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的模块的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (2)
1.一种目标代码控制流图生成系统,包括:
预处理模块:用于对目标代码文件进行封装格式的识别,定位程序指令的入口地址;
反汇编与控制流图生成模块:用于机器指令的反汇编与控制流图生成;
目标地址分析模块:用于间接跳转指令处目的地址的可能值分析计算,其特征在于,
所述预处理模块包括:
文件类型识别模块:通过对特定封装格式文件头部数据结构的匹配,进行文件类型的识别;
目标平台确定模块:读取并解析目标代码文件的头部数据,确定目标代码的目标平台;
入口偏移地址定位模块:读取并解析目标代码文件的头部数据,定位目标文件指令序列的入口偏移地址;
所述反汇编与控制流图生成模块包括:
反汇编引擎选择模块:根据预处理模块所识别的目标平台信息,自动选择相应的反汇编引擎;
反汇编模块:对于顺序指令序列,进行线性扫描式的反汇编处理;对于目的地址明确的跳转,直接跳转至目标地址进行反汇编,对于目标地址为寄存器的间接地址跳转,调用目标地址分析模块进行目标地址分析,得到目标地址后跳转至相应位置进行反汇编,并构建相应的控制流图节点,
所述目标地址分析模块包括:
路径条件符号计算模块:对程序进行符号执行,分析推导抵达间接跳转指令处所需满足的条件,输出一个条件公式;
SMT求解器模块:对所述路径条件符号计算模块输出的条件公式进行求解,计算公式中变量的可行取值;
二进制仿真模块:以SMT求解器模块中获取的变量可行值作为输入参数,仿真执行相应的指令序列,以跟踪指令序列运行过程中的寄存器中值的变化,最终确定间接跳转指令的目的地址,以之作为下一条待反汇编指令的地址,使用反汇编与控制流图生成模块重新处理指令。
2.如权利要求1所述的目标代码控制流图生成系统,其特征在于,所述反汇编模块中的反汇编采用递归下降的反汇编方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611169736.7A CN106648818B (zh) | 2016-12-16 | 2016-12-16 | 一种目标代码控制流图生成系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611169736.7A CN106648818B (zh) | 2016-12-16 | 2016-12-16 | 一种目标代码控制流图生成系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106648818A CN106648818A (zh) | 2017-05-10 |
CN106648818B true CN106648818B (zh) | 2019-06-14 |
Family
ID=58822361
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611169736.7A Active CN106648818B (zh) | 2016-12-16 | 2016-12-16 | 一种目标代码控制流图生成系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106648818B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073812A (zh) * | 2017-08-08 | 2018-05-25 | 哈尔滨安天科技股份有限公司 | 一种基于反汇编的pe程序入口点归一化方法及系统 |
CN108108622B (zh) * | 2017-12-13 | 2021-03-16 | 上海交通大学 | 基于深度卷积网络和控制流图的漏洞检测系统 |
CN110516438B (zh) * | 2018-05-21 | 2023-11-07 | 深信服科技股份有限公司 | 一种可执行文件反汇编的方法、系统及相关组件 |
CN113805938A (zh) * | 2020-06-16 | 2021-12-17 | 中科寒武纪科技股份有限公司 | 基于控制流图推导地址的方法、装置及可读存储介质 |
CN115129320B (zh) * | 2022-06-17 | 2024-05-24 | 南京邮电大学 | 一种基于循环不变式的间接跳转目标地址识别方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055343A (zh) * | 2016-06-22 | 2016-10-26 | 华东师范大学 | 一种基于程序演进模型的目标代码逆向工程系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090064118A1 (en) * | 2007-08-29 | 2009-03-05 | Jason Neal Raber | Software deobfuscation system and method |
-
2016
- 2016-12-16 CN CN201611169736.7A patent/CN106648818B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106055343A (zh) * | 2016-06-22 | 2016-10-26 | 华东师范大学 | 一种基于程序演进模型的目标代码逆向工程系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106648818A (zh) | 2017-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106648818B (zh) | 一种目标代码控制流图生成系统 | |
CN106775913B (zh) | 一种目标代码控制流图生成方法 | |
CN101802792B (zh) | 用于测试航空器上的系统的操作软件的有效性的自动脚本生成方法及用于实现该方法的设备 | |
US10915438B2 (en) | Software-testing device, software-testing system, software-testing method, and program | |
CN108710575A (zh) | 基于路径覆盖测试用例自动生成的单元测试方法 | |
US9223570B2 (en) | Migration assistance using compiler metadata | |
CN109634869B (zh) | 二进制翻译中间表示正确性测试方法及装置 | |
EP3432229A1 (en) | Ability imparting data generation device | |
CN104407968B (zh) | 一种通过静态分析测算代码指令最长运行时间的方法 | |
CN113901745A (zh) | 芯片测试方法、装置、电子设备及计算机可读存储介质 | |
JP2016012274A (ja) | テストケース生成システム及びテストケースを記録した記録媒体 | |
CN104536870B (zh) | 一种进程监控方法和装置 | |
JP2008176453A (ja) | シミュレーション装置 | |
KR20170020251A (ko) | 테스트 기법을 이용한 최악 실행 시간 측정 시스템 및 방법 | |
CN114036072B (zh) | 一种支持自动化检测程序缺陷的方法和系统 | |
Heitman et al. | BARF: a multiplatform open source binary analysis and reverse engineering framework | |
CN106126225B (zh) | 一种基于程序演进模型的目标代码逆向工程方法 | |
Murawski et al. | A contextual equivalence checker for IMJ | |
CN115629762A (zh) | 一种json数据处理方法、装置、电子设备及存储介质 | |
CN108369499B (zh) | 一种代码虚拟化系统和方法 | |
CN114281709A (zh) | 一种单元测试方法、系统、电子设备及存储介质 | |
CN110647457A (zh) | 数据挖掘方法、数据处理方法和系统 | |
EP1965300A1 (en) | A method for validating a graphical workflow translation | |
JP2002014847A (ja) | プログラム検査装置、プログラム検査方法及び検査を行うためのプログラムを格納した記録媒体 | |
EP4404066A1 (en) | Automated test generation |
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: 20210805 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 No. 3663, Putuo District, Shanghai, Zhongshan North Road Patentee before: EAST CHINA NORMAL University |