CN106598839A - 一种面向目标代码的程序静态分析方法 - Google Patents
一种面向目标代码的程序静态分析方法 Download PDFInfo
- Publication number
- CN106598839A CN106598839A CN201610927632.1A CN201610927632A CN106598839A CN 106598839 A CN106598839 A CN 106598839A CN 201610927632 A CN201610927632 A CN 201610927632A CN 106598839 A CN106598839 A CN 106598839A
- Authority
- CN
- China
- Prior art keywords
- program
- sub
- code
- information
- analysis method
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种面向目标代码的程序静态分析方法,所述方法包括反编译步骤、中间表示精化步骤、程序分析步骤及可视化步骤。其中反编译步骤以待分析的目标代码文件作为输入,对输入文件进行拆封装格式、反编译操作,生成汇编代码、控制流图及过程边界等信息并作为该步骤的输出;中间表示精化步骤根据反编译步骤生成的信息,生成相应的数据结构并进行精化操作;程序分析步骤根据反编译步骤和中间表示精化步骤输出的信息生成待分析程序的几种中间表示形式;可视化步骤用于分析过程中各种图形和其他信息的可视化显示。该方法根据实际执行的二进制代码,对程序行为进行分析,比面向源码的分析工具具有更高的保真度。
Description
技术领域
本发明涉及一种面向目标代码的程序静态分析方法。
背景技术
目前,基于源代码的程序静态分析技术,都是建立在假定的程序运行物理环境基础之上。而通过抽象和假定的环境系统往往不能完全反映现实操作中的具体问题与情况,而这样一个基于较好假定环境的工作方式在一定情况下将致使一些关键性质与行为无法得到体现与保障。目标代码是编译器处理源代码后产生的代码,是在机器CPU上实际执行的代码,包含完整的程序运行物理环境信息,具有无可替代的与实际运行情况高度一致的特点。因此,使用面向目标代码的程序分析技术,在目标代码上进行程序分析,将可以避开诸如编译错误和高层抽象错误等一系列问题,确保最终交付软件的正确性。
本发明提出了一种面向目标代码的程序静态分析方法,根据实际执行的二进制代码,对程序行为进行分析,比面向源码的分析工具具有更高的保真度。
发明内容
本发明提出了一种面向目标代码的程序静态分析方法,包括:
反编译步骤,用于拆解待分析目标代码文件的封装格式,反汇编目标代码,生成基本的控制流图结构以及其他相关的信息;
中间表示精化步骤,对反编译得来的信息进行处理获取更多程序细节,生成相应的数据结构并进行精化操作;
程序分析步骤,根据反编译模块和中间表示精化模块输出的信息生成待分析程序的中间表示形式;
可视化步骤,用于分析过程中各种图形和其他信息的可视化显示。
优选地,所述反编译步骤包括拆装器拆装子步骤、反汇编引擎子步骤、流图构建子步骤。
优选地,所述拆装器拆装子步骤用于解除目标代码封装,其支持常用的目标代码封装格式。
优选地,所述反汇编引擎子步骤,用于将解除封装格式后的目标代码转换为汇编代码,并且生成程序细节信息。
优选地,所述流图构建子步骤,根据反汇编引擎子步骤生成的信息,构建程序基本的控制流图。
优选地,所述中间表示精化步骤包括类型发现子步骤、别名分析子步骤、关系分析子步骤;在分析过程中,所述类型发现子步骤、别名分析子步骤、关系分析子步骤被迭代调用。
优选地,所述程序分析步骤包括程序图构建子步骤、程序结构浏览子步骤。
优选地,所述程序图构建子步骤,用于生成待分析程序的中间表示形式,所述中间表示形式包括抽象语法树、控制流图、函数调用图和系统依赖图。
优选地,所述程序结构浏览子步骤,用于浏览生成的程序图形和分析得到的程序结构。
本发明的有益效果包括:
目标代码比源代码更容易获得,相比于面向源码的程序静态分析方法,本方法的适用范围更广;目标代码包含程序实际执行的全部信息,面向目标代码的程序分析技术比面向源码的程序分析技术得到的结果更精确;在目标代码上执行程序分析,可以避免诸如编译错误和高层抽象错误等一些列问题,确保最终交付程序的正确性。
附图说明
图1是本发明面向目标代码的程序静态分析方法流程图;
图2是使用本发明对ELF格式的目标代码进行静态分析的方法流程图。
具体实施方式
如图1所示,本发明公开了一种面向目标代码的程序静态分析方法,所述方法包括:反编译步骤、中间表示精化步骤、程序分析步骤及可视化步骤。其中反编译步骤以待分析的目标代码文件作为输入,对输入文件进行拆封装格式、反编译操作,生成汇编代码、控制流图及过程边界等信息并作为该步骤的输出;中间表示精化步骤根据反编译步骤生成的信息,生成相应的数据结构并进行精化操作;程序分析步骤根据反编译步骤和中间表示精化步骤输出的信息生成待分析程序的几种中间表示形式,包括抽象语法树、控制流图、函数调用图和系统依赖图;可视化步骤并不直接进行分析工作,而是用于分析过程中各种图形和其他信息的可视化显示。
本发明提出的所述面向目标代码的程序静态分析方法中,所述反编译步骤包括拆装器拆装子步骤、反汇编引擎子步骤、流图构建子步骤。所述拆装器拆装子步骤用于解除目标代码封装,支持常用的目标代码封装格式,如ELF、COFF、PE等。所述反汇编引擎子步骤,用于将解除封装格式后的目标代码转换为汇编代码,并且生成函数边界、静态已知内存地址和偏移量等程序细节信息。所述流图构建子步骤,根据反汇编引擎子步骤生成的信息,构建程序基本的控制流图。
本发明提出的所述面向目标代码的程序静态分析方法中,所述中间表示精化步骤包括类型发现子步骤、别名分析子步骤、关系分析子步骤。在分析过程中,所述类型发现子步骤、别名分析子步骤、关系分析子步骤会被迭代调用,随着迭代次数的增加,所获得的程序信息越来越多,在此基础上生成的控制流图等程序图也越来越完整。
本发明提出的所述面向目标代码的程序静态分析方法中,所述程序分析步骤包括程序图构建子步骤、程序结构浏览子步骤。所述程序图构建子步骤,用于生成待分析程序的几种中间表示形式,包括抽象语法树、控制流图、函数调用图和系统依赖图。所述程序结构浏览子步骤,用于浏览生成的程序图形和分析得到的程序结构。
具体而言,反编译步骤用于拆解待分析目标代码文件的封装格式,反汇编目标代码,生成基本的控制流图结构以及其他相关的信息(如函数边界信息、静态已知内存地址和偏移量等)。封装格式是可执行文件的内容组织方式,只有按照这种组织方式才能找到可执行程序指令的起始和中止位置,才能保证下一步反汇编操作的正确性。反汇编操作将二进制指令翻译成其对应的汇编代码,同时计算出静态已知内存地址和偏移量等相关信息。根据翻译出来的信息,流图构建子步骤对程序进行基本块划分,构建控制流图,生成调用关系。
中间表示精化步骤,在反编译步骤产生的信息基础上进行分析计算,得到诸如变量别名、类型、结构等信息,使得反编译步骤中流图构建子步骤生成的控制流图更加完整。在反编译阶段,可以从可执行文件中恢复出粗粒度的变量信息,这对于程序分析来说远远不够。中间表示精化步骤会被反复的迭代调用,直到计算出的程序信息足够精细。在得到反编译步骤传过来的信息后,中间表示精化步骤会首先进行类型发现操作,识别出程序中的聚类结构(如结构体和数组),然后进行别名分析,将变量的别名识别出来,再进行关系分析,如此循环迭代,直到达到最够的精度为止。此时,比较完整地控制流图上,每个节点都会有变量的使用(used)集、消除(killed)集、可能消除(may-killed)集等信息。
可视化步骤,用于分析过程中各种图形和其他信息的可视化显示。控制流图、调用关系图、程序依赖图等的显示,都借助于此步骤,甚至中间表示精化步骤的运行过程也可以通过此步骤展现给用户。虽然此步骤并不参与程序分析过程,但却直接与用户交互,向用户呈现分析过程与结果。
下面具体讲述本发明所述面向目标代码的程序静态分析方法。
实施例1
该实施例以本发明面向目标代码的程序静态分析方法的原型工具为例,实现对ELF格式的目标代码的静态分析。
ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的标准文件格式。ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program headertable)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且他们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。
下面详细介绍使用本发明的原型工具对ELF格式的目标代码进行静态分析。原型工具方法流程图如图2所示。
原型工具将目前已存在的工具IDA Pro(商业化逆向工程工具)和CodeSurfer集成在一起,将IDA Pro作为反汇编引擎,将CodeSurfer作为程序分析图构建器和浏览器。
首先待分析的ELF文件将作为输入文件输入到IDA Pro中,IDA Pro中的反编译引擎会根据静态已知地址和栈帧偏移量将目标代码中的一部分变量恢复出来。当然,此时恢复的变量信息比较粗糙,比如数组和结构体等聚类结构无法被识别并恢复出来。在这些信息的基础上,可以使用流图构建子步骤构建目标代码不完全的控制流图。
然后,反编译步骤的信息被传送到中间表示精化步骤中。通过反复迭代中间表示精化步骤中各种操作,数组和结构体等聚类结构变量被逐渐恢复出来,据此就能构建较为完全的控制流图等程序结构图。在此步骤结束后,可以得到控制流图中每个节点的变量的使用(used)集、消除(killed)集、可能消除(may-killed)集等信息。
最后,使用CodeSurfer将这些结构展现出来,可以浏览的程序结构图包括:抽象语法树、控制流图、函数调用图和系统依赖图。在此基础上可以进行跟进一步的分析。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (9)
1.一种面向目标代码的程序静态分析方法,包括:
反编译步骤,拆解待分析目标代码文件的封装格式,反汇编目标代码,生成基本的控制流图结构以及其他相关的信息;
中间表示精化步骤,对反编译得来的信息进行处理获取更多程序细节,生成相应的数据结构并进行精化操作;
程序分析步骤,根据反编译模块和中间表示精化模块输出的信息生成待分析程序的中间表示形式;
可视化步骤,用于分析过程中各种图形和其他信息的可视化显示。
2.如权利要求1所述的面向目标代码的程序静态分析方法,其特征在于,所述反编译步骤包括拆装器拆装子步骤、反汇编引擎子步骤、流图构建子步骤。
3.如权利要求2所述的面向目标代码的程序静态分析方法,其特征在于,所述拆装器拆装子步骤用于解除目标代码封装,其支持常用的目标代码封装格式。
4.如权利要求2所述的面向目标代码的程序静态分析方法,其特征在于,所述反汇编引擎子步骤,用于将解除封装格式后的目标代码转换为汇编代码,并且生成程序细节信息。
5.如权利要求2所述的面向目标代码的程序静态分析方法,其特征在于,所述流图构建子步骤,根据反汇编引擎子步骤生成的信息,构建程序基本的控制流图。
6.如权利要求1所述的面向目标代码的程序静态分析方法,其特征在于,所述中间表示精化步骤包括类型发现子步骤、别名分析子步骤、关系分析子步骤;在分析过程中,所述类型发现子步骤、别名分析子步骤、关系分析子步骤被迭代调用。
7.如权利要求1所述的面向目标代码的程序静态分析方法,其特征在于,所述程序分析步骤包括程序图构建子步骤、程序结构浏览子步骤。
8.如权利要求7所述的面向目标代码的程序静态分析方法,其特征在于,所述程序图构建子步骤,用于生成待分析程序的中间表示形式,所述中间表示形式包括抽象语法树、控制流图、函数调用图和系统依赖图。
9.如权利要求7所述的面向目标代码的程序静态分析方法,其特征在于,所述程序结构浏览子步骤,用于浏览生成的程序图形和分析得到的程序结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610927632.1A CN106598839A (zh) | 2016-10-31 | 2016-10-31 | 一种面向目标代码的程序静态分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610927632.1A CN106598839A (zh) | 2016-10-31 | 2016-10-31 | 一种面向目标代码的程序静态分析方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106598839A true CN106598839A (zh) | 2017-04-26 |
Family
ID=58555693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610927632.1A Pending CN106598839A (zh) | 2016-10-31 | 2016-10-31 | 一种面向目标代码的程序静态分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106598839A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110659200A (zh) * | 2018-06-29 | 2020-01-07 | 中国航发商用航空发动机有限责任公司 | 航空机载软件的源码和目标码对比分析方法及系统 |
CN113626017A (zh) * | 2021-07-06 | 2021-11-09 | 曙光信息产业(北京)有限公司 | 异构程序的分析方法、装置、计算机设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814053A (zh) * | 2010-03-29 | 2010-08-25 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
US20130198713A1 (en) * | 2011-11-08 | 2013-08-01 | The Mathworks, Inc. | Code generation for control design |
CN105138335A (zh) * | 2015-08-28 | 2015-12-09 | 牟永敏 | 一种基于控制流图的函数调用路径提取方法及装置 |
CN105678169A (zh) * | 2015-12-30 | 2016-06-15 | 西安胡门网络技术有限公司 | 一种二进制程序漏洞挖掘方法和系统 |
CN106055343A (zh) * | 2016-06-22 | 2016-10-26 | 华东师范大学 | 一种基于程序演进模型的目标代码逆向工程系统 |
-
2016
- 2016-10-31 CN CN201610927632.1A patent/CN106598839A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814053A (zh) * | 2010-03-29 | 2010-08-25 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
US20130198713A1 (en) * | 2011-11-08 | 2013-08-01 | The Mathworks, Inc. | Code generation for control design |
CN105138335A (zh) * | 2015-08-28 | 2015-12-09 | 牟永敏 | 一种基于控制流图的函数调用路径提取方法及装置 |
CN105678169A (zh) * | 2015-12-30 | 2016-06-15 | 西安胡门网络技术有限公司 | 一种二进制程序漏洞挖掘方法和系统 |
CN106055343A (zh) * | 2016-06-22 | 2016-10-26 | 华东师范大学 | 一种基于程序演进模型的目标代码逆向工程系统 |
Non-Patent Citations (2)
Title |
---|
王开铸: "《系统软件工程》", 30 September 1999 * |
赵文耘等: "《软件工程 方法与实践》", 31 December 2014 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110659200A (zh) * | 2018-06-29 | 2020-01-07 | 中国航发商用航空发动机有限责任公司 | 航空机载软件的源码和目标码对比分析方法及系统 |
CN113626017A (zh) * | 2021-07-06 | 2021-11-09 | 曙光信息产业(北京)有限公司 | 异构程序的分析方法、装置、计算机设备和存储介质 |
CN113626017B (zh) * | 2021-07-06 | 2023-10-31 | 曙光信息产业(北京)有限公司 | 异构程序的分析方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107153535A (zh) | 一种操作ElasticSearch的方法及装置 | |
CN107797805B (zh) | 一种代码封装方法、装置及计算机可读存储介质 | |
CN106649095A (zh) | 一种面向目标代码的程序静态分析系统 | |
CN113268227A (zh) | 一种零代码可视化的软件开发平台及开发方法 | |
US10387124B2 (en) | System and method for creating domain specific language | |
JP2020149302A (ja) | 解析装置、解析方法、及び解析プログラム | |
CN114741360A (zh) | 汽车零件文件重建方法、装置、终端设备及存储介质 | |
CN103176894A (zh) | 一种面向数据库的测试数据自动衍生方法和装置 | |
JP4826120B2 (ja) | 業務仕様作成支援システム及び方法 | |
CN113760266B (zh) | 一种功能模块文件的创建方法、创建装置和电子设备 | |
CN106598839A (zh) | 一种面向目标代码的程序静态分析方法 | |
Balbaert | Getting started with Julia | |
CN103049504A (zh) | 基于源代码查询的半自动插桩方法 | |
EP2883137B1 (en) | A mechanism for replacing an array creation routine within code | |
JP2011191985A (ja) | シンボリック実行支援プログラム、方法及び装置 | |
CN103744678A (zh) | 基于寄存器传输语言确定静态函数调用关系的方法 | |
JP5041990B2 (ja) | ソフトウェア部品抽出支援装置 | |
WO2016181526A1 (ja) | 制御ロジック図解析装置および制御ロジック図解析方法 | |
Balbaert et al. | Julia: High performance programming | |
Balbaert et al. | Julia 1.0 programming complete reference guide: discover Julia, a high-performance language for technical computing | |
CN114594960A (zh) | 一种递归函数解析执行方法、装置及存储介质 | |
CN109977343B (zh) | 椭球面方程绘制方法、装置、设备及存储介质 | |
CN111126012A (zh) | 定制生成表达式方法及装置 | |
CN107180193B (zh) | 一种将程序代码转换成数据约束的方法和装置 | |
KR101673151B1 (ko) | 프로그램 소스 및 db 스키마의 연관 관계 변화 분석 방법 및 장치 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170426 |