文档库 最新最全的文档下载
当前位置:文档库 › 数据流分析的二进制程序理解方法

数据流分析的二进制程序理解方法

Computer Engineering and Applications计算机工程与应用2010,46(23)

1前言

程序理解是从计算机程序中获取能够直接被人理解的信息。计算机程序可以是源代码,也可以是二进制形式,源代码是按照语法规则组织的符号序列,而二进制代码是能够被机器直接执行的比特串。程序理解的目标是在不同的抽象级别上,建立软件的智力模型,使得分析者和开发人员更容易理解。

程序理解可以用于程序排错、改进程序、重用程序以及整理文档等方面的工作上[1]。通过对程序的分析和理解,能够初步地掌握软件的功能、性能、结构和软件开发环境,从代码层次推测软件的算法过程、逻辑操作顺序、数据结构、操作接口等更细致的描述。程序理解不仅包含了代码所表达的内容,还包括了软件设计思想、软件维护规范和软件二次开发等内容。在程序设计、软件工程和信息安全领域中,人们对可执行程序的理解有着迫切的需求,例如提取内部的加密算法、分析安全漏洞、挖掘软件隐藏信息等,同时对病毒样本、木马程序等恶意程序的分析和理解。程序理解在更大的范围内包括了逆向工程和反汇编的功能。

2可执行程序理解的相关研究

目前,对可执行程序的理解主要从代码抽象和程序行为抽象两个方向研究。代码抽象是将机器码转换成各种层次的程序语言,同时保证功能一致。将机器码转换成汇编代码就是反汇编的过程,而转换成其他高级语言的过程就是反编译过程。程序行为抽象是对程序或者程序片断功能的识别,在程序自动理解研究上,文献[2]提出了程序行为特征概念,通过确定程序外部行为特征与内部代码之间的关系达到程序理解的目的。文献[3]提出特征符号粗匹配的程序自动理解方法,将程序代码特征与功能模板库匹配实现对已知功能的自动识别,它们的不足之处在于缺乏对函数内部功能特征分析,程序理解准确性低。随着程序理解研究的深入,程序理解已经被应用到软件智能调试、软件自动测试和软件安全漏洞发掘等领域。随着符号执行和抽象解释等新方法的引入,程序自动理解将分别从外部和内部自动识别程序的运行时特征。

提出了一种对二进制程序的函数功能理解的方法,该方法的核心思想是在反汇编的基础上,建立函数内数据流方程,迭代求得数据流方程解,将函数内部数据流与函数输入参数、输出参数关联,获得数据整体流向关系,从而推测出函数的功能。该方法首先对目标程序进行反汇编,借助反汇编工具生成程序控制流图;其次确定程序的用户代码区域,使用程序切片的方法分割出程序功能模块,分别建立各模块的数据流方程;在数据流图分析的基础上,计算模块内表达式的传递,这种数据流向关系反映了函数的功能特征,从而能够理解函数

数据流分析的二进制程序理解方法

唐和平,黄曙光,吴志勇

TANG He-ping,HUANG Shu-guang,WU Zhi-yong

解放军电子工程学院网络工程系,合肥230037

Network Engineering Department,PLA Electronic Engineering Institute,Hefei230037,China

E-mail:tangheping2007@https://www.wendangku.net/doc/c214109014.html,

TANG He-ping,HUANG Shu-guang,WU Zhi-yong.Method based on data flow analysis to understanding binary https://www.wendangku.net/doc/c214109014.html,puter Engineering and Applications,2010,46(23):64-66.

Abstract:In order to analyze executable file,this paper proposes a method of understanding program by data flow analysis. It firstly translates disassemble results into data flow descriptive language and gets Reach In and Out definition,builds in-tra-procedur data flow equations,and then solves equations to refer relation between function input and output.The method has been validated by experiment on string copy function without extra clue.

Key words:sensitive data flow;disassemble;reach-definition;program understanding

摘要:二进制程序数据流静态分析首先将被分析的程序转换成数据流描述标记,确定每个基本块的输入、输出定值集合,结合程序控制流图,建立模块内数据流方程组,通过迭代的方法解数据流方程并推导出函数输入与输出之间的联系,实现函数功能的静态理解。经过实验表明,在不需要额外提示的情况下,能够准确识别二进制形式的字符串拷贝函数。

关键词:敏感数据流;反汇编;到达-定值;程序理解

DOI:10.3778/j.issn.1002-8331.2010.23.018文章编号:1002-8331(2010)23-0064-03文献标识码:A中图分类号:TP393.08

作者简介:唐和平(1981-),男,博士研究生,CCF会员,主要研究领域为网络安全;黄曙光(1960-),男,教授,博士生导师,主要研究领域为信息安全;吴志勇(1981-),博士研究生,主要研究方向为漏洞挖掘。

收稿日期:2009-08-05修回日期:2009-11-16

64

相关文档