硬件克隆復制主要是針對國產芯片的加密狗,因為國產加密狗公司壹般沒有核心加密芯片的制造能力,因此有些使用了市場上通用的芯片,破解者分析出芯片電路以及芯片裏寫的內容後,就可以立刻復制或克隆壹個完全相同的加密狗。不過國外的加密狗就無法使用這種方法,國外加密狗硬件使用的是安全性很好的自己研制開發的芯片,通常很難進行復制,而且現在國內加密狗也在使用進口的智能卡芯片,因此這種硬件克隆的解密方法用處越來越少。
對於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文件,這時候再運行應用軟件,軟件訪問加密狗的操作就全部會被攔截,攔截程序永遠會返回正確的數據給軟件,從而實現了模擬加密狗的運行。
以上是目前破解軟件加密狗(加密鎖)的壹些常見思路,對於這種破解,軟件開發者還是有相應的壹些對策的,下壹回我將在《軟件加密鎖編程技巧》壹文中具體介紹壹下軟件開發者將如何編寫安全可靠的代碼,使得這種類似的破解方法失效。