當時(shí)破解軟件加密狗(加密鎖)的一些(xiē)多(duō)見思路,對于這種破解,軟件開(kāi)發者仍是有(yǒu)相應的一些(xiē)對策的,下一回我将在《軟件加密鎖編程訣竅》一文中具體(tǐ)介紹一下軟件開(kāi)發者将怎麽編寫安全可(kě)靠的代碼,使得(de)這種類似的破解方法失效。
這篇文章介紹的是軟件加密狗破解的一般思路和(hé)方法。做(zuò)為(wèi)軟件開(kāi)發者,研巴結軟件加密的确很(hěn)首要,不過也很(hěn)有(yǒu)必要多(duō)了解一些(xiē)對于加密狗解密和(hé)破解的知識,加密和(hé)破解就像矛和(hé)盾一樣,對于解密知識了解的越多(duō),那(nà)麽編寫的加密代碼就越好,要知道(dào)加密耐久都比解密要簡略的多(duō),隻需知己知彼,方能攻無不克。
硬件加密鎖,俗程“加密狗”,對于加密狗的破解大(dà)緻可(kě)以分為(wèi)三種方法,一種是經過硬件克隆或許仿制(zhì),一種是經過SoftICE等Debug東西調試跟蹤解密,一種是經過編寫阻擋程序修正軟件和(hé)加密狗之間(jiān)的通(tōng)訊。
硬件克隆仿制(zhì)首要是對于國産芯片的加密狗,由于國産加密狗公司一般沒有(yǒu)基地加密芯片的制(zhì)作(zuò)才調,因此有(yǒu)些(xiē)運用了市場(chǎng)上(shàng)通(tōng)用的芯片,破解者分分出芯片電(diàn)路 以及芯片裏寫的內(nèi)容後,就可(kě)以馬上(shàng)仿制(zhì)或克隆一個(gè)完全一樣的加密狗。不過國外的加密狗就無法運用這種方法,國外加密狗硬件運用的是安全性極好的自己研制(zhì)開(kāi) 發的芯片,一般很(hěn)難進行(xíng)仿制(zhì),而且如今國內(nèi)加密狗也在運用進口的智能卡芯片,因此這種硬件克隆的解密方法用處越來(lái)越少(shǎo)。
對于Debug調試破解,由于軟件的雜亂度越來(lái)越高(gāo),編譯器(qì)發作(zuò)的代碼也不斷增加,經過反彙編等方法跟蹤調式破解的雜亂度現已變得(de)越來(lái)越高(gāo),破解本錢(qián)也越來(lái)越高(gāo),當時(shí)現已很(hěn)少(shǎo)有(yǒu)人(rén)甘心花(huā)費許多(duō)精力進行(xíng)如此雜亂的破解,除非被破解的軟件具有(yǒu)極高(gāo)的價值。
當時(shí)加密鎖(加密狗)的解密破解工作(zuò)首要會(huì)集在運用程序與加密動态庫之間(jiān)的通(tōng)訊阻擋。這種方法本錢(qián)較低(dī),也易于結束,對待以單片機等芯片為(wèi)基地的加密鎖(加密狗)具有(yǒu)不錯的解密效果。
由于加密鎖(加密狗)的運用程序接口(API)基本上(shàng)都是拆穿的,因此從網上(shàng)可(kě)以很(hěn)簡略下載到加密狗的編程接口API、用戶手冊、和(hé)其它有(yǒu)關資料,還(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)存單元,其間(jiān)56個(gè)可(kě)以被用戶運用,這些(xiē)單元中的每一個(gè)都可(kě)以被用為(wèi)三種類型之一:算(suàn)法、數(shù)據值和(hé)計(jì)數(shù)器(qì)。
數(shù)據值比較好了解,數(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)法有(yǒu)關時(shí),計(jì)數(shù)器(qì)為(wèi)零則會(huì)關閉(deactive)這個(gè)算(suàn)法。
算(suàn)法單元較難了解一些(xiē),算(suàn)法(algorithm)是這樣一種技(jì)術(shù),你(nǐ)用Query(queryData)函數(shù)訪問它,其間(jiān)queryData是查詢 值,上(shàng)述函數(shù)有(yǒu)一個(gè)回來(lái)值,被加密的程序知道(dào)一組這樣的查詢值/回來(lái)值對,在需要加密的本地,用上(shàng)述函數(shù)檢查狗的存在和(hé)真僞。對于被指定為(wèi)算(suàn)法的單元,軟 件上(shàng)是無法讀和(hé)修正的,即使你(nǐ)是合法的用戶也是如此,我了解這種技(jì)術(shù)除了增加程序雜亂性以外,首要是為(wèi)了抵禦運用仿照器(qì)技(jì)術(shù)的破解。
此加密鎖(加密狗)的全部API函數(shù)調用都會(huì)有(yǒu)回來(lái)值,回來(lái)值為(wèi)0的時(shí)分标明(míng)成功。
因此,破解思路就出來(lái)了,就是運用我們自己的東西(如VB、VC等)從頭編寫構造一個(gè)和(hé)加密狗API一樣的DLL動态庫文件,裏面也包含Read、 Write等全部API中包含的函數(shù),運用的參量及回來(lái)值和(hé)正本的函數(shù)一樣,全部函數(shù)回來(lái)零。然後對Query、Read函數(shù)進行(xíng)處理(lǐ),回來(lái)運用軟件需要 的數(shù)值即可(kě)。
這個(gè)新的DLL文件編寫成功後,直接替換掉正本的DLL文件,這時(shí)分再工作(zuò)運用軟件,軟件訪問加密狗的操作(zuò)就全部會(huì)被阻擋,阻擋程序耐久會(huì)回來(lái)精确的數(shù)據給軟件,然後結束了仿照加密狗的工作(zuò)。