一种面向目标代码的程序静态分析系统技术方案

技术编号:15289879 阅读:129 留言:0更新日期:2017-05-10 17:02
本发明专利技术公开了一种面向目标代码的程序静态分析系统,所述系统包括反编译模块、中间表示精化模块、程序分析模块及可视化模块。其中反编译模块以待分析的目标代码文件作为输入,对输入文件进行拆封装格式、反编译操作,生成汇编代码、控制流图及过程边界等信息并作为该模块的输出;中间表示精化模块根据反编译模块生成的信息,生成相应的数据结构并进行精化操作;程序分析模块根据反编译模块和中间表示精化模块输出的信息生成待分析程序的几种中间表示形式;可视化模块用于分析过程中各种图形和其他信息的可视化显示。该系统根据实际执行的二进制代码,对程序行为进行分析,比面向源码的分析工具具有更高的保真度。

Object oriented program static analysis system

The invention discloses a program static analysis system for object code, which comprises an anti compilation module, an intermediate representation refinement module, a program analysis module and a visualization module. The anti compiler module for analysis object files as input, the input file and the encapsulation format, decompile, generate assembly code, control flow chart and process boundary information and serve as the output of the module; the intermediate representation refinement module according to decompile module generated information, generate the corresponding data structure and refinement operation; program analysis module based on decompilation module and intermediate representation analysis of several intermediate program representation to generate information refinement module output; visualization module is used to display a variety of graphics and other information visualization analysis process. The system is based on the actual implementation of the binary code, analysis of the behavior of the program, more than the source oriented analysis tools with higher fidelity.

【技术实现步骤摘要】

