傳統(tǒng)的軟件工程是從計算機的功能需求出發(fā),將高層抽象的邏輯結構和設計思想通過計劃和開發(fā),生產出可實際運行的計算機軟件,這個過程稱為軟件的“正向工程”。反之,從可運行的程序系統(tǒng)出發(fā),運用解密、反匯編、系統(tǒng)分析以及程序理解等多種計算機技術,對軟件的結構、流程、算法和代碼等進行逆向拆解和分析,推導出軟件產品的源代碼、設計原理、結構、算法、處理過程、運行方法及相關文檔等的過程,稱為軟件的“逆向工程”(SoftwareReverseEngineering),又稱軟件“反向工程”。通常,人們把對軟件進行逆向分析的整個過程統(tǒng)稱為軟件逆向工程,把在這個過程中所采用的技術統(tǒng)稱為軟件逆向工程技術。傳統(tǒng)的軟件工程主要關注新品軟件的分析與設計,而逆向工程則關注成品軟件的拆解與剖析。 逆向工程可以讓人們了解程序的結構以及程序的邏輯,因此,利用逆向工程可以深入洞察程序的運行過程??梢粤私饽繕顺绦蛘谑褂玫南到y(tǒng)函數(shù)的類型,也可以了解目標程序訪問的文件,當然也可以了解目標軟件使用的協(xié)議以及目標軟件是如何與網絡的其他部分通信的。在進行軟件保護和反保護的過程中,軟件逆向工程的優(yōu)勢是顯而易見的。