在我們的第一篇文章裡面介紹了現有的各種加密方案,軟體鎖是其中的一種。在這裡之所以再次專門討論這個問題,是因為軟體鎖加密是現今世界上軟體加密的主流方案,有關軟體鎖加密同其它加密方式的比較我們已經在前面提過,現在希望說明的主要是軟體鎖加密的安全性問題。
首先從軟體鎖的硬體方面進行一下研究,因為軟體鎖是插在電腦LPT上的設備,依靠電腦LPT上微弱的電壓來工作,而電腦LPT的電壓沒有嚴格統一的標準,從2伏-5伏都有可能,這對於軟體鎖中的元器件的採用有了很大的限制,最早一批的軟體鎖裡面的核心就只是一個EEPROM能夠在計算機掉電後仍然保持原有的記錄。這種軟體鎖從硬體上沒有加密性可言,只要能夠找到相同的EEPROM,就能夠完全的複製軟體鎖。再其後出現了EEPROM +
計算晶片的組合,軟體鎖不僅僅能夠記錄信息,而且能夠產生一些數學上的變換,而且有些軟體鎖的廠家把EEPROM和計算晶片合二為一,製成專用的晶片。大大增加了軟體鎖硬體上的加密強度,但這種方法由於生產上的大批量要求,晶片內的設計不可能修改,一旦被黑客破解了一個晶片,所有的同類型軟體鎖也就被破解了。最近一年的軟體鎖設計大多採用了低電壓CPU為基礎的設計,CPU內部的程序由軟體鎖廠商自行寫入,由於CPU內部的程序是一次寫入而且不可修改、不可讀出的,安全性也比較高,而且由於CPU程序是由軟體鎖生產廠家來寫入,廠家可以根據自己的要求隨時修改軟體鎖內部的程序,靈活性也比較高。
其次我們從軟體鎖軟體上來考慮一下這個問題,實際上大多數黑客攻擊的只是軟體鎖和客戶的軟體方面,真正從硬體角度來破解軟體鎖的比較少。從結構上來說,一個使用軟體鎖進行加密的軟體分為三個部分:
1. 軟體鎖的驅動程序部分
2. 軟體鎖提供的負責同驅動程序進行通訊的具體語言模塊(.OBJ、.DLL...)
3. 客戶軟體部分
其中軟體鎖驅動程序負責電腦與軟體鎖交換數據,如果這個環節的安全性比較差,容易被軟體鎖模擬程序鑽空子,尤其是交換的數據比較固定而又未加密的情況下更是如此。市面上的“打狗棒”、“WKPE”...都是基於此原理做出來的。其實這個問題很容易防範,只要在通訊過程中加入一些隨機的信號就可以防止這種程序的有效運行。第二部分具體語言的軟體鎖模塊負責與軟體鎖驅動程序的通訊,如果驅動程序過於簡單或通訊協議過於清晰,可以通過製作一個假的驅動程序來模擬所有軟體鎖的操作,但這種方法過於複雜,不但要對如何編制設備驅動程序有所了解,還要完全理解軟體鎖驅動程序的工作原理與通訊方式。所以有些黑客從另一端入手,也就是客戶端程序所要調用的具體語言的通訊模塊,因為有些軟體鎖的客戶端模塊非常大(大于10K),而且在不同程序中的表征都相同,黑客完全可以寫一段小的仿真程序來替換掉原來的軟體鎖客戶端模塊,也能達到解密的目的。最後的一部分也就是客戶化程序的部分,也往往是黑客攻擊的主要部分,因為軟體鎖其它的部分都是由軟體鎖的廠家來完成的,都有不同程度的加密與反跟蹤成分。只有客戶自己的程序是相對簡單的,在用戶使用的時候如果沒有仔細的規劃一下自己的加密方案的話,所有的其它方面再嚴密也是徒勞的。從上面的分析我們可以看出,軟體鎖的使用環節很多,任何一個環節出了問題,都會造成整個加密方案的失敗。廠家設計的部分相對要嚴密一些,而客戶的使用方法往往是加密成敗的關鍵,如果某個軟體鎖的訪問最後能夠歸結為某個條件判別的話,那麼一旦在這裡被跳過,整個加密也就失去作用了。規劃一套真正行之有效的加密方案,才能更好的發揮軟體鎖的保護功效。 |