在对软件进行逆向工程研究的时候,一般会依照以下几个大的步骤来完成:
1、研究保护方法,去除保护功能。大部分软件开发者为了维护自己的关键技术不被侵犯,采用了各式各样的软件保护技术,如序列号保护、加密锁、反调试技术、加壳等。要想对这类软件进行逆向,首先要判断出软件的保护方法,然后去详细分析其保护代码,在掌握其运行机制后去除软件的保护。
2、反汇编目标软件,跟踪、分析代码功能。在去除了目标软件的保护后,接下来就是运用反汇编工具对可执行程序进行反汇编,通过动态调试与静态分析相结合,跟踪、分析软件的核心代码,理解软件的设计思路等,获取关键信息。
3、生成目标软件的设计思想、架构、算法等相关文档,并在此基础上设计出对目标软件进行功能扩展等的文档。
4、向目标软件的可执行程序中注入代码,开发出更完善的应用软件
软件逆向工程可以让人们了解程序的结构以及程序的逻辑,深入洞察程序的运行过程,分析出软件使用的协议及通信方式,并能够更加清晰地揭露软件机密的商业算法等。因此逆向工程的优势是显而易见的。
对它进行研究的目的和意义可以分以下几点来具体阐述:
1、由于软件生产技术水平还没有达到人们所期望的程度,所以从头开发软件已经不适应社会对软件需求的不断增长,为了避免重复劳动,提高软件生产的效率和质量,缓解软件危机,必须充分利用和改造现有软件,对现有软件进行再设计、再工程,使软件功能得到大幅提高以满足用户的需要,而再设计(Redesign) 和再工程(Reengineering)都是软件逆向工程的形式之一。再工程是指在现有系统基础上,修改系统并组装成新的形式。
2、目前运行的许多系统由于某些原因,例如其运行环境已改变,或者是根据业务的需要对其功能要进行调整,导致它们必须进行演化才能继续使用。这些系统在经历多年运行之后,包含了众多的知识,包括系统需求、设计决策和业务规则等,通过软件逆向工程将这些软件系统转化为易演化系统,是充分有效地利用这些有用资产的良好途径。软件逆向工程可以从这些系统的程序源代码出发,导出切实可用的信息。
3、在已发布的软件中,许多优秀软件生产厂家出于技术保护等原因没有向用户开放源代码或者不提供源代码,需要用户自己去恢复,此时对软件进行逆向工程研究是最好的方法。
4、现今的商业社会把软件科学纳入一种相对封闭的范畴,为了追求利润,一些软件业的霸主试图进行知识的垄断,它的直接体现就是鼓励普通用户和大多数程序员把软件看成“黑箱”,使得它们不去关心软件的运行机制,把软件的生产变成类似车间加工的一道道流程,却隔断了人们深入研究软件科学的通路。而作为开放源代码的前期工程,软件逆向工程对整个开放源代码工程有着至关重要的作用。
由此我们看出,软件逆向工程为软件技术的发展和相互学习、借鉴提供了一种很有效的技术手段,然而,由于受软件知识产权保护及相关法律法规的限制,软件逆向工程并不能像其它软件技术那样分开、透明地为大家所熟知、了解和广泛交流与应用。另外,软件逆向工程所涉及到的技术很多,它不仅要求逆向工程人员必须熟悉如操作系统、汇编语言、加解密等相关知识,同时还要具有丰富的多种高级语言的编程经验,熟悉多种编译器的编译原理,较强的程序理解和逆向分析能力等,这些都限制了软件逆向工程的发展。