软件逆向工程技术探讨

软件逆向工程技术探讨

摘要:随着信息时代的不断发展,人们对于软件的需求越来越多,对软件的功能要求也越来越高,仅仅依靠软件正向工程无法满足人们的需求,因此软件逆向工程技术应运而生,为人们在设计和使用软件的过程中,带来了极大的方便。作为一名软件技术人员,我们必须时刻关注行业技术发展动态,对各种新技术的发展和应用有一个全面的了解,以此来确保自身能够在了解新技术、掌握先进知识的基础上,具备较高的职业素养,为自身技术创新活动的开展奠定坚实的基础。为此,本文以当前较为先进的逆向工程技术为研究对象,通过对软件逆向工程分析方法的介绍,结合目前软件设计行业发展趋势以及逆向工程技术特点,对软件逆向工程技术未来的发展方向做出了合理、科学的预设。希望以此来为软件逆向工程技术未来在各行业中的良好运用提供更多科学的意见和建议。

关键词:软件工程;软件逆向工程;逆向工程;逆向工程分析

1相关概念解析

逆向工程是一种对产品设计技术予以再现的过程,即以目标产品为对象在逆向分析的作用下,对产品设计及处理的主要技术规格、功能、组织结构、特性、处理流程等相关设计要素进行重新演绎和再现,以此来帮助设计人员明晰产品设计流程、要素、特点等,在原有产品设计创新改革的基础上,为人们设计并制造出功能相仿的产品提供必要的材料基础。因此,单从技术方面考量,我们还可以将逆向工程称之为逆向技术。从逆向工程的发展来看,最初其只是源于军事、商业等领域的硬件分析,其主要目的在于帮助设计人员难以确定产品生产信息的情况下,从产品自身着手,通过产品设计流程、要素、功能、特性等内容的分析,来帮助设计人员对产品设计原理进行反向推导。在社会现代化、智能化不断发展的趋势下,计算机技术也在社会各领域得到了更加广泛式的应用与发展。而为了满足市场日益多元化的软件功能需求,软件开发技术一时之间得到了迅猛的发展。以某个特定的软件为基础,通过反汇编阅读源码的方式去对程序设计、体系结构、数据结构等信息进行推断,已经成为了当前软件逆向工程的主要关注和研究对象。因此,软件逆向工程技术的目的是在于对先进技术进行研究、学习,在缺乏相关文档资料的情况下,可以通过对现实软件功能的解析、研究来帮助我们明晰其中所用到的各项技术。当前软件逆向工程技术常用软件主要包括,用于动态调试程序的OllyDbg、用于调试驱动程序的SoftICE、反汇编软件的IDAPro。

2软件逆向工程技术研究概况

软件逆向工程技术最初被用作软件维护工作而存在。上世纪60年代,在计算机网络技术不断革新式发展的作用下,第三代计算机出现在我们面前,为了加速三代计算机软件的开发同时也为了挽救二代计算机上正在运行的常用软件,美国专门制定了软件移植任务用于对特定软件进行逆向编译,以此来实现对优秀软件的转换,将其从几近消亡的二代计算机上移植到三代计算机当中,促进其作用的继续发挥。这些逆编译工具当中大量运用了软件逆向工程技术方法。此后基于软件逆向工程技术自身的巨大优势其被逐渐运用到各国的软件开发技术领域当中,并得到了众多技术研究人员的认可。国外的CMUSEI专门成立了相应的再工程研究中心,在软件逆向工程的作用下用于对程序的研究和推广。20世纪80年代后期,针对软件逆向工程以及软件版权之间矛盾的解决,各国纷纷从立法角度,对该领域的研究工作进行了立法约束,明确指出软件逆向工程属于合法范围,允许人们对软件进行逆向工程分析以用于个人学习和领域研究。我国的逆向工程技术发展于80年代,以北大开发的“青鸟软件生产线系统”为主要成果,其中所涵盖的逆向工程工具可以用于C++语言相关程序代码的逆向分析。近年来以国内高等院校为主围绕软件逆向工程展开了全面的研究,电子工业出版社的《加密与解密》系列丛书,更是对我国软件逆向工程的研究工作做出了突出贡献。2007年1月我国最高法院也通过立法手段明确了逆向工程技术的合法性,这为我国软件逆向工程研究工作的有序开展奠定了坚实的基础,扫除了其最后障碍。相信随着我国计算机网络技术的发展,人们对于软件逆向工程技术的研究深度和广度也会更加深入化,我国的软件逆向工程技术也将会迎来一个更加美好的未来发展。

