收稿日期: 2010唱10唱04; 修回日期: 2010唱11唱08 基金项目: SafeNet 东北亚高校合作资助项目
作者简介: 邓超国(1986唱) ,男,广西博白人,硕士,主要研究方向为 计 算 机系统结构和软 件 安 全( chaoguodeng@gmail.com) ;谷大武 ( 1970唱) ,
男,河南漯河人,教授,博导,博士,主要研究方向为密码学与计算机安全;李卷孺(1985唱),男,贵州凯里人,博士研究生,主要研究方向为代 码 反向
工程、软件分析;孙明(1986唱),男,山东淄博人,硕士研究生,主要研究方向为软件安全.
一 种 基 于 全 系 统 仿 真 和 指 令 流 分 析 的
二 进 制 代 码 分 析 方 法
倡
邓超国, 谷大武, 李卷孺, 孙 明
(上海交通大学 计算机科学与工程系, 上海 200240)
摘 要: 提出了一种基于全系统仿真和指令流分析的二进制代码分析方法,该方法核心思想是在一个全系统仿
真虚拟机上执行二进制代码,通过截获并分析二进制代码运行时产生的指令流信息,分析程序行为特征。 基于
该方法,设计并实现了一个二进制代码分析系统。 实验结果表明,通过该系统捕获并分析指令流,能够更为高效
全面地提取出代码执行 过程 中产生 的各类信息。 对 于使 用抗分析技 术手段的二 进制 代码,该 分析 方法 很有
效果。
关键词: 软件安全; 二进制分析; 虚拟机; 仿真技术; 恶意代码
中图分类号: TP309畅5 文献标志码: A 文章编号: 1001唱3695(2011)04唱1437唱05
doi:10.3969 /j.issn.1001唱3695.2011.04.066
Approach of binary code analysis based on full唱system
emulation and instruction唱flow analysis
DENG Chao唱guo, GU Da唱wu, LI Juan唱ru, SUN Ming
( Dept.of Computer Science & Engineering, Shanghai Jiaotong University, Shanghai 200240, China)
Abstract: This paper proposed an approach of binary analysis based on full唱system emulation and instruction唱flow analysis
technology.This approach ran executable binary code on a virtual machine which used full唱system emulation technology, and
then captured and analyzed runtime instruction唱flow information to figure out this program’s feature.This paper covered design
and implement of such a binary code analysis system.Experiment result illustrates that it is more efficient and general to cap唱
ture, extract and analyze runtime instruction唱flow information by using this system.This approach is particularly effective to
analyze binary code which uses anti唱analysis technology.
Key words: software security; binary analysis; virtual machine; emulation technology; malware
0 引言
在如恶意代码检测、计算机系统漏洞检测和防范、逆向工程
等软件安全领域,二进制代码分析技术有着广泛的应用。 因此,
二进制代码分析成为一个重要的研究课题。 由于大多数应用程
序并不公开源代码,而往往是以精简二进制代码的形式发布
[1]
。
对程序进行分析,从而转为对该程序的二进制代码分析。
传统的二进制代码分析方法包括反汇编、反编译等静态方
法和跟踪调试等动态方法,然而,这些分析方法对采用加壳、反
调试、代码混淆等抗分析技术手段的二进制代码难以奏效,同时
忽略了二进制代码在运行过程中产生的动态数据流和指令流。
而这些在代码运行时才产生的数据流和指令流,一方面能够反
映静态二进制代码执行的路径,另一方面也能够反映二进制代
码运行时的各种行为。 因此,深入研究二进制代码运行时产生
的指令流信息并利用其来分析二进制代码就显得意义重大。
然而,通过分析二进制代码运行时产生的指令流信息分析
二进制代码,面临诸多挑战。 比较突出的问题有:如何截获二
进制代码运行时产生的动态指令流信息;如何从底层的指令信
息中分析程序的行为特征。 针对上述问题,本文提出了一种新
的基于全系统仿真和指令流分析的二进制代码分析方法。 其
核心思想为,在一个全系统仿真的模拟器(虚拟机) 上运行操
作系统,然后在处于仿真环境的操作系统中执行应用程序的二
进制代码,通过截获运行时产生的指令流信息,提取相关数据,
分析程序的行为特征。 本文的主要贡献包括:
a)提出了一种基于全系统仿真的二进制代码分析方法。
传统的分析方法更多的是关注静态的二进制代码或者程序运
行时表现的行为。 本文的新颖性在于,通过截获、分析二进制
代码运行时的指令流信息来分析二进制代码。 这种方法可以
有效地规避加壳、反调试、代码混淆等抗分析技术手段。
b)设计并实现了一个通用的截获运行时指令流的虚拟机。
通过对 bochs
[2]
模拟器进行二次开发,实现了一个能够截获运行
时指令流的虚拟机。 基于 X86 架构的 Windows、Linux 操作系统
以及应用程序都可以在该虚拟机环境运行,具有通用性。
c)实现了有条件的过滤记录指令流信息。 由于程序运
行时会产生海量的指令流信息,如果全部记录下来,一方面
会影响模拟 器的性能,导致二 进制代码的 执行速度严重 下
降;另一方面会因为记录过多的冗余信息增加了分析的复杂
第 28 卷第 4 期
2011 年 4 月
计 算 机 应 用 研 究
Application Research of Computers
Vol畅28 No畅4
Apr畅2011
评论0
最新资源