一般對于做(zuò)為(wèi)軟件開(kāi)發者,研究好軟件加密的确很(hěn)重要,不過也很(hěn)有(yǒu)必要多(duō)了解一些(xiē)關于加密狗解密和(hé)破解的知識,加密和(hé)破解就像矛和(hé)盾一樣,對于解密知識了解的越多(duō),那(nà)麽編寫的加密代碼就越好,要知道(dào)加密永遠都比解密要容易的多(duō),隻有(yǒu)知己知彼,方能百戰百勝。
硬件加密鎖,俗程“加密狗”,對于加密狗的破解大(dà)緻可(kě)以分為(wèi)三種方法,一種是通(tōng)過硬件克隆或者複制(zhì),一種是通(tōng)過SoftICE等Debug工具調試跟蹤解密,一種是通(tōng)過編寫攔截程序修改軟件和(hé)加密狗之間(jiān)的通(tōng)訊。
硬件克隆複制(zhì)主要是針對國産芯片的加密狗,因為(wèi)國産加密狗公司一般沒有(yǒu)核心加密芯片的制(zhì)造能力,因此有(yǒu)些(xiē)使用了市場(chǎng)上(shàng)通(tōng)用的芯片,破解者分析出芯片電(diàn)路 以及芯片裏寫的內(nèi)容後,就可(kě)以立刻複制(zhì)或克隆一個(gè)完全相同的加密狗。不過國外的加密狗就無法使用這種方法,國外加密狗硬件使用的是安全性很(hěn)好的自己研制(zhì)開(kāi) 發的芯片,通(tōng)常很(hěn)難進行(xíng)複制(zhì),而且現在國內(nèi)加密狗也在使用進口的智能卡芯片,因此這種硬件克隆的解密方法用處越來(lái)越少(shǎo)。
對于Debug調試破解,由于軟件的複雜度越來(lái)越高(gāo),編譯器(qì)産生(shēng)的代碼也越來(lái)越多(duō),通(tōng)過反彙編等方法跟蹤調式破解的複雜度已經變得(de)越來(lái)越高(gāo),破解成本也越來(lái)越高(gāo),目前已經很(hěn)少(shǎo)有(yǒu)人(rén)願意花(huā)費大(dà)量精力進行(xíng)如此複雜的破解,除非被破解的軟件具有(yǒu)極高(gāo)的價值。
目前加密鎖(加密狗)的解密破解工作(zuò)主要集中在應用程序與加密動态庫之間(jiān)的通(tōng)訊攔截。這種方法成本較低(dī),也易于實現,對待以單片機等芯片為(wèi)核心的加密鎖(加密狗)具有(yǒu)不錯的解密效果。
由于加密鎖(加密狗)的應用程序接口(API)基本上(shàng)都是公開(kāi)的,因此從網上(shàng)可(kě)以很(hěn)容易下載到加密狗的編程接口API、用戶手冊、和(hé)其它相關資料,還(hái)可(kě)以了解加密狗技(jì)術(shù)的最新進展。
例如,某個(gè)國內(nèi)知名的美國加密狗提供商的一款很(hěn)有(yǒu)名的加密狗,其全部編程資料就可(kě)以從網上(shàng)獲取到,經過對這些(xiē)資料的分析,我們知道(dào)這個(gè)加密鎖(加密狗)有(yǒu)64個(gè)內(nèi)存單元,其中56個(gè)可(kě)以被用戶使用,這些(xiē)單元中的每一個(gè)都可(kě)以被用為(wèi)三種類型之一:算(suàn)法、數(shù)據值和(hé)計(jì)數(shù)器(qì)。
數(shù)據值比較好理(lǐ)解,數(shù)據值是用戶存儲在可(kě)讀寫的單元中的數(shù)據,就和(hé)存儲在硬盤裏一樣,用戶可(kě)以使用Read函數(shù)讀出存儲單元裏面的數(shù)據,也可(kě)以使用Write函數(shù)保存自己的信息到存儲單元。
計(jì)數(shù)器(qì)是這樣一種單元,軟件開(kāi)發商在其軟件中使用Decrement函數(shù)可(kě)以把其值減一,當計(jì)數(shù)器(qì)和(hé)某種活動的(active)算(suàn)法關聯時(shí),計(jì)數(shù)器(qì)為(wèi)零則會(huì)封閉(deactive)這個(gè)算(suàn)法。
算(suàn)法單元較難理(lǐ)解一些(xiē),算(suàn)法(algorithm)是這樣一種技(jì)術(shù),你(nǐ)用Query(queryData)函數(shù)訪問它,其中queryData是查詢 值,上(shàng)述函數(shù)有(yǒu)一個(gè)返回值,被加密的程序知道(dào)一組這樣的查詢值/返回值對,在需要加密的地方,用上(shàng)述函數(shù)檢查狗的存在和(hé)真僞。對于被指定為(wèi)算(suàn)法的單元,軟 件上(shàng)是無法讀和(hé)修改的,即使你(nǐ)是合法的用戶也是如此,我理(lǐ)解這種技(jì)術(shù)除了增加程序複雜性以外,主要是為(wèi)了對付使用模拟器(qì)技(jì)術(shù)的破解。
此加密鎖(加密狗)的所有(yǒu)API函數(shù)調用都會(huì)有(yǒu)返回值,返回值為(wèi)0的時(shí)候表示成功。
因此,破解思路就出來(lái)了,就是使用我們自己的工具(如VB、VC等)重新編寫構造一個(gè)和(hé)加密狗API一樣的DLL動态庫文件,裏面也包含Read、 Write等全部API中包含的函數(shù),使用的參量及返回值和(hé)原來(lái)的函數(shù)一樣,所有(yǒu)函數(shù)返回零。然後對Query、Read函數(shù)進行(xíng)處理(lǐ),返回應用軟件需要 的數(shù)值即可(kě)。
這個(gè)新的DLL文件編寫成功後,直接替換掉原來(lái)的DLL文件,這時(shí)候再運行(xíng)應用軟件,軟件訪問加密狗的操作(zuò)就全部會(huì)被攔截,攔截程序永遠會(huì)返回正确的數(shù)據給軟件,從而實現了模拟加密狗的運行(xíng)。