3软件逆向工程的分析方法

3.1词法分析和语法分析

对于软件工程来讲,代码是实现软件的重要部分,代码部分的质量对于后续软件的维护成本会产生重要的影响。因此,词法分析和语法分析是软件逆向工程中常用的分析方法之一,主要是利用分析树或者是抽象语法树,对软件的源码进行分析,从而得到软件源码的相关实现细节,进而更好地支持软件逆向工程的分析。

3.2图形化的方法

这一部分主要是针对软件的具体实现流程进行的,利用图形化工具,将软件的主要工作流程、控制流程、数据流程、各个对象之间的关系等进行描述,例如:软件的流程图就是对软件的主要工作流程进行描述,能够帮助人们更好地了解软件的使用过程;数据流程,主要是介绍软件中对应的输入和相关的输出,可以使得人们了解哪些数据是有效的,哪些数据是无效的;将软件作为一个黑盒子,从软件的数据输入输出更好地了解软件的功能;对象关系图,这个是针对软件实现中的具体抽象对象来开展的,不同对象之间会存在一定的关系,例如:包含、继承、依赖等关系,这个与其他流程而言,主要是从软件专业人员的角度对软件进行分析,从而更好地了解软件的设计及实现。

3.3程序切片

顾名思义,程序切片是对程序的某个部分进行分析,而不是针对整个程序来进行分析,这种软件逆向工程分析方法主要适用于软件中的关键性逻辑,对这部分逻辑进行重点测试和分析,了解程序的具体实现过程,从而更好地对关键步骤进行分析,确保关键步骤可以实现功能,并能够支持一些异常的输入和输出。

3.4动态分析

上面介绍的几种方法,主要是针对静态的软件实现代码或者实现逻辑而言的,而动态的分析则是针对软件具体运行后的行为进行分析,能够更加全面地分析软件的整个工作过程。动态分析一种基本的分析方法就是进行植入,在一定的范围内植入一些关键性的分析代码,让这些代码在软件运行后开始进行工作,从而可以对软件的运行过程进行监控。当软件在运行过程中,遇到某种情况可以触发植入代码的条件时,植入代码就会产生相应的输出,从而帮助分析人员更好地了解软件的具体运行过程。

4软件逆向工程技术未来的发展方向

信息社会的到来,使得软件的应用范围逐步扩大,深入各行各业,而目前软件的规模在不断扩大,软件的实现逻辑变得更加复杂,很多软件将多种功能集中在一起,同时有能够实现一些个性化的逻辑。所以,软件逆向工程技术在分析软件时得到了广泛的应用,经过本文的论述,认为软件逆向工程技术未来的发展方向,主要包括以下几个方面:

4.1与具体领域的技术进行结合

目前,软件在各行各业中都有着广泛的应用,而每个行业对于软件的要求是不同的,例如:会计行业要求软件计算的准确无误,银行方面要求软件可以处理更多的异常情况,部分行业要求软件具有更高的性能等等。因此,软件逆向工程技术未来的发展方向会与不同的领域进行结合,从而形成具有领域特点的逆向工程技术,更好地为具体的领域提供软件服务,帮助人们更好地了解软件在某个领域中的应用,也能够进一步加深软件在该领域的应用深度。

4.2更加智能化