本专利技术涉及一种面向目标代码的程序静态分析系统
技术介绍
目前,基于源代码的程序静态分析技术,都是建立在假定的程序运行物理环境基础之上。而通过抽象和假定的环境系统往往不能完全反映现实操作中的具体问题与情况,而这样一个基于较好假定环境的工作方式在一定情况下将致使一些关键性质与行为无法得到体现与保障。目标代码是编译器处理源代码后产生的代码,是在机器CPU上实际执行的代码,包含完整的程序运行物理环境信息,具有无可替代的与实际运行情况高度一致的特点。因此,使用面向目标代码的程序分析技术,在目标代码上进行程序分析,将可以避开诸如编译错误和高层抽象错误等一系列问题,确保最终交付软件的正确性。本专利技术提出了一种面向目标代码的程序静态分析系统,根据实际执行的二进制代码,对程序行为进行分析,比面向源码的分析工具具有更高的保真度。
技术实现思路
本专利技术提出了一种面向目标代码的程序静态分析系统,包括:反编译模块,用于拆解待分析目标代码文件的封装格式,反汇编目标代码,生成基本的控制流图结构以及其他相关的信息;中间表示精化模块,对反编译得来的信息进行处理获取更多程序细节,生成相应的数据结构并进行精化操作;程序分析模块,根据反编译模块和中间表示精化模块输出的信息生成待分析程序的中间表示形式;可视化模块,用于分析过程中各种图形和其他信息的可视化显示。优选地,所述反编译模块包括拆装器子模块、反汇编引擎子模块、流图构建器子模块。优选地,所述拆装器子模块用于解除目标代码封装,其支持常用的目标代码封装格式。优选地,所述反汇编引擎子模块,用于将解除封装格式后的目标代码转换为汇编代码,并且生成程序细节信息。优选地,所述流图构建器子模块,根据反汇编引擎子模块生成的信息,构建程序基本的控制流图。优选地,所述中间表示精化模块包括类型发现子模块、别名分析子模块、关系分析子模块;在分析过程中,所述类型发现子模块、别名分析子模块、关系分析子模块被迭代调用。优选地,所述程序分析模块包括程序图构建子模块、程序结构浏览子模块。优选地,所述程序图构建子模块,用于生成待分析程序的中间表示形式,所述中间表示形式包括抽象语法树、控制流图、函数调用图和系统依赖图。优选地,所述程序结构浏览子模块,用于浏览生成的程序图形和分析得到的程序结构。本专利技术的有益效果包括:目标代码比源代码更容易获得,相比于面向源码的程序静态分析系统,本系统的适用范围更广;目标代码包含程序实际执行的全部信息,面向目标代码的程序分析技术比面向源码的程序分析技术得到的结果更精确;在目标代码上执行程序分析,可以避免诸如编译错误和高层抽象错误等一些列问题,确保最终交付程序的正确性。附图说明图1是本专利技术面向目标代码的程序静态分析系统结构图;图2是使用本专利技术对ELF格式的目标代码进行静态分析的原型工具系统结构图。具体实施方式如图1所示,本专利技术公开了一种面向目标代码的程序静态分析系统,所述系统包括:反编译模块、中间表示精化模块、程序分析模块及可视化模块。其中反编译模块以待分析的目标代码文件作为输入,对输入文件进行拆封装格式、反编译操作,生成汇编代码、控制流图及过程边界等信息并作为该模块的输出;中间表示精化模块根据反编译模块生成的信息,生成相应的数据结构并进行精化操作;程序分析模块根据反编译模块和中间表示精化模块输出的信息生成待分析程序的几种中间表示形式,包括抽象语法树、控制流图、函数调用图和系统依赖图;可视化模块并不直接进行分析工作,而是用于分析过程中各种图形和其他信息的可视化显示。本专利技术提出的所述面向目标代码的程序静态分析系统中,所述反编译模块包括拆装器子模块、反汇编引擎子模块、流图构建器子模块。所述拆装器子模块用于解除目标代码封装,支持常用的目标代码封装格式,如ELF、COFF、PE等。所述反汇编引擎子模块,用于将解除封装格式后的目标代码转换为汇编代码,并且生成函数边界、静态已知内存地址和偏移量等程序细节信息。所述流图构建器子模块,根据反汇编引擎子模块生成的信息,构建程序基本的控制流图。本专利技术提出的所述面向目标代码的程序静态分析系统中,所述中间表示精化模块包括类型发现子模块、别名分析子模块、关系分析子模块。在分析过程中,所述类型发现子模块、别名分析子模块、关系分析子模块会被迭代调用,随着迭代次数的增加,所获得的程序信息越来越多,在此基础上生成的控制流图等程序图也越来越完整。本专利技术提出的所述面向目标代码的程序静态分析系统中,所述程序分析模块包括程序图构建子模块、程序结构浏览子模块。所述程序图构建子模块,用于生成待分析程序的几种中间表示形式,包括抽象语法树、控制流图、函数调用图和系统依赖图。所述程序结构浏览子模块,用于浏览生成的程序图形和分析得到的程序结构。具体而言,反编译模块用于拆解待分析目标代码文件的封装格式,反汇编目标代码,生成基本的控制流图结构以及其他相关的信息(如函数边界信息、静态已知内存地址和偏移量等)。封装格式是可执行文件的内容组织方式,只有按照这种组织方式才能找到可执行程序指令的起始和中止位置,才能保证下一步反汇编操作的正确性。反汇编操作将二进制指令翻译成其对应的汇编代码,同时计算出静态已知内存地址和偏移量等相关信息。根据翻译出来的信息,流图构建器子模块对程序进行基本块划分,构建控制流图,生成调用关系。中间表示精化模块,在反编译模块产生的信息基础上进行分析计算,得到诸如变量别名、类型、结构等信息,使得反编译模块中流图构建器子模块生成的控制流图更加完整。在反编译阶段,可以从可执行文件中恢复出粗粒度的变量信息,这对于程序分析来说远远不够。中间表示精化模块会被反复的迭代调用,直到计算出的程序信息足够精细。在得到反编译模块传过来的信息后,中间表示精化模块会首先进行类型发现操作,识别出程序中的聚类结构(如结构体和数组),然后进行别名分析,将变量的别名识别出来,再进行关系分析,如此循环迭代,直到达到最够的精度为止。此时,比较完整地控制流图上,每个节点都会有变量的使用(used)集、消除(killed)集、可能消除(may-killed)集等信息。可视化模块,用于分析过程中各种图形和其他信息的可视化显示。控制流图、调用关系图、程序依赖图等的显示,都借助于此模块,甚至中间表示精化模块的运行过程也可以通过此模块展现给用户。虽然此模块并不参与程序分析过程,但却直接与用户交互,向用户呈现分析过程与结果。下面具体讲述本专利技术所述面向目标代码的程序静态分析系统。实施例1实施例以本专利技术面向目标代码的程序静态分析系统的原型工具为例,实现对ELF格式的目标代码的静态分析。ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的标准文件格式。ELF文件由4部分组成,分别是ELF头(ELFheader)、程序头表(Programheadertable)、节(Section)和节头表(Sectionheadertable)。实际上,一个文件中不一定包含全部内容,而且他们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。下面详细介绍使用本专利技术的原型工具对ELF格式的目标代码进行静态分析。原型工具系统结构图如图2所示。原型工具将目前已存在的工具IDAPro(本文档来自技高网...
一种面向目标代码的程序静态分析系统

【技术保护点】
一种面向目标代码的程序静态分析系统,包括:反编译模块,用于拆解待分析目标代码文件的封装格式,反汇编目标代码,生成基本的控制流图结构以及其他相关的信息;中间表示精化模块,对反编译得来的信息进行处理获取更多程序细节,生成相应的数据结构并进行精化操作;程序分析模块,根据反编译模块和中间表示精化模块输出的信息生成待分析程序的中间表示形式;可视化模块,用于分析过程中各种图形和其他信息的可视化显示。

【技术特征摘要】
1.一种面向目标代码的程序静态分析系统,包括:反编译模块,用于拆解待分析目标代码文件的封装格式,反汇编目标代码,生成基本的控制流图结构以及其他相关的信息;中间表示精化模块,对反编译得来的信息进行处理获取更多程序细节,生成相应的数据结构并进行精化操作;程序分析模块,根据反编译模块和中间表示精化模块输出的信息生成待分析程序的中间表示形式;可视化模块,用于分析过程中各种图形和其他信息的可视化显示。2.如权利要求1所述的面向目标代码的程序静态分析系统,其特征在于,所述反编译模块包括拆装器子模块、反汇编引擎子模块、流图构建器子模块。3.如权利要求2所述的面向目标代码的程序静态分析系统,其特征在于,所述拆装器子模块用于解除目标代码封装,其支持常用的目标代码封装格式。4.如权利要求2所述的面向目标代码的程序静态分析系统,其特征在于,所述反汇编引擎子模块,用于将解除封装格式后的目标代码转换为汇编代码,并且生成程序细...

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

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

1