首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册
安全知识 :: 专题文章

逆向工程发展现状研究


http://www.gipsky.com/
原文:http://i.mop.com/dvchen/blog/2007/08/27/4752319.html



摘要:随着软件产业的发展,越来越多的遗产系统需要维护和改善,逆向工程已经成为遗产系统维护与演化的关健技术之一。介绍了逆向工程的定义,综述了逆向工程的研究进展。通过对现有工具的分析探讨了逆向工程研究中的不足之处,给出了未来的发展趋势。

要害词:逆向工程;程序理解;数据逆向工程;遗产系统

Research on development of reverse engineering



Abstract: With the development of software industry, more and more legacy applications must be maintained and improved. Reverse engineering has become one of the crucial techniques in tackling the problem of the maintenance and evolution of legacy systems. The terminology of reverse engineering is introduced. The progresses of reverse engineering is given. By analyzing the existing reverse en-gineering tools, a discussion of the drawbacks of reverse engineering and a comment on the future of reverse engineering are presented.

Key words: reverse engineering; program comprehension; data reverse engineering; legacy system

1 引言

传统的软件工程主要关注新软件的分析与设计,但随着软件系统的规模和复杂度与日俱增,软件的生命周期越来越长,软件开发的很大一部分工作集中于维护和改造现有的软件系统。另一方面,随着Internet技术的普及,Web用户增多,很多软件厂商需要将系统移植到Web上,进一步加剧了对软件维护的需求。实践研究表明,软件资源预算的50%到80%消耗在对现有系统的维护上,而软件维护者理解程序源码的时间占软件维护的47%到62%。软件维护己成为软件工程界面临的重要课题之一,而正确和全面地理解软件系统是对软件进行维护的前提。软件逆向工程作为软件工程界新兴的研究领域,其目标就是开发帮助人们

理解己有软件系统的方法、工具,为软件系统的维护和演化提供支持。

目前,逆向工程技术的重要性已经引起重视,得到了国内外学术界和商业界的广泛认同。在学术界,面向逆向工程领域的国际会议WCRE (the Working Conference on Reverse Engineering). IWPC (the International Workshop on Program Comprehension)和PASTE (the Workshop on Program Analysis for Software Tools and Engineering)每年举行一次。卡内基梅隆大学软件工程研究所成立了专门的再工程中心,致力于逆向工程的研究。BM研究中心(IBM Research)设立了“软件工程中关注点的多维分解”研究项目,研究工作已经进行了多年。

本文是一篇综述性的文章,主要介绍逆向工程的基本概念、发展现状,探讨逆向工程研究存在的问题和发展方向。



2 基本概念

逆向工程的基本原理是抽取软件系统的主要部分而隐藏细节,然后使用抽取出的实体在高层上描述软件系统。逆向工程抽取的实体应比源代码更轻易推理和接近应用领域,同时在高层上对软件系统的抽象表示要简洁和易于理解。

在软件工程领域,迄今为止没有统一的逆向工程定义。较为通用的是Elliot Chikafsky和Cross在文献中定义的逆

向工程的相关术语。

正向工程:从高层抽象和独立于实现的逻辑设计到一个系统的物理实现的传统开发过程。

逆向工程:分析目标系统,认定系统的构件及其交互关系,并且通过高层抽象或其它形式来展现目标系统的过程。

与逆向工程相关的其它术语:

再文档(Redocumentation):根据源代码,在同一层次上创建或修改系统文档。

设计再现(Design Recovery):结合目标系统、领域知识和外部信息认定更高层次的抽象。

重构(Restructuring):保持系统外部行为〔功能和语义),在同一抽象层次上改变表示形式。

再工程CReengineering):结合逆向工程、重构和正向工程对现有系统进行审查和改造,将其重组为一种新形式。

体系结构再现:用于从源码、性能分析信息、设计文档及专家知识等现有信息中抽象出一个更高层次表示的技术和过程。

其中,再文档、设计再现不改变系统。重构改变了系统,但不改变其功能。再工程通常涉及到逆向工程与正向工程的联合使用,逆向工程解决程序的理解问题,正向工程检验哪些功能需要保留、删除或增加。再工程改变了系统的功能和方向,是最根本和最有深远影响的扩展。它们之间的关系如图1所示 [img width=500]http://photos.album.mop.com/c03/35/58/5e/6cad76/md_1188146196907.jpg[/img]http://photos.album.mop.com/c03/35/58/5e/6cad76/md_1188146196907.jpg" onload="(script removed)DrawImage(this);" />

3 基本过程