目前,人工智能技术得到了广泛的应用,本文经过分析认为可以将人工智能与软件逆向工程技术结合起来,通过进行不同软件逆向工程技术的应用和分析,让人工智能积累到更多的特征数据,更好地进行学习和成长,能够更加智能地应用软件逆向工程对软件进行分析;同时,还可以与用户进行更加友好的交互,深入理解用户的需求,更好地满足用户的功能;对于用户不满的功能进行反复修改,最终达到用户的满意。另外,还可以使用人工智能技术对软件故障进行预测和分析,帮助人们降低使用软件中的故障概率,提高软件的可用性。

4.3抽象软件的设计架构和设计模式

虽然,软件在各行各业中都得到了广泛的应用,但是不同行业的软件也具有类似的功能,例如:很多网站都具有登录的功能,需要用户输入用户名和密码,软件后台对用户名进行查找,并对密码进行验证,然后再校验输入验证码是否正确等等,这种重复性的工作,可以形成软件的复用模块,降低软件设计者的工作量,可以进一步提高软件开发的效率。同时,一些优秀的软件架构,能够使得软件功能进行解耦,形成独立工作的不同模块,更好地发挥每个模块的特点;优秀的设计模式,能够让软件设计人员对软件进行更好地设计,降低重复性劳动,有效地降低未来软件的维护成本。

4.4推动软件逆向工程技术的普及

根据本文的论述可知,软件逆向工程对于软件的整个生命周期都起到了非常重要的作用,但是调查数据显示,软件逆向工程在企业中的应用普及率比较低。很多人员在进行软件设计、测试、维护等过程中,并没有使用到软件逆向工程的相关技术,可能会导致各种问题。因此,软件逆向工程技术未来需要得到进一步普及,为此可以参考以下几点:第一,可以对当前的软件逆向工程技术进行分析,了解软件逆向工程没有普及的原因,并进行针对性地改进,为该技术的推广和应用提供条件;第二,可以参照当前国外一些优秀的软件逆向工程技术,并选择合适的技术进行分析和应用,能够更好地满足人们对软件逆向工程技术的需求;第三,提高软件逆向工程技术的简单实用性,让人们能够非常方便地使用该技术对软件进行分析,可以增加该技术的普及性;同时,当软件逆向工程技术得到普及之后,用户可以及时反馈该技术在应用过程中存在的问题,对于该技术未来的发展是非常有利的。

结束语

总之,根据本文的分析和论述可知,软件逆向工程技术在软件的分析、软件设计、软件测试等多个方面都有着广泛的应用,为人们提供了多种技术更加快速、高效地了解软件,对于推广和普及软件的使用起到了重要的作用。通过上文对软件逆向工程相关内容的探究,我们对于目前阶段软件逆向工程的分析方法有了一个更为全面的了解。认识到了软件工程拟向技术是一种符合当今社会发展潮流、满足社会各行业发展需求的高新技术。其未来在社会各行业中的应用必然有着极为良好的发展趋势。为此,在今后的工作中,我们要继续加大对于逆向工程技术相关内容的研究,深入到各行各业当中,不断扩大软件逆向工程应用范围,以此来充分发挥软件逆向工程的技术优势,促进其在社会各行业中的广泛化应用于推广。与此同时,作者也希望借助本课题的研究,在社会各界引起人们对软件逆向工程技术的热议,使更多的人认识到软件逆向工程独特的优势作用,进而为本课题研究体系的完善奠定坚实的人员基础,促使更多的行业专家、研究人员广泛的参与到本课题的研讨中来,以此来促进软件逆向工程技术研究理论体系、实践体系的完善。

参考文献

[1]崔迪.逆向工程中的CAD建模技术及软件系统应用[J].科技资讯,2018,16(16):19-20.

[2]高菁.软件逆向工程分析技术的实践与探索[J].中国设备工程,2018(5):178-180.

[3]刘明.软件逆向工程分析技术研究及应用[J].航空计算技术,2011,41(2):93-95,104.

作者:夏学云 单位:上海闵轩钢结构工程有限公司