软件逆向工程(Software Reverse Engineering)又称软件反向工程,是指从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。通常,人们把对软件进行反向分析的整个过程统称为软件逆向工程,把在这个过程中所采用的技术都统称为软件逆向工程技术。

       这里的软件逆向工程,本质上不是剽窃,也不是破解,就跟日常生活中开锁匠一样的性质,如果您的软件供应商已经消失,而你的软件还在用,但是又需要增加一些功能或重新授权,而你的曾经的供应商已经消失,无法联系,这个时候,我们你就跟门钥匙不慎丢失,我们技术性开锁,换锁,为你解决软件的后顾之忧,直接节约企业成本!

       软件逆向工程最早是作为软件维护的一部分出现的。早在 20 世纪 60 年代,随着第三代计算机的产生,为了挽救大量运行在即将报废的第二代计算机上的软件,同时也为加速开发第三代计算机上的软件,美国开始研制针对特定软件的专门用途的逆编译工具来进行软件移植,并成功转换了许多优秀软件。这些逆编译工具中大量使用了软件逆向工程中的技术方法。此后软件逆向工程技术逐步被各国所认识,并广泛研究和应用到多个软件技术领域中。

timg (5).jpg

       近几年来,国内许多软件公司相继开展了软件逆向工程的研究,针对网络游戏的外挂产业的日益壮大就是软件逆向工程发展的最好见证。电子工业出版社的《加密与解密》等系统丛书,看雪论坛等都为我国软件逆向工程的发展作出了贡献。

       2007 年 1 月 17 日,最高人民法院发布的第一个涉及不正当竞争案件审理的司法解释明确指出:通过自行开发研制或者反向工程等方式获得的商业秘密,将不被认定为反不正当竞争法有关条款规定的侵犯商业秘密行为。这样,从法律上也为从事软件逆向工程开发者扫除了最后一道障碍。可以预见,我国的软件逆向工程必将迎来更加辉煌的明天。

      在对软件进行逆向工程研究的时候,一般会依照以下几个大的步骤来完成:

      1、研究保护方法,去除保护功能。大部分软件开发者为了维护自己的关键技术不被侵犯,采用了各式各样的软件保护技术,如序列号保护、加密锁、反调试技术、加壳等。要想对这类软件进行逆向,首先要判断出软件的保护方法,然后去详细分析其保护代码,在掌握其运行机制后去除软件的保护。

      2、反汇编目标软件,跟踪、分析代码功能。在去除了目标软件的保护后,接下来就是运用反汇编工具对可执行程序进行反汇编,通过动态调试与静态分析相结合,跟踪、分析软件的核心代码,理解软件的设计思路等,获取关键信息。

      3、生成目标软件的设计思想、架构、算法等相关文档,并在此基础上设计出对目标软件进行功能扩展等的文档。

      4、向目标软件的可执行程序中注入代码,开发出更完善的应用软件

      软件逆向工程可以让人们了解程序的结构以及程序的逻辑,深入洞察程序的运行过程,分析出软件使用的协议及通信方式,并能够更加清晰地揭露软件机密的商业算法等。因此逆向工程的优势是显而易见的。

timg (6).jpg

目的和意义

      1、由于软件生产技术水平还没有达到人们所期望的程度,所以从头开发软件已经不适应社会对软件需求的不断增长,为了避免重复劳动,提高软件生产的效率和质量,缓解软件危机,必须充分利用和改造现有软件,对现有软件进行再设计、再工程,使软件功能得到大幅提高以满足用户的需要,而再设计(Redesign)和再工程(Reengineering)都是软件逆向工程的形式之一。再工程是指在现有系统基础上,修改系统并组装成新的形式。

      2、目前运行的许多系统由于某些原因,例如其运行环境已改变,或者是根据业务的需要对其功能要进行调整,导致它们必须进行演化才能继续使用。这些系统在经历多年运行之后,包含了众多的知识,包括系统需求、设计决策和业务规则等,通过软件逆向工程将这些软件系统转化为易演化系统,是充分有效地利用这些有用资产的良好途径。软件逆向工程可以从这些系统的程序源代码出发,导出切实可用的信息。

       3、在已发布的软件中,许多优秀软件生产厂家出于技术保护等原因没有向用户开放源代码或者不提供源代码,需要用户自己去恢复,此时对软件进行逆向工程研究是最好的方法。

       4、现今的商业社会把软件科学纳入一种相对封闭的范畴,为了追求利润,一些软件业的霸主试图进行知识的垄断,它的直接体现就是鼓励普通用户和大多数程序员把软件看成“黑箱”,使得它们不去关心软件的运行机制,把软件的生产变成类似车间加工的一道道流程,却隔断了人们深入研究软件科学的通路。而作为开放源代码的前期工程,软件逆向工程对整个开放源代码工程有着至关重要的作用。