




已阅读5页,还剩84页未读, 继续免费阅读
(计算机应用技术专业论文)软件漏洞逆向分析技术研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 计算机软件的普遍应用带给人们越来越多的便捷,并日益影响人们的日常生 活,但计算机软件中存在大量的错误及漏洞,隐藏着巨大的风险。因此,无论是 科研机构还是企业,都在努力研究避免软件出现错误和漏洞的方法。对软件漏洞 的分析和研究,在计算机网络与信息安全领域有着非常重要的理论和实用价值。 本文对软件漏洞的基本理论进行了分析,在传统分析模型的基础上,提出了一种 基于逆向工程技术的软件漏洞分析方法,该方法结合逆向工程领域对软件的静态 分析和动态分析技术,在适用性、可操作性和分析效率上与传统分析方法相比都 有较明显的优势。 本文首先阐述了课题的研究背景、意义以及国内外研究现状,分析了国内外 软件漏洞分析的典型技术和软件系统;研究分析了逆向工程领域的静态分析和动 态分析技术的优缺点;在基于逆向工程的程序分析技术的基础上,提出本文所研 究的软件漏洞逆向分析技术。该技术结合软件系统的静态分析和动态分析,形成 一种新的方法:利用静态分析理解程序结构,再利用动态分析跟踪程序的执行流 程,更准确的定位和提取与漏洞相关的代码和数据。然后根据该方法的原理技术, 使用反汇编、跟踪调试等手段,设计并实现了s v a s 软件漏洞逆向分析系统,给 出了系统的开发环境、总体功能结构和具体模块的实现方案等。最后,对软件漏 洞分析技术的现有技术和发展方向进行了总结和展望,对本文实现的s v a s 软件 漏洞逆向分析系统的优缺点进行了总结,给出了未来工作的方向。 关键词:软件漏洞,逆向工程,缓冲区溢出,静态分析,动态分析 a b s t r a c t a 8 s t r a c t n 培p o p u l a r i z a t i o no fs o r w a r eh a sb r o u g h tp e o p l em u c hc o n v e n i e n c ea n d c h a n g e do u rl i f ea tt h e $ f l n l et i m e b u tt h e r ea r el o t so f e r r o r sb i d e di ns o l , w a r e , w h i c h w i l lc a x t s ev u l n e r a b i l i t i e so rs e c u r i t yh o l ei ns y s t e ma n db r i n gh 1 增pr i s k s n o wm a n y i n s t i t u t e sa n dc o m p a n i e sp a ym o r ea t t e n t i o nt of i n d i n gm e t h o d st oa v o i ds o f t w a r e e a r o r s t h ep a p e ra n a l y z e st h es o f t w a r ev u l n e r a b i l i t y , t h em o s td a n g e r o u sl 【i n do f e r r o r si ns o f t w a r e p r o m o t e sam e t h o df o rf i n d i n gs o f t w a r ev u l n e r a b i l i t yb a s e do nt h e t e c h n o l o g yu s e di nt h er e v e r s ee n g i n e e i n gd o m a i n , w h i c hi m p r o v e se x s c t n a 3 $ o n o n g i r l a lv u l n e r a b i l i t ya n a l y s i sm e t h o d f i r s lt h ed i s s e r t a t i o np o i n t so u tt h a tt h ev u l n e r a b i l i t yi st h em o s td a n g e r o u s s e c u r i t yh o l eo fs o f t w a r e ,e x p o u n d sb a c k g r o u n da n ds t u d i e so ft h i sf i e l d ,a n ds h o w s t h ea d v a n t a g e sa n dd i s a d v a n t a g e so f o r i 西n a ls t a t i ca n dd y n a m i cv u l n e r a b i l i t ya n a l y s i s m e t h o d t h e nw eb r i n g san e wv u l n e r a b i l i t ya n a l y s i sm e t h o d , w h i c hc o n l 鹳f r o m r e v e r s ee n g l n e c i n gm e t h o dt h a tc o m b i n i n gs t a t i ca n dd y n a m i ca n a l y s i sm e t h o d st o i m p r o v ei t se x a c t n e s sa n dp e t f o r m a n c e ,s oi tc a nc o n v e n i e n t l yf i n dv u l n e r a b i l i t yo f p r o g r a mb i n a r y - c o d e f o l l o w i n gt h em e t h o d , w ef i n i s hac o m p l e t ed e s i g no fa s o r w a r ev u l n e r a b l i t yr c v 9 1 s e a n a l y z es y s t e m ( s v a s ) i ti n c l u d e s t h ef u n c t i o n s f r a m e w o r k , m o d u l e sd e s i g na n dp a r t i t i o na n dd e v e l o p m e n tk i to fs y s t e m a tl a s t , w e a n a l y z et h em e t h o do f s o f t w a r ev u i n e r a b l i t ya n a l y z ea n dg i v eo u tac o n c l u s i o no f o u r s v a ss y t e m k e y w o r d s : s o f t w a r ev u l n e r a b i l i t y ,r e v e r s ee n g i n e e r i n g ,b u f f e ro v e r f l o w , s m i l ea n a l y z e ,d y n a m i ca n a l y z e 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名:篮:垒丝日期:2 弦7 年乒月彤日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:签:堕 第一章绪论 1 1 研究背景 第一章绪论 从2 0 世纪9 0 年代末期开始,因特网的日趋成熟和广泛应用,引发了一场全 球范围内的信息革命,全球信息化的步伐不断加快,信息化社会正在形成并走向 成熟。信息逐渐被作为一种重要的社会战略资源而与物质、能源、人才一起被列 为现代社会生产力的重要因素。然而互联网固有的开放性,使得信息在自由网络 空间中呈现出很多不安全的特征。黑客攻击、计算机病毒破坏和网络金融犯罪等 安全事件层出不穷,究其原因就是信息系统特别是软件系统在其设计、开发、部 署和配置等方面存在着脆弱性因素。随着人们的安全意识逐步增强,安全管理也 越来越受到重视,然而由于信息系统本身的漏洞而导致的安全问题却使某些正常 的防御手段失效。漏洞是信息系统的毒瘤,必须引起人们的高度重视。 2 0 0 4 年1 月1 日至6 月3 0 日期间,全球著名的防病毒公司s y m a n t e c 记录了 超过1 2 3 7 例新漏洞,平均每周4 8 例新漏洞。这些漏洞中有7 0 被认为易于利用, 同时有9 6 被认为是中度或高度严重。因此,每天必需对付平均7 例以上的新漏 洞,而这些漏洞中有相当一部分会对目标系统造成部分或完全的危害。 有调查数据显示,2 0 0 4 年,漏洞从公布到被利用的周期平均仅为5 8 天。一 旦利用方法公布,漏洞常常就会被大范围快速利用。短暂的间隔时间留给漏洞修 补的时间不到一周。 近年来,缓冲区溢出漏洞的广泛性和破坏性受到国内外信息安全研究领域的 极切关注。从1 9 8 8 年c e r t ( 计算机紧急响应小组) 成立以来,统计到的安全威 胁事件每年以指数增长。缓冲区溢出攻击作为网络攻击一种主要形式占所有系统 攻击总数的8 0 以上。这种缓冲区溢出漏洞可以发生在不同操作系统、不同应用 程序上。缓冲区溢出漏洞被蠕虫病毒利用造成了很大的危害,如2 0 0 1 年7 月1 9 日,c o d e r e d 蠕虫爆发,造成的损失估计超过2 0 亿美元,2 0 0 1 年9 月1 8 日,n i m d a 蠕虫被发现,造成的损失更大,超过2 6 亿美元,2 0 0 2 年s l a p p e r 蠕虫出现,2 0 0 3 年1 月2 5 日s l a m m e r 蠕虫爆发,2 0 0 4 年5 月1 日,“震荡波”被发现,这几个病 毒对网络安全造成的破坏之大是前所未有的。 如此之多的安全事件不仅影响了人们的正常工作及电子商务的安全,而且从 电子科技大学硕士学位论文 计算机安全衍生出来的计算机信息战更关系到一个国家的安全。所以,深入研究 系统安全漏洞己经成为刻不容缓的工作。 软件安全问题,特别是安全漏洞的发现和研究,已引起我国的重视。“我国在 网络安全漏洞的发现和研究方面仍存在较大差距,我国至今还没有建立起系统化 的安全漏洞发现与分析能力”,引自国家计算机网络应急技术处理协调中心 ( c n c e r t c c ) 公布的2 0 0 4 年网络安全工作报告。在报告中重点提出了网络安全 漏洞发现和研究,说明在网络与信息安全领域,安全漏洞的发现和研究是一项非 常重要的基础性研究工作。而安全漏洞发现的基础又是对软件的漏洞发现,特别 是大型软件。 可以预见,随着互联网的进一步发展,安全漏洞的层出不穷以及病毒的种类、 发作方式、发作频率和破坏手法的更多变化,将使信息安全的保障工作更加举步 维艰。随着信息安全重要性的日渐突出,有效解决信息系统软硬件中存在的安全 问题的需求也显得日益迫切。对于漏洞的挖掘、分析、防护和利用工作因此也正 在受到越来越多的关注。 1 2 研究意义 现代社会对于网络的依赖越来越强,越来越不能承受网络问题带来的巨大危 害,而漏洞是产生网络信息安全问题的根源,国内使用的操作系统基本上都是国 外开发的,因此对漏洞的挖掘和分析越来越受到各方面的重视。 对计算机系统安全漏洞进行科学分类,研究漏洞的表现和形成原因,这些工 作能够增强对计算机软件漏洞本质的进一步理解,有助于防止程序设计人员在编 写程序时产生安全漏洞;可以使计算机管理使用人员了解其系统中可能存在的漏 洞隐息,从而有针对性地消除或阻止安全漏洞的存在;可以使计算机安全专家更 加针对性地寻找、分析、发现未知的漏漏,达到防范于未然的目的。 在信息和网络安全领域,安全人员不仅要了解防御技术,更需要了解攻击、 检测和应急响应技术。对潜在威胁的了解,对攻击者手法的洞悉,对自身脆弱性 的意识,都是确保自身安全的前提。网络攻防是对立统一的,不研究攻击技术的 发展,也就不知道如何采取更积极的防御借施。一方面,随着网络安全防御技术 和人们安全意识的不断提高,网络安全的防御能力飞速发展,而攻击技术也针对 不同的防御技术,发展出更加复杂,更加隐蔽的攻击手段。随着电子商务,电子 2 第一章绪论 政务飞速的发展,网络攻击技术的研究越来越受到国家安全部门的重视。而另一 方面,由于攻击技术的敏感性,在公开文献资料上较少涉及,因此造成了系统地 对缓冲区溢出攻击研究的困难,从而对缓冲区溢出攻击的防御也未能提出行之有 效的解决办法。缓冲区溢出攻击技术已经成为主流的网络攻击技术,具有使用广 泛、难于防护、危害性较大等特点。 绝大部分的黑客入侵破坏都是基于软件的漏洞来进行的。防火墙、入侵检测 和反病毒软件的存在也对这种基于计算机软件安全漏洞的破坏与攻击束手无策, 而且安装这些安全软件本身可能又会带来新的软件漏洞。如何写一个安全的软件, 如何使得软件的漏洞尽可能的少,如何来检测一个现有软件的安全性是解决安全 问题的头等大事。可以这么说,如果我们系统中的软件都是高度安全的,基本没 有漏洞,那么信息破坏的可能性就小了很多。单纯的依赖密码技术根本不能保证 信息的安全,即使是加密数据也可以被修改和删除,给我们造成大量的损失。从 问题的源头就开始关注安全,越早发现软件存在的安全漏洞,那么造成的损失就 越小。因此,对计算机软件中的安全漏洞的检测方法的研究具有重要的理论和实 用价值。 1 3 研究现状 近几年来,计算机系统及网络安全己成为人们研究的热点,与此同时,人们 也越来越多地关注计算机系统的安全漏洞。国外的一些科研组织已经做了多年的 工作,也取得了许多成果。但由于计算机系统的脆弱性往往和网络攻击、信息安 全、国家安全等因素密切相关,其中许多有价值的实用成果往往是不公开的。 美国在信息安全领域一直处于世界领先地位。7 0 年代中期,美国南加州大学 开始了( p r o t e 斌i o na n a l y s i sp r o j e c t ,p a ) 研究计划,主要针对操作系统的安全缺陷进 行研究;美国国家标准局( n a t i o n a l b u r e a u o f s t a n d a r d s ) 启动了针对当时的操作系统 脆弱性问题进行研究的r e s e a r c hi n t os e c u r eo p e r a t i n gs y s t e m s ( r i s o s ) 项目;1 9 9 0 年,美国伊利诺伊大学( u n i v e r s i t yo fi l l i n o i sa tu r b a n a - c h a m p a i g n ) 的b r i a nm 撕c k 对软件漏洞的形成特点做了统计分析,发表了关于软件漏洞的调查报告;1 9 9 3 年, 美国海军研究实验室a v a lr e s e a r c hl a b o r a t o r y ) 的l a n d w e h r 等人收集了不同操作 系统的安全缺陷,然后对每一缺陷按其来源、成因、发现时间和部分代码进行分 类,在分类方法中第一次引入了时间和空间的概念;此后,普渡大学( p u r d u e 3 电子科技大学硕七学位论文 u n i v e r s i t y ) c o a s t 实验室的t a i m u r ,a s l a m ,i v a nk r s u l 和e u g e n eh s p a f f o r d 高 水平地定义了缺陷的范围,提出了更为完整的漏洞分类摸型,漏洞分类方法第一 次被用于该实验室的漏洞库;此外,许多国家的官方组织、规模较大的工商企业 和专门从事i t 安全领域的企业等,很大程度地推动了漏洞数据库领域的研究工作。 近年来,日本、德国、澳大利亚等国家也做出了巨大的投入,参与了此方面的研 究。 在国内,关于系统安全漏洞理论研究方面的论文和参考文献还不多。但国内 主要的信息与网络安全公司、组织都有自己的漏洞数据库,如:绿盟科技,安全 焦点,中国信息安全论坛,安络科技,中国网络安全响应中心,2 0 c n 网络安全小 组,国家计算机网络应急处理协调中心等。但这些漏洞数据库在实时性,更新性, 完整性,以及在分类方面,都有所缺陷,而且没有一个统一的标准。尤其是关于 漏洞的利用方面的信息很少,缺乏对漏洞的进一步分析、研究和归纳,不能反应 漏洞的本质特征。而且在漏洞信息的查询、检索方面很不方便,使这些漏洞信息 难以得到充分的利用。 1 p a 计划 7 0 年代中期,美国开始了针对操作系统保护错误的p a ( p r o t e c t i o na n a l y s i s a r o j e c 0 研究计划,以增强计算机操作系统的安全性。该研究小组发表了一系列研 究论文,主要内容都是描述操作系统中的保护错误,以及这些错误的发现方法的。 他们提出了基于模式匹配漏洞检测技术,并将系统的漏洞分为范围错误( d o m a i n e r r o r ) 、校验错误( v a l i d a t i o ne r r 0 0 、名字错误( n a m i n ge r r o r ) 和串行化错误 ( s e r i m i z a t i o n e r r o r ) 四类。尽管p a 计划并没有程序实现使用模式匹配全自动查找系 统漏洞,但该研究计划是计算机安全研究工作的重要里程碑,具有划时代的重要 意义。 2 r i s o s 计划 在p a 计划进行的同时,美国还秘密开始了r i s o s ( r e s e a r c hi ns e c u r e d o p e r a t i n gs y s t e m s ) 计划。该计划以i b m 的o s m v t 、u n i v a c 的1 1 0 0 系列和 n e w m a n 的t e n e x 操作系统为研究对象,着眼于对操作系统中安全问理的理解以 及加强系统安全的方法。在其最后研究报告中,讨论了一些关于数据安全的相关 问题,并认为加加强管理可以防止对系统的非法访问和系统的信息泄漏。这项研 究的主要贡献是对操作系统中完整性错误的分类,即将系统漏洞分为七大类:( 1 ) 不完整的参数校验( i n c o m p l e t ep a r a m e t e rv a l i d a t i o n ) ;( 2 ) 矛盾的的参数校验 ( i n c o n s i s t e n t p a r a m e t e r v a l i d a t i o n ) ;( 3 ) 绝对的特权秘密数据共享( i m p l i c i ts h a r i n g o f 4 第一章绪论 p r i v i l e g e d c o n f i d e n t i a l d a t a ) ;异步校检不适当的串行化 ( a s y n c h r o n o u s v a l i d a t i o n i n a d e q u a t e s e r i a l i z a t i o n ) ;( 5 ) 不恰当的身份认证授权 ( i n a d e q u a t ed e n t i f l c a t i o n a u t h e n t i c a t i o n a u t h o r i z a t i o n ) ;( 6 ) 易违背的禁令限制 ( v i o l a b l e p r o h i b i t i o n l i m i t ) ;( 7 ) 可利用的逻辑错误( e x p l o i t a b l e l o g i ce r r o r s ) 。 3 n r l 的漏洞分类 1 9 9 3 年,美国海军研究实验室( n a v a lr e s e a r c hl a b o r a t o r y ) 的l a n d w h e r 等人 收集了不同操作系统的安全漏洞,并按照漏洞的来源、形成时间和漏洞代码的分 布位置进行了分类。尽管这些分类还不够准确,概念上存在交叉和模糊现象,但 这种分类方法第一次引入了时间和空间的概念,有助于系统设计人员对安全漏洞 的理解,有助于建立更加安全的软件系统。 4 c o a s t 实验室的漏洞分类 普渡大学( p u r d u eu n i v e r s i t y ) c o a s t 实验室在计算机漏洞的研究方面一直处 于领先地位。该实验室的a s l a m 和k r s u l 研究了漏洞分类情况的进展,提高了人们 对于软件漏洞和安全机制的理解。他们把软件缺陷分为两大类:一、由于程序的 逻辑错误或设计错误而导致的编码错误( c o d i n gf a u l t ) ;- - 、由于不合理的软件安装、 配置而导致的缺陷。在前人研究的基础上,k r s u l 提出了软件漏洞的两种分类方式, 第一、漏洞的后验分类,即通过经验地观察资料之后而进行的经验分类,这种分 类非常适合于漏洞发生的实际情况。第二、漏洞的先验分类,即非经验型的抽象 模型分类,这种分类方式适合于对漏洞机制的理解,可以避免同样的漏洞再次出 现。k r s u l 的这些理论己成为从事计算机系统漏洞研究的理论基础。 1 4 本文内容 本文的工作主要包括以下几个方面: 1 对逆向工程技术的发展和最新的研究热点进行了总结,提出了基于逆向工 程的软件漏洞分析技术,并在软件漏洞静态分析和动态分析相结合方面提出了自 己的方法和模型。 2 在理解前人工作的基础上,通过大量的研究,总结了信息安全领域中软件 漏洞的原理和技术,收集并整理了软件漏洞分析的各种方法,并对其区别和优缺 点作出了比较,说明了软件漏洞分析技术的发展方向和逆向工程技术应用于软件 漏洞分析的优势。 5 电子科技大学硕士学位论文 3 研究了主流的逆向工程平台i d a p r o ,并在其易用性、操作效率和图形化显 示方面进行了改进,在此基础上设计并开发了新的结合静态分析和动态分析技术 的软件漏洞分析系统s v a s 。 论文的组织结构: 本章介绍了软件漏洞分析技术的研究背景、研究意义和国内外研究现状。在 接下来的章节中,将具体阐述软件漏洞、逆向工程、基于逆向工程的软件漏洞分 析技术和s v a s 系统。 第2 章介绍了逆向工程的理论与相关技术,重点讨论了在逆向工程中广泛使 用的静态分析技术和动态分析技术。 第3 章阐述了软件漏洞的定义及分类,漏洞产生的原理和利用技术,总结了 目前常用的软件漏洞检测与防范技术。 第4 章分析了软件漏洞和逆向工程的结合点,描述了基于逆向工程的软件漏 洞分析技术的特定和优势,提出了一种结合静态分析和动态分析的软件漏洞分析 模型。 第5 章介绍了软件漏洞分析系统s v a s 的设计和实现方案,通过实例展示了该 系统的分析过程与结果。 第6 章对本课题的研究内容和结果进行了总结和展望,指出了下一步的研究 方向。 6 第二章逆向工程理论与技术 第二章逆向工程理论与技术 2 1 逆向工程的起源 随着计算机技术的飞速发展,计算机应用的领域不断扩大,人们希望计算机 能够解决各个领域的更多、更复杂的问题,从而也对计算机软件产品的功能、质 量、开发成本和时间提出了越来越高的要求。计算机软件的规模和复杂程度日益 俱增,因而软件技术不断受到新的挑战。2 0 世纪6 0 年代,软件危机的出现促使了 软件工程学的诞生和发展。2 0 世纪8 0 年代初,面向刘象技术成为研究的热点,许 多面向对象的编程语言问世。2 0 世纪8 0 年代末以来面向对象方法开始向系统分析、 设计阶段延伸,出现了一大批面向对象的分析与设计方法。1 9 9 7 年统一建模语言 ( u n i f i e dm o d d i n gl a n g u a g e ) 被对象管理组织( o m g ) 采纳作为一种标准建模语言。 建模语言的标准化为软件开发人员及其用户带来诸多便利,软件工程领域取得了 前所未有的进展。在传统软件开发的正向工程( f o r w a r de n 百n e e r i n g ) 方法技术日趋 完善的同时,软件领域的逆向工程( r e v e r s ee n 百n e e r i n g ) 作为软件工程的一个分支 开始受到广泛的关注。 传统的软件工程主要关注新软件的分析与设计,但随着软件系统的规摸和复 杂度与日俱增,软件的生命周期越来越长软件开发的很大一部分工作集中于堆 护和改造现有的软件系统。另一方面,随着i n t e m e t 技术的普及,w e b 用户增多, 很多软件厂商需要将系统移植到w e b 上,进一步加剧了对软件维护的需求。实践 研究表明,软件资源预算的5 0 到8 0 消耗在对现有系统的维护上,而软件维护 者理解程序源码的时间占软件维护的4 7 至u6 2 。软件维护己成为软件工程界面 临的重要课题之一,而正确和全面地理解软件系统是对软件进行维护的前提。软 件逆向工程作为软件工程界新兴的研究领域,其目标就是开发帮助人们理解己有 软件系统的方法、工具,为软件系统的维护和演化提供支持。 逆向工程在硬件领域作为一种标准实践应用已有很长时间,其起源于为了商 业或军事利益而对硬件进行的分析。软件领域的逆向工程迄今为止没有标准的定 义,一般将逆向工程定义为包括两个步骤的过程:第一步分析目标系统,标识系 统的对象及其关系;第二步创建不同形式或更高形式的抽象层次的系统表示。逆 向工程适用于软件生命期的各个阶段和各种抽象层次,包括需求、设计及实现。 7 电子科技大学硕士学位论文 逆向工程可用于低级的抽象层次,例如把程序二进制代码转换为源代码,但主要 用于程序源代码转换为更高抽象层次的表示,如控制流圈、数据流图、类关系圈、 顺序图等。因此,r o g e rs p r e s s m a n 将逆向工程定义为“分析程序以在比源代码更 高的抽象层次上创建程序的某种表示的过程;逆向工程是一个设计恢复过程,逆 向工程工具从现存的程序中抽取数据、体系结构和过程的设计信息。程序理解 ( p r o g r a mc o m p r e h e n s i o n 、u n d e r s t a n d i n g ) 与逆向工程是可以经常交换使用的术语。 逆向工程在遗产系统的演化、软件复用、大型软件的开发等领域起着很重要的作 用。 目前逆向工程技术的重要性已经引起重视,得到了国内外学术界和商业界的 广泛认同。在学术界,面向逆向工程领域的国际会议w c r e ( t h e w o r k i n g c o n f e r e n c e 0 1 1r e v e r s e e n g i n e e f i n g ) 、i w p c ( t h e i n t e r n a t i o n a l w o r k s h o p o np r o g r a m c o m p r e h e n s i o n ) 和p a s t e ( t h ew o r k s h o po np r o g r a ma n a l y s i sf o rs o f t w a r et o o l sa n d e n g i n e e r i n g ) 每年举行一次。卡内基梅隆大学软件工程研究所成立了专门的再工程 中心,致力于逆向工程的研究。i b m 研究中心( i b mr e s e a r c h ) 设立了“软件工程中 关注点的多维分解”研究项目,研究工作已经进行了多年。 2 2 逆向工程的作用 计算机软件在各个领域经过了几十年应用的积累,同时自九十年代以来,应 用软件系统的规模越来越大,功能越来越复杂,使得更多的大型软件的开发必须 考虑到原先己运行了多年的系统,包括系统的需求、设计决策、业务规则、历史 数据等等,称之为遗产系统( l e g a c y s y s t e m ) 。遗产系统是一种巨大的、长期的投资, 因此如何充分利用这些有用的资产对新系统的开发显得尤为重要。由此,产生出 理解原来的系统的问题。在利用遗产系统前必须充分理解系统。而在很多情况下 遗产系统完整可靠的信息是其程序代码,其它很多信息必须由此导出通过程序理 解获得足够的信息才能让系统按照期望的方式演化。因此,程序理解是遗产系统 成功演化的关键问题之一。辅助程序理解的方法技术有多种,如手工浏览源代码、 静态或动态分析目标系统、或者收集和分析系统的度量数据。但是,从某种角度 来说,这些都是逆向工程的支持技术。逆向工程通过分析标识系统元素,发现元 素问的关系和产生系统的不同形式和层次的抽象表示,完成应用程序领域到问题 域的映射、重新发现高层结构等任务。逆向工程是程序理解的有效支持手段,逆 第二章逆向工程理论与技术 向工程在成功演化遗产系统中扮演着重要角色。 在大型软件系统的开发过程中,开发人员没有理由强求用户完全固定需求, 需求经常发生变化是客观现实。而且,尽管软件系统的开发周期比过去明显缩短, 但在开发过程中后期需求发生变化并不罕见,这常常使得开发人员十分被动。目 前大多数的系统开发环境的支持理念仍然以正向工程( f o r w u de n g i n e e r i n g ) 为主, 即按照分析建模、设计建模、文档自动生成、用静态设计模型自动产生或修改代 码框架、方法体或函数体的编码、模块测试、系统测试的顺序进行开发。在系统 开发初期或者开发时问比较充裕的情况下,以正向工程模式进行建模和程序设计 是合理和可行的,但由于需求变化和开发周期的限制,实际工在开发过程中出现 了种种问题,开发过程中后期需求变化或现场维护后无法保证模型与程序的一致 性。开发过程的中后期一旦发生了需求变化,或者现场维护时发生了程序的修改, 虽然可以要求开发人员对系统静态模型进行相应的修改,重新生成源程序代码框 架和一部分文档,但由于时间的限制和系统动态模型不能对源程序产生实质性作 用等因素,则经常是不修改动态模型而直接修改源程序,使得相关动态模型的文 档很可能与源程序不一致,人工正向建立的动态模型与对应的源程序之间不能保 证必然的一致性,故自动生成的文档可能没有正确反映目标系统的动态行为和结 构特征。然而,对于分布、并发为主要特征的系统,其主要设计内涵恰恰是由动 态模型来描述的。因此,在软件开发的过程中当需求发生变化时、逆向工程的作 用显得尤为重要。通过逆向工程从源程序逆向地产生相应的动态模型,如符合u m l 标准的序列图、状态图或协同图等,并自动生成文档。这样有效地解决因需求变 化而引起的模型与程序的不一致、文档与程序的不一致等问题,对现有的开发方 法、环境与工具的功能也是很好而且非常必要的扩充。 2 3 逆向工程相关术语 逆向工程被定义为分析软件构件和它们的相互关系,从而在较高抽象层次上 描述该软件。这个术语最早出现在硬件技术中,指获取对复杂硬件系统的描述过 程,现在这个概念转移到软件上。逆向工程的基本原理是抽取软件系统的主要部 分而隐藏细节,然后使用抽取出的实体在高层上描述软件系统逆向工程抽取的实 体应比源代码更容易推理和接近应用领城,同时在高层上对软件系统的抽象表示 要简洁和易于理解。 9 电子科技大学硕士学位论文 系。 c h i k o f s k y 和c r o s s 给出了相关的几个术语的定义,下图显示了它们之间的关 图2 1 逆向工程相关术语之间的关系 1 正向工程( f o r w a r d 印百n e c f i n g ) :从高层抽象和设计到低层实现;从独立于 实现的逻辑设计到一个系统的物理实现的传统开发过程。 2 逆向工程( r “e b ee n g i n e e r i n g ) :正向工程的反转过程。分析目标系统,认 定系统的构件及其交互关系,井且通过高层抽象或其它形式来展现目标系统的过 程。 3 再文档( r e d o c u m e n t a t i o n ) :主要是在同一抽象层次做语义等价描述。在同 一层次上创建或修改系统文档。实际上是逆向工程的一种简单形式。 4 设计再现( d e s i g nr e c o v e r y ) ;结合目标系统、领域知识和外部信息认定更 高层次的抽象,在较高层次产生系统的等价描述。 5 重构( r e s t r u c t u r i n g ) ;在同一抽象层次把系统从一种表示方式转换到另一 种表示方式,一个重要方面是新系统和原始系统的语义行为应该一样,而且功能 也不能变; 6 再工程( r e e n g i n e e r i n g ) :结合逆向工程、重构和正向工程对现有系统进行 审查和改造,将其重组为一种新形式。目的是研究系统,产生较高抽象层次描述, 增加新功能到这个描述,使用正向工程技术在原始系统的基础上开发一个新系统。 其中,再文档、设计再现不改变系统。重构改交了系统,但不改变其功能。 再工程通常涉及到逆向工程与正向工程的联合使用,逆向工程解决程序的理解问 题,正向工程检验哪些功能需要保留、删除或增加。再工程改变了系统的功能和 方向,是最根本和最有深远影响的扩展。 1 0 第二章逆向工程理论与技术 2 4 逆向工程分析技术 逆向工程分析技术主要分为两类:静态分析和动态分析。传统的静态分析技 术对逆向工程研究一直有极高的价值,能有效地分析过程式程序的控制流及数据 流。但随着遗产系统类型的演化。动态分析技术的作用越来越重要。例如,基于面向 对象技术、使用动态绑定和多态的程序,必须进行动态分析才能获取相关信息;面向 对象程序中常用到大型共享库和大量间接调用,导致静态分析时可能执行到的路径 数量和整体分析的规模剧增,从分析的效率和准确性考虑必须进行动态分析。 2 4 1 静态分析技术 静态分析技术一直是编译技术的核心,编译器优化是标准的静态分析。对目标 系统的静态分析不必运行系统,所以分析可以进行的比较早,甚至在系统的开发阶 段就可以开始。静态分析技术发展至今,主要有以下几类: 1 词法分析和语法分析 该方法直接对程序源码进行分析,已经发展得比较成熟。通过词法分析可以得 到程序信息的多种有用表示,其中最常用的是交叉引用列表。另外,借助词法分析还 可以建立软件复杂度测量的标准。通过语法分析可以得到两类表示:分析树( p a r s e t r e e ) 和抽象语法树a s t ( a b s t r a c ts y n t a xt r e e ) 。其中,分析树只是指导分析过程,是 比较原始的结果。分析树显示了程序语句的分解过程,包含和程序的实际含义无关 的信息。去除分析树的无关信息后得到a s t ,a s t 只包含和程序实际内容相关的 细节,是更复杂的程序分析工具的基础。 2 图形化方法 图形化方法包括控制流分析、数据流分析以及程序依赖图。 轧控制流分析对执行语句的若干可执行路径进行分析,确定程序的控制结构, 建立控制流图。控制流分析有两种形式:过程内( i n t r a p r o c e d u r a l ) 分析和过程间 ( i n t e r p r o c e d u r a l ) 分析。过程内分析通过构建控制流图c f g ( c o n t r o lf l o wg r a p h ) 进 行,可确定子程序内语句的执行顺序。构建c f g 必须先确定子程序的基本块( b a s i c b l o c k ) 。一个基本块对应c f g 中一个节点,是一些连续语句的最大集合。在该语 句集合中,控制只能从第一条语句开始,也只能从最后一条语句经条件分支或非条 件分支转出。就是说基本块的第一句执行,基本块中所有语句都会执行。基本块可 电子科技大学硕士学位论文 以直接通过遍历a s t 确定,再用控制流弧线连 接基本块来创建c f g 。过程问控制流分析是确定系统子程序之间可能的控制 流路径的过程,用调用图( c a l lg r a p h ) 表示。调用图给出了一个系统中对子程序的可能 调用。调用图是树、有向无环图还是一般的图由系统结构决定。调用图中的结点 和子程序对应,节点之间的有向弧标识出调用关系。 b 数据流分析是在不执行程序的情况下,收集程序数据的运行时信息,分析程 序中数据对象之间的关系。数据流分析关注程序中的数据使用、定义及依赖关系, 对确定系统的逻辑构件及其交互关系很重要。数据流比控制流分析要复杂得多,例 如,控制流分析只需分析循环的可能性擞据流则必须确定循环体内变量的变化情 况。通过数据流分析还可以获取很多抽象层次要求较低的信息,如过程依赖、变量 之间的依赖及指定代码段修改的数据等相关信息。 c 程序依赖图是数据流分析的进一步改进,比数据流分析更复杂。在程序依赖 图中,节点表示语句和谓词表达式( 或运算符和操作数) ,边表示该节点的操作所依赖 的数据值和控制条件。程序依赖图将控制流和数据流放在一起处理,清楚地描述了 程序中每个操作的数据依赖和控制依赖。如果同时需要控制流图和数据流图的相 关信息,使用程序依赖图就很方便。 3 静态切片 切片技术是将程序简化为和某个特殊计算相关的语句的技术来源于数据流分 析方法。切片技术自动将程序分解为较小的称为切片的代码段,使关注点确定在一 个较小范围而不必关注整个程序。一个程序切片是“影响”指定值的程序语句和 判定表达式组成的集合,包含捕获程序行为子集的原来程序的一部分。为了计算切 片必须知道程序中语句之间的依赖关系,这种依赖关系可以通过分析数据流和控制 流自动从源程序中得到。切片技术可大致分为两类:静态切片和动态切片。静态切 片被定义为“可能影响”一个值的所有语句,其相关计算只利用静态获得的信息,并 且是从切片的标准开始,以向后遍历的方式收集语句和控制谓词。在静态切片的实 际计算中可以根据控制流和数据流依赖对间接相关的语句进行分析,也可以借助于 程序依赖图或信息流关系等方式。 4 抽象解释 抽象解释是对程序语言的语义形式上构建一个保守的近似,用基于语义的分析 来确定程序的动态属性。和程序的语法属性可以用b n f 范式表达类似,程序的语 义属性可由一种数学方法一指称语义( d a n o t a t i o n a l s e m a n t i c s ) 来描述。在指称 语义中,程序的含义用多种称为语义域的数据类型来表示。例如,程序的变量和值之 1 2 第二章逆向工程理论与技术 间的绑定状态由一种类表域表示。基于原始的语义域来定义替换函数,借助这种方 法可以进行静态分析。例如,如果要确定指定变量的值是否被子程序改变,不必去关 心变量可能取的值,可以为变量的赋值语句解释语义函数,只用一个简单的布尔变 量就可以标识变量是否改变,这种再解释的过程就是抽象解释。 2 4 2 动态分析技术 动态分析是数据的聚集、压缩和抽象的过程,用于理解系统的运行时行为。静 态分析是在不执行目标系统的情况下对程序源代码进行分析,动态分析则是通过目 标系统的一次或多次运行进行分析。动态分析可以收集到解决某个问题必需的信 息。许多和执行相关的,如内存管理、代码使用及执行效率等软件性能对全面评估 一个软件系统至关重要。这些性能只有在分析软件的动态行为时才可以发现,在静 态分析时则不可见。动态分析技术主要有以下几类: 1 植入技术 程序植入是为了收集程序的运行时信息而修改当前程序的技术。基本的程序 植入技术是以不影响原有程序的语义为前提,在程序的关注位置插入代码。当植入 后的新系统运行时,这些代码可以按照特定协议将动态信息传递到指定位置或转交 给动态信息收集机制,从而提供调试信息、性能分析信息或对象之间的消息传递信 息。程序植入是获取目标系统运行时信息最常用的方式。植入可以在不同的抽象 层次进行,例如硬件级、库级、源代码级和机器指令级。 2 部分求值 大型实时系统具有复杂的状态机体系结构,会引用大量全局变量和嵌套的条件 语句。从整体上分析这类系统会很繁杂,而且效果不会太好,可以只针对系统的某些 特殊行为进行分析。部分求值p e ( p a r t i a le v a l u a t i o n ) 技术有助于进行该类大型系统 的分析。p e 是一种程序转换,根据给定的不同运行参数选项,将大型系统分成较小 的部分进行分析。p e 的基本过程分为两步:根据部分己知的输入数据,进行与其相 关的计算,优化控制流,通过程序转换,将计算结果变换成程序代码,生成例化的程序; 运行例化的滞留程序( r e s i d u a lp r o g r a m ) 完成其余计算。 3 动态切片。 动态切片技术使用的是动态的数据流和控制流分析方法程序的语句间依赖关 系是在以特定数据为输入的程序执行后确定的。一个动态切片可看作是删除原来 程序的零个或多个语句得到的可执行程序,包括了“确实影响”一个值的所有语句, 电子科技大学硕士学位论文 是静态切片的子集。动态切片的确定和程序执行历史相关。利用了程序特殊执行的 信息,只考虑程序特殊执行中存在的依赖。 2 4 3 静态分析与动态分析的比较 静态分析是以程序为中心动态分析是以输入为中心。静态分析只是通过目标 系统自身来推断系统的行为,与输入无关。动态分析是基于目标系统及其输入,依赖 于系统的输入。不同的输入可能得到不同的动态分析结果。动态分析对输入的依 赖导致动态分析的不完全,但同时也将程序的输入、输出和程序行为紧密地联系起 来。通过动态分析可以看到,程序输入的变化直接引起了程序的内部行为和系统的 输出的变化。静态分析是完全的,动态分析是不完全的。 一 诤盘,并 图2 - 2 分析范围示意图 如图所示,静态分析是由程序内容推导出所有执行的特性,动态分析由运行的 程序导出一次或多次执行的特性。动态分析不能证明程序一定满足某个特定的属 性,但是可以检测到异常的属性,还可以提供关于程序行为的有用信息。静态分析可 能会得到大量冗余信息,分析结果容易被抽象和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件测试与故障排除的深度学习方法-洞察及研究
- 财金领域的新支付模式探索-洞察及研究
- (2025年标准)战略支持协议书
- 量子存储技术研究-洞察及研究
- (2025年标准)种植莲藕协议书
- (2025年标准)合伙创业 私下协议书
- (2025年标准)商场运营协议书
- (2025年标准)祖坟用地协议书
- (2025年标准)鸡舍租用协议书
- (2025年标准)挖山合法协议书
- 客车运输公司安全生产风险辨识分级表
- 电动门合同协议书
- 烈士陵园、纪念馆AI应用行业深度调研及发展项目商业计划书
- 米村合伙人合同范本
- 2025年房地产市场的变化趋势试题及答案
- 风电场危险源辨识、风险评价和风险控制清单
- 医疗AI算法揭秘如何构建高效的疾病预测模型
- 电商外包客服合同协议
- 糖尿病性黄斑水肿护理查房
- 《铁路建设项目安全穿透式管理实施指南》知识培训
- 企业研究院管理制度
评论
0/150
提交评论