传统的软件工程是从计算机的功能需求出发,将高层抽象的逻辑结构和设计思想通过计划和开发,生产出可实际运行的计算机软件,这个过程称为软件的“正向工程”。反之,从可运行的程序系统出发,运用解密、反汇编、系统分析以及程序理解等多种计算机技术,对软件的结构、流程、算法和代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等的过程,称为软件的“逆向工程”(SoftwareReverseEngineering),又称软件“反向工程”。通常,人们把对软件进行逆向分析的整个过程统称为软件逆向工程,把在这个过程中所采用的技术统称为软件逆向工程技术。传统的软件工程主要关注新品软件的分析与设计,而逆向工程则关注成品软件的拆解与剖析。 逆向工程可以让人们了解程序的结构以及程序的逻辑,因此,利用逆向工程可以深入洞察程序的运行过程。可以了解目标程序正在使用的系统函数的类型,也可以了解目标程序访问的文件,当然也可以了解目标软件使用的协议以及目标软件是如何与网络的其他部分通信的。在进行软件保护和反保护的过程中,软件逆向工程的优势是显而易见的。