借鉴Scott R.Tilley等人提出的一些概念,简单介绍一下逆向工程的基本过程及其特征。传统的逆向工程过程被定

义为信息抽象和信息提取两步,Scott R.Tilley等人将这两步发展为以下3个步骤①建模:使用概念建模技术构造应用

程序的特定领域模型;②抽取:使用合理的抽取机制从目标系统收集原始数据;③抽象:生成有助于程序理解、可以浏览和分析结果的信息结构的抽象。

逆向工程过程中涉及的对象有3类:①数据:实际信息,是研究、推理或讨论的基础;②知识:已知内容的总和,包括数据及从数据推导出的关系和规则;③信息:相互关联的交流知识。

基于以上对象,又定义了逆向工程过程中重要的规范行为:数据采集、知识组织、信息浏览。

数据采集是构造高层抽象以及其它行为的基础。为了使所采集的数据客观实际,可以采用己经成熟的源码分析技术如编译领域的语法分析和交叉索引技术:充分利用源码以外的其它数据,如系统行为、系统文档、系统设计者和维护者提供的信息,这些数据从不同方面反映了系统的信息,使收集的数据更加准确、可靠:数据的过滤也很重要,在数据源中进行筛选,选取对理解系统必要的信息。

知识组织涵盖了创建、表示和推理数据模型的技术,包括概念建模、领域建模和可扩展知识库。数据模型体现了系统的本质属性及其关系。利用数据模型保存数据可以对所采集的数据实现高效的存储和检索,便于数据的保存和使用。逆向工程的建模必须满足人们理解系统的要求。和传统的数据模型如层次模型、网络模型和关系模型不同,概念建模所建模的对象及其关系是面向人的,其建模机制适用于逆向工程领域。程序结构本身不足以反映程序所应用的问题域,通过领域建模可以标识、组织和表示领域元素及其组成结构,辅助人们按领域组织目标系统的知识,识别系统的标准构件。针对大型目标系统庞杂的数据,可扩展知识库存储粗粒度的系统对象,支持子系统的增量分析,进一步提高了大型系统理解的效率。

逆向工程从数据采集开始,依靠于知识组织,将数据组织成应用程序领域的概念模型,其中信息浏览是整个过程的要害行为,多数程序理解都是在该过程中进行的。信息浏览通过遍历浏览代表目标系统的信息的多维结构,按领域相关的标准分析和过滤信息,利用多种呈现机制表示所得到的信息。



4 研究方法

现有的逆向工程分析方法主要有以下4种。

(1)词法分析和语法分析

该方法主要是对程序源码进行分析,已经发展得比较成熟。通过词法分析可以得到程序信息的多种有用表示,其中最常用的是交叉引用列表。通过语法分析可以得到两类表示:分析树(parse tree)、抽象语法树AST(abstract syntaxtree),其中AST是更复杂的程序分析工具基础,包含了和程序的实际内容相关的细节。

(2)图形化方法

图形化方法包括控制流分析、数据流分析以及程序依靠图。控制流分析是在确定程序语法结构之后进行。控制流分析有两种形式:过程内 (intraprocedural)分析、过程间(in-terprocedural)分析。过程内分析能确定子程序内语句的执行顺序,通过构建控制流图 CFG(control flow graph)进行。过程间分析确定程序单元之间的调用关系,用调用图(cangraph)表示。数据流分析关注于解决程序中从定义到使用的过程的相关问题,比控制流分析要复杂得多。程序依靠图是数据流分析的进一步改进,比数据流分析更复杂。在程序依靠图中,控制流和数据流依靠被放在一起处理。假如同时需要控制流图和数据流图,使用程序依靠图就很方便。程序依靠图还具有这样的结构特性:一个程序依靠图描述了一个控制依靠的区域。

(3)程序切片

切片技术来源于数据流分析方法,己经成为很多程序理解工具的基础。一个程序切片是由程序中的一些语句和判定表达式组成的集合。这些语句和判定表达式可能会影响在程序的某个位置(常用行号标识)上所定义或使用的变量的值。利用切片技术可以将关注点确定在一个较小范围而不是关注整个程序。

(4)动态分析

静态分析是对程序源码进行分析。动态分析则是在程序运行时进行分析,基本方法是对程序进行植入。程序植入是一种在全局范围内更改源代码以添加额外操作的过程。这种方法的主要原理是:利用代码的结构信息,依据固定的规则,将软件触发器添加到代码中。所谓软件触发器,是指在源程序的相应位置添加的一些代码,运行时由这些代码按特定协议将指定的动态信息传递到指定位置或传递给动态信息收集机制。对于使用动态绑定和多态的面向对象系统,动态分析是必需的。



