其實做為軟體開發者,研究好軟體加密的確很重要,不過也很有必要多瞭解一些關於加密狗解密和破解的知識,加密和破解就像矛和盾一樣,對於解密知識瞭解的越多,那麼編寫的加密程式碼就越好,要知道加密永遠都比解密要容易的多,只有知己知彼,方能百戰百勝。 硬體加密鎖,俗程“加密狗”,對於加密狗的破解大致可以分為三種方法,一種是透過硬體克隆或者複製,一種是透過SoftICE等Debug工具除錯跟蹤解密,一種是透過編寫攔截程式修改軟體和加密狗之間的通訊。 硬體克隆複製主要是針對中國產晶片的加密狗,因為中國產加密狗公司一般沒有核心加密晶片的製造能力,因此有些使用了市場上通用的晶片,破解者分析出晶片電路以及晶片裡寫的內容後,就可以立刻複製或克隆一個完全相同的加密狗。不過國外的加密狗就無法使用這種方法,國外加密狗硬體使用的是安全性很好的自己研製開發的晶片,通常很難進行復制,而且現在國內加密狗也在使用進口的智慧卡晶片,因此這種硬體克隆的解密方法用處越來越少。 對於Debug除錯破解,由於軟體的複雜度越來越高,編譯器產生的程式碼也越來越多,透過反彙編等方法跟蹤調式破解的複雜度已經變得越來越高,破解成本也越來越高,目前已經很少有人願意花費大量精力進行如此複雜的破解,除非被破解的軟體具有極高的價值。 目前加密鎖(加密狗)的解密破解工作主要集中在應用程式與加密動態庫之間的通訊攔截。這種方法成本較低,也易於實現,對待以微控制器等晶片為核心的加密鎖(加密狗)具有不錯的解密效果。 由於加密鎖(加密狗)的應用程式介面(API)基本上都是公開的,因此從網上可以很容易下載到加密狗的程式設計介面API、使用者手冊、和其它相關資料,還可以瞭解加密狗技術的最新進展。 例如,某個國內知名的美國加密狗提供商的一款很有名的加密狗,其全部程式設計資料就可以從網上獲取到,經過對這些資料的分析,我們知道這個加密鎖(加密狗)有64個記憶體單元,其中56個可以被使用者使用,這些單元中的每一個都可以被用為三種類型之一:演算法、資料值和計數器。 資料值比較好理解,資料值是使用者儲存在可讀寫的單元中的資料,就和儲存在硬盤裡一樣,使用者可以使用Read函式讀出儲存單元裡面的資料,也可以使用Write函式儲存自己的資訊到儲存單元。 計數器是這樣一種單元,軟體開發商在其軟體中使用Decrement函式可以把其值減一,當計數器和某種活動的(active)演算法關聯時,計數器為零則會封閉(deactive)這個演算法。 演算法單元較難理解一些,演算法(algorithm)是這樣一種技術,你用Query(queryData)函式訪問它,其中queryData是查詢值,上述函式有一個返回值,被加密的程式知道一組這樣的查詢值/返回值對,在需要加密的地方,用上述函式檢查狗的存在和真偽。對於被指定為演算法的單元,軟體上是無法讀和修改的,即使你是合法的使用者也是如此,我理解這種技術除了增加程式複雜性以外,主要是為了對付使用模擬器技術的破解。 此加密鎖(加密狗)的所有API函式呼叫都會有返回值,返回值為0的時候表示成功。 因此,破解思路就出來了,就是使用我們自己的工具(如VB、VC等)重新編寫構造一個和加密狗API一樣的DLL動態庫檔案,裡面也包含Read、Write等全部API中包含的函式,使用的參量及返回值和原來的函式一樣,所有函式返回零。然後對Query、Read函式進行處理,返回應用軟體需要的數值即可。 這個新的DLL檔案編寫成功後,直接替換掉原來的DLL檔案,這時候再執行應用軟體,軟體訪問加密狗的操作就全部會被攔截,攔截程式永遠會返回正確的資料給軟體,從而實現了模擬加密狗的執行。 以上是目前破解軟體加密狗(加密鎖)的一些常見思路,對於這種破解,軟體開發者還是有相應的一些對策的,下一回我將在《軟體加密鎖程式設計技巧》一文中具體介紹一下軟體開發者將如何編寫安全可靠的程式碼,使得這種類似的破解方法失效。
其實做為軟體開發者,研究好軟體加密的確很重要,不過也很有必要多瞭解一些關於加密狗解密和破解的知識,加密和破解就像矛和盾一樣,對於解密知識瞭解的越多,那麼編寫的加密程式碼就越好,要知道加密永遠都比解密要容易的多,只有知己知彼,方能百戰百勝。 硬體加密鎖,俗程“加密狗”,對於加密狗的破解大致可以分為三種方法,一種是透過硬體克隆或者複製,一種是透過SoftICE等Debug工具除錯跟蹤解密,一種是透過編寫攔截程式修改軟體和加密狗之間的通訊。 硬體克隆複製主要是針對中國產晶片的加密狗,因為中國產加密狗公司一般沒有核心加密晶片的製造能力,因此有些使用了市場上通用的晶片,破解者分析出晶片電路以及晶片裡寫的內容後,就可以立刻複製或克隆一個完全相同的加密狗。不過國外的加密狗就無法使用這種方法,國外加密狗硬體使用的是安全性很好的自己研製開發的晶片,通常很難進行復制,而且現在國內加密狗也在使用進口的智慧卡晶片,因此這種硬體克隆的解密方法用處越來越少。 對於Debug除錯破解,由於軟體的複雜度越來越高,編譯器產生的程式碼也越來越多,透過反彙編等方法跟蹤調式破解的複雜度已經變得越來越高,破解成本也越來越高,目前已經很少有人願意花費大量精力進行如此複雜的破解,除非被破解的軟體具有極高的價值。 目前加密鎖(加密狗)的解密破解工作主要集中在應用程式與加密動態庫之間的通訊攔截。這種方法成本較低,也易於實現,對待以微控制器等晶片為核心的加密鎖(加密狗)具有不錯的解密效果。 由於加密鎖(加密狗)的應用程式介面(API)基本上都是公開的,因此從網上可以很容易下載到加密狗的程式設計介面API、使用者手冊、和其它相關資料,還可以瞭解加密狗技術的最新進展。 例如,某個國內知名的美國加密狗提供商的一款很有名的加密狗,其全部程式設計資料就可以從網上獲取到,經過對這些資料的分析,我們知道這個加密鎖(加密狗)有64個記憶體單元,其中56個可以被使用者使用,這些單元中的每一個都可以被用為三種類型之一:演算法、資料值和計數器。 資料值比較好理解,資料值是使用者儲存在可讀寫的單元中的資料,就和儲存在硬盤裡一樣,使用者可以使用Read函式讀出儲存單元裡面的資料,也可以使用Write函式儲存自己的資訊到儲存單元。 計數器是這樣一種單元,軟體開發商在其軟體中使用Decrement函式可以把其值減一,當計數器和某種活動的(active)演算法關聯時,計數器為零則會封閉(deactive)這個演算法。 演算法單元較難理解一些,演算法(algorithm)是這樣一種技術,你用Query(queryData)函式訪問它,其中queryData是查詢值,上述函式有一個返回值,被加密的程式知道一組這樣的查詢值/返回值對,在需要加密的地方,用上述函式檢查狗的存在和真偽。對於被指定為演算法的單元,軟體上是無法讀和修改的,即使你是合法的使用者也是如此,我理解這種技術除了增加程式複雜性以外,主要是為了對付使用模擬器技術的破解。 此加密鎖(加密狗)的所有API函式呼叫都會有返回值,返回值為0的時候表示成功。 因此,破解思路就出來了,就是使用我們自己的工具(如VB、VC等)重新編寫構造一個和加密狗API一樣的DLL動態庫檔案,裡面也包含Read、Write等全部API中包含的函式,使用的參量及返回值和原來的函式一樣,所有函式返回零。然後對Query、Read函式進行處理,返回應用軟體需要的數值即可。 這個新的DLL檔案編寫成功後,直接替換掉原來的DLL檔案,這時候再執行應用軟體,軟體訪問加密狗的操作就全部會被攔截,攔截程式永遠會返回正確的資料給軟體,從而實現了模擬加密狗的執行。 以上是目前破解軟體加密狗(加密鎖)的一些常見思路,對於這種破解,軟體開發者還是有相應的一些對策的,下一回我將在《軟體加密鎖程式設計技巧》一文中具體介紹一下軟體開發者將如何編寫安全可靠的程式碼,使得這種類似的破解方法失效。