5 研究现状

遗产系统通常会存在这样的问题:缺少文档、文档不全或文档与程序代码不一致、程序维护人员不是程序设计人员等。因此源程序成为遗产系统惟一完整、可靠的信息,并且通过对代码的分析还可以得到其它有用的系统信息。一直以来,逆向工程领域的研究主要集中在对代码的理解上,并且在子系统分解、概念合成、切片技术、静态和动态依靠的分析、程序的审查和可视化等方面取得了很大的进展。上世纪末,千年虫问题的出现以及数据逆向工程在处理该问题时表现出的优势,引起了人们对数据逆向工程的重视。

数据逆向工程是逆向工程领域的一个重要分支。Elliot Chikofsky在文献的序言中提到,逆向工程是一个理解目标系统的结构和相互关系的过程,能够应用于系统的各个方面:数据、处理和控制。代码逆向工程关注于理解如何处理信息。数据逆向工程是逆向工程、数据库、数据设计及信息工程领域的集中。数据逆向工程解决的是所存储的信息内容是什么以及在不同条件下如何使用信息,重点在目标系统的数据方面,是认定系统数据的结构、功能及含义的方法和工具的集合。数据逆向工程的目的是提高已有数据资产的价值,使己有数据资产更易使用,更有效。

逆向工程技术发展至今,己经研制开发出许多工具,下面介绍一些典型的工具。

(I) Rigio Rlgi是一个可扩展、可裁剪的逆向工程环境。用半自动的工具从软件表示中提取数据信息,将信息存入

低 层库中,系统被抽象为子系统的分层结构。主要由3部分构成;支持C/C , COBOL等语言的程序静态信息解析器、用于存储从源代码提取的信息的程序静态信息库以及展示和操纵程序静态信息的交互式窗口图形编辑器。Rigi可以与一种支持面向对象动态建模的环境SCED协同使用,分别得出目标系统源程序的静态信息和动态信息。

(2) MORALE/ISVis a MORALE (Mission Oriented Architectural Legacy Evolution)是DARPA资助的一个EDCS (Evolutio-nary Design of Complex Software,复杂软件的进化式设计)类课题。课题中与逆向工程有直接关系的是ISVis (Interaction Scenario Visualizer)工具。这种工具的功能包括:读入源程序文件,解析后产生静态信息文件;利用源代码、静态信息文件以及用户提供的相关的信息,产生获取动态信息所需的代码:执行插入上述代码后的目标系统,产生动态事件跟踪信息,并自动转变成剧情:用户通过所产生的剧情视图进行交互式分析。

(3)Rational RoselRose RealTime/Rose/Architects Rose/RoseRealTime (Rose RT)提供的逆向工程工具,可以从多种程序设计语言源程序中自动产生静态设计模型,但目前只能逆向产生类图。

Rose/Architect是USC(University of Southern California)与Rational合作开发的一种可视化工具,用于对UML类图中的实体进行基于规则的等价合并,以突出地呈现系统的软件体系结构成份。

(4) Sniff o Sniff 是一个开放的、可扩展的、可伸缩的C/C 程序设计环境,具有逆向工程的能力,提供了一个有效

而轻便的环境,适用于不能完全解析的半成品软件系统。

(5)Imagix4Do Imgagix4D是一个C/C 程序的静态理解工具。Imagix4D以三维图形的形式展示要害信息,还提供

产生大量视图、从源代码生成文档和有助于迅速理解程序的交互式询问功能。

(6)August-IIo August-II是一个数据逆向工程工具cep。该工具以COBOL记录格式或DB2数据定义等各种各样的数

据资源为输入,产生概念数据模型,使用户能够理解当前的环境并转向新的数据技术。其输出能用作许多不同软件包如CASE工具和商业数据库治理系统的输入。

国内的逆向工程工具主要有青鸟程序理解系统JBPAS(lade Bird Program Analysis System),是青鸟III型系统的组成部分。JBPAS是由一个C 分析器前端和一组分析工具组成的程序理解系统。该系统针对C 语言,采用增量分析技术对程序源代码进行静态分析:用EER (Enhanced En-tity-Relationship)为C 程序建立概念模型并抽取程序信息,将信息保存在数据库中;按照不同的用户需求组织程序信息,辅助用户理解C 程序;逆向生成源程序的面向对象的设计文档和Rose文档。



6 存在的问题

尽管经过多年的发展,逆向工程研究领域取得了上述的研究成果,但在应用方面、理论方面仍然很不成熟,还有若干问题有待于解决:①缺乏统一的逆向工程的概念、标准术语。导致了研究人员在交流上的困难,不利于工具的研制,也不利于逆向工程技术的应用;②缺乏统一的逆向工程机制的分类框架。导致不同工具或技术比较功能和性能时的困难。尽管Scott R.Tilley等人提出来一个逆向工程描述模型作为分类框架,但该框架还有待于进一步的评估、验证;③缺乏对逆向工程工具的广泛使用。逆向工程工具缺乏与其它开发工具的有效集成,影响到使用的普及,导致逆向工程技术发展上的困难;④缺乏对现有工具和理论进行有效评估的标准及工具.尽管出现了一些评估技术及其应用,还是缺乏统一的评估标准,缺乏有效的验证工具的支持,无法确定逆向工程技术是否得到提高,导致逆向工程工具发展上的困难。



7 发展方向

逆向工程研究作为软件工程中一个正在兴起的研究领域,理论和应用的研究都处于早期探索阶段,在以下方面还有待于加强研究:①继续开发用于普通逆向工程任务的工具和技术,非凡是在数据逆向工程领域。代码逆向工程看起来更具有挑战性以及数据库系统和软件工程领域的传统分类,导致了数据逆向工程一直没有得到应有的重视。但是最近几年,信息遗产系统增多,有大量的业务数据需要处理,引起了对数据逆向工程的更大需求;②提高逆向工程过程的可重复性,使逆向工程过程可定义、可治理及可优化。要注重于提高逆向工程过程的自动化程度,开发实用的半自动化的工具。尽量使用工具自动实现逆向工程过程的各部分功能,减少用户的负担:③改善逆向工程工具的性能,使工具作为一项功能附加到成熟的开发环境中。工具还必须轻易使用,能够提供方便、有效的功能,吸引更多的用户。逆向工程工具只有在便用过程中才能真正发现问题,得到更好的发展。

研究逆向工程工具和正向工程工具的集成,为新软件的开发及遗产系统的演化提供更好的支持。正向过程和逆向过程结合起来,理解目标系统时会更全面、更精确、更具有连续性,在软件的整个生命周期都能获得有效的信息。例如,在软件开发初期,逆向工程可以有效地维护设计模型和代码实现的一致性;在系统演化过程中,通过逆向工程和正向工程相结合,可以更快、更准确地完成演化过程。在连续的基础上获取信息还会降低逆向工程的经济成本,提高经济效益。



8 结语

软件开发人员和治理人员以及其它具有不同职责的人通常需要从不同角度熟悉目标系统。例如,软件开发者关注软件的变化,需要了解从底层代码到高层体系结构的与软件自身相关的信息。治理者需要关系到人员分配、资源配置等治理方面的信息。这就要求逆向工程工具能够在不同层次上对目标系统进行抽象,并且保持这些层次之间的映射。

采用统一的格式表示提取出的信息,为不同的工具共享信息提供基础。便于各工具发挥优势,进一步推动逆向工程技术的发展。例如,可以采用可扩展标记语言xml表示中间信息。

分布式对象技术、构件技术和构架技术的发展给逆向工程技术带来新的挑战。基于构件和中间件技术的系统由已有的构件组装而成,不是全部来自于源代码。针对这样的系统,逆向工程工具需要分析的是组成系统的构件的接口,而不是构件内部的实现细节。

参考文献:

[1].Boebm B W. Software engineering economics[Z]. 1981.

[2].Fjeldstad R K, Hamlen W T. Application program maintenance study: Report to our respondents [C]. Proceedings GUIDE 48,Philadelphia, 1983.4.

[3].Martin Pinzger. HaraId gall: Pattern-supported architecture re-covery[C]. IWPC,2002. 53-64.

[4].Chikofsky E, Cross J. Reverse engineering and design recovery:A taxonomy[J]. IEEE Software, 1990,7(1):13-17.

[5].Scott Tilley R, Paul Santanu. Towards a framework for program understanding[C]. Proceedings of the 4th Workshop on ProgramComprehension, Berlin, 1996.29-31.

[6].Aiken P. Data reverse engineering: Slaying the legacy dragon [M].McGraw-Hi11,1996

[7].Muller Hausi A, Smith Dennis B. Reverse engineer: A roadmap[C]. Proceedings of Future of Software Engineering, 2000.

[8].Davis,Kathi. Hogshead,august-TI: A tool for step-by-step data model reverse engineering[J]. Proceedings of the Second Wor-king Conference on Reverse Engineering,1995,(7):146-155.
<< SWFIntruder - Analyzing and Testing Security of Flash 浅析Windows2000/XP服务与后门技术 >>
评分
10987654321
API:
gipsky.com& 安信网络
网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号