專利名稱:一種虛擬軟件狗加密方法
技術(shù)領(lǐng)域:
本發(fā)明屬于信息安全領(lǐng)域中安全加密方法,具體地講是一種虛擬軟件狗加密方法。
背景技術(shù):
由于計(jì)算機(jī)軟件是一種特殊的商品,極易復(fù)制,所以加密就成了保護(hù)軟件的一種必要手段。依據(jù)加密原理和方式,目前廠商所采用的加密方法主要可分為兩大類軟加密和硬加密。所謂軟加密是不依靠特別硬件來實(shí)現(xiàn)對軟件保護(hù)的技術(shù),它的最大優(yōu)勢在于極低的加密成本,適合于小商品軟件,有較大的市場;硬加密就是依賴特定的硬件,通過硬件和軟件結(jié)合的方式來實(shí)現(xiàn)對軟件的保護(hù),加密后軟件執(zhí)行時(shí)需訪問相應(yīng)的硬件,硬加密安全性強(qiáng)但成本高。
目前市場上常采用的軟加密方法有密碼方式系統(tǒng)在軟件執(zhí)行過程中在一些重要地方詢問密碼,用戶須依照密碼表輸入密碼,程序才能繼續(xù)執(zhí)行。這種方式的優(yōu)點(diǎn)是實(shí)現(xiàn)簡單,幾乎不必投入成本,但存在破壞正常的人機(jī)對話、密碼和加密點(diǎn)相對固定等缺陷,因此主要用于價(jià)格較低的軟件,如游戲軟件等。
軟件自校驗(yàn)方式開發(fā)商將軟件裝入用戶硬盤時(shí),安裝程序會(huì)自動(dòng)記錄計(jì)算機(jī)硬件的奇偶校驗(yàn)和軟件安裝的磁道位置等信息,或者在硬盤的特殊磁道、CMOS中做一定標(biāo)記,并自動(dòng)改寫被安裝程序,此后軟件執(zhí)行時(shí)就會(huì)校驗(yàn)這些安裝時(shí)記錄的信息或標(biāo)記。如果軟件被用戶拷貝到另外的計(jì)算機(jī)上,由于運(yùn)行環(huán)境已經(jīng)改變,軟件將不能正常執(zhí)行。使用這種方式可使用戶在正常使用軟件時(shí)感覺不到加密的存在,且系統(tǒng)相對比較可靠,已為許多軟件開發(fā)商所采用。但這種加密方式也存在著一定缺陷,如用戶增減或更換計(jì)算機(jī)硬件、壓縮硬盤或出現(xiàn)CMOS掉電等情況都會(huì)造成軟件不能正常執(zhí)行,需要重新安裝軟件,過程繁瑣。
鑰匙盤方式在軟盤的特殊磁道寫入一定信息以便運(yùn)行時(shí)校驗(yàn)。這種軟盤就好像一把鑰匙一樣,所以被人習(xí)慣稱為鑰匙盤。此種方式的加密簡便可靠,成本也低,但用戶執(zhí)行軟件時(shí)軟盤驅(qū)動(dòng)器被占用,會(huì)給用戶利用軟盤存取數(shù)據(jù)造成不便,而且軟盤是一種消耗品,很容易因折傷、劃傷、磁化、冷熱等原因造成損壞。
光盤狗只針對光盤軟件的軟加密技術(shù)。它通過識(shí)別光盤上的特征來區(qū)分是原版盤還是盜版盤。該特征是在光盤壓制生產(chǎn)時(shí)自然產(chǎn)生的,即由同一張母盤壓出的光盤特征相同,而不同的母盤壓制出的光盤即便盤上內(nèi)容完全一樣,盤上的特征也不一樣。這種特征是在盜版者翻制光盤過程中無法提取和復(fù)制的。普通的光盤加密技術(shù),通常要制作特殊的母盤,進(jìn)而改動(dòng)母盤機(jī),既需要額外花費(fèi),又耽誤了軟件的上市時(shí)間。而光盤狗技術(shù)不在母盤制造上動(dòng)手腳,使得開發(fā)商可以自由選擇光盤廠來壓制光盤。光盤狗技術(shù)的低成本和較好的加密強(qiáng)度己經(jīng)引起更多低價(jià)位軟件廠商的興趣,并在很多已經(jīng)上市的軟件中得到了廣泛的應(yīng)用。
但不是所有的軟件都可以采用低價(jià)格、高銷量來收回成本的。硬加密正是保證高檔軟件在市場生命周期中免受盜版侵害的一種功能強(qiáng)大的工具。
目前市場上常采用的硬加密方法有加密卡風(fēng)行于90年代初,加密卡的好處是由于加密卡上面不僅僅可以存放數(shù)據(jù),而且可以用硬件實(shí)現(xiàn)簡單的算法,在軟件的執(zhí)行過程中可以隨時(shí)訪問加密卡,不會(huì)對軟件運(yùn)行的速度帶來太多的影響。由于加密卡是與計(jì)算機(jī)的總線交換數(shù)據(jù),數(shù)據(jù)通訊協(xié)議完全由卡的廠家制定,沒有統(tǒng)一的標(biāo)準(zhǔn)接口,讓軟件解密者有無從下手的感覺。北大方正早期的印刷軟件都是采用這種方法來加密的,但這種加密方案需要打開計(jì)算機(jī)的機(jī)箱,占用擴(kuò)展槽,一般還需要專門的人員來安裝。另外,由于加密卡設(shè)計(jì)上的某些問題,很容易同現(xiàn)有的硬件發(fā)生沖突。考慮到成本,加密卡必須要批量生產(chǎn),廠商一般不會(huì)對低價(jià)值的軟件一下投入這么大的資金。由于種種問題,這種加密技術(shù)現(xiàn)在已經(jīng)難得一見了。
加密鎖(加密狗、軟件狗)是為軟件開發(fā)商提供的一種智能型的軟件加密工具,它包含一個(gè)安裝在計(jì)算機(jī)并行口或USB口上的硬件,及一套適用于各種語言的接口軟件和工具軟件。加密鎖的內(nèi)部硬件電路就是軟件的“指紋”,在出售軟件時(shí),將與軟件內(nèi)部“指紋”相一致的加密鎖交給用戶。用戶在使用軟件時(shí),必須把加密鎖連接到微機(jī)的并口或USB口上,軟件執(zhí)行程序向插在計(jì)算機(jī)上的加密鎖發(fā)出查詢命令,加密鎖迅速計(jì)算、查詢并給出響應(yīng),正確的響應(yīng)才能保證軟件繼續(xù)運(yùn)行。如果沒有安裝加密鎖或者加密鎖內(nèi)部的“指紋”不匹配,則軟件不能運(yùn)行,以此來達(dá)到保護(hù)軟件的目的。
目前市場上的加密鎖分成四代產(chǎn)品,這四代加密鎖代表了加密鎖的發(fā)展過程,也從另一個(gè)側(cè)面反映出解密思想的變化。
第一代是存儲(chǔ)器型的加密鎖。這是最有歷史的加密鎖,內(nèi)部只有存儲(chǔ)體,廠商只能對鎖進(jìn)行讀、寫。常見的有原金天地的“軟件狗”、深思洛克的Keypro型加密鎖、Rainbow的Cplus等。這種加密鎖的主要特點(diǎn)是廠商可以預(yù)先把自己的保密數(shù)據(jù)設(shè)置到加密鎖內(nèi),然后在軟件運(yùn)行時(shí)隨機(jī)讀取,這樣防止了解密者通過簡單重復(fù)并口數(shù)據(jù)來解密,但解密者進(jìn)一步分析一下數(shù)據(jù)規(guī)律就可以解秘,這就是常說的“端口”層的數(shù)據(jù)分析。這種加密鎖原理非常簡單,是正在被逐步淘汰的產(chǎn)品,但其成本極低,即使在很低的價(jià)位也有很好的利潤,加密廠商一般都不愿放棄這種加密鎖;同時(shí)很多軟件開發(fā)商由于成本原因又不得不采用,因此這種加密鎖仍有一定的市場份額。
第二代是算法不公開的加密鎖。硬件內(nèi)部增加了單片機(jī),即所謂內(nèi)置CPU,廠商主要是利用算法功能進(jìn)行加密。加密鎖通常還增加了一些輔助功能,比如倒計(jì)數(shù)器、遠(yuǎn)程升級(jí)等。常見的有深思洛克的“深思I”型,彩虹天地公司的SuperPro、微狗,阿拉丁公司的MemoHASP等。利用單片機(jī),軟件與加密鎖之間的數(shù)據(jù)通訊建立一個(gè)保密協(xié)議,數(shù)據(jù)都是經(jīng)過加密的,解密者就難以分析出數(shù)據(jù)內(nèi)容和規(guī)律了,因此對于這種加密鎖的數(shù)據(jù)分析就不是停留在“端口”層了,解密者轉(zhuǎn)向了“功能”層,就是對軟件中的函數(shù)調(diào)用進(jìn)行分析。為了抵擋功能層的數(shù)據(jù)分析,這種加密鎖采用“軟硬”兼施的策略。“軟”的是指驅(qū)動(dòng)程序內(nèi)的反跟蹤、外殼加密等軟件工作,讓解密者難以在功能層上捕捉到數(shù)據(jù)或者捉到了也無法仿真,這項(xiàng)技術(shù)的關(guān)鍵是根據(jù)對操作系統(tǒng)、微機(jī)系統(tǒng)的精確理解而不斷研制出更新的加密驅(qū)動(dòng)程序;“硬”的就是加密鎖內(nèi)的算法功能,解密者無法求解算法方程,也無法窮舉算法變換,這大大增加了解密難度,這是掌握在加密者手中的武器。但是,加密者只能設(shè)置算法的參數(shù),即所謂內(nèi)含多少種算法可選,而算法內(nèi)容并不知道。這樣就限制了廠商對算法的使用,要么預(yù)先記錄算法結(jié)果然后在軟件運(yùn)行時(shí)核對(使用碼表);要么在軟件中至少變換兩次然后比較結(jié)果是否一致。如果解密者截獲這些數(shù)據(jù),通過統(tǒng)計(jì)、分析就有可能達(dá)到解密目的。
第三代加密鎖,即所謂“可編程”的加密鎖,1999年初,由北京深思洛克為代表推出?!翱删幊獭奔用苕i概念的推出是軟件加密技術(shù)的一次進(jìn)步?!翱删幊獭奔用苕i設(shè)計(jì)初衷是希望用戶能夠?qū)④浖兄匾拇a或模塊“移植”到加密保護(hù)設(shè)備中運(yùn)行,使軟件與加密鎖實(shí)現(xiàn)真正的無縫鏈接。但由于成本限制,早期推出的幾款“可編程”加密鎖采用的低檔單片機(jī)給“可編程”性造成了很大的局限,主要表現(xiàn)在算法變換的復(fù)雜度不夠高,指令編碼空間較小,程序區(qū)的空間較小。這些局限性使得用戶根本不可能利用“可編程”加密鎖實(shí)現(xiàn)理想的高強(qiáng)度加密方案。
第四代加密鎖是新推出的智能型加密鎖。2002年,中國的軟件保護(hù)行業(yè)迎來了一次較高層次的技術(shù)升級(jí)。國內(nèi)軟件保護(hù)行業(yè)的傳統(tǒng)兩強(qiáng)企業(yè)美國彩虹天地和北京深思洛克先后推出了以智能卡(Smart Card)技術(shù)為核心構(gòu)建的新一代的軟件加密保護(hù)系統(tǒng)。它在硬件上采用單片機(jī)芯片存儲(chǔ)特定的算法程序,通過計(jì)算機(jī)接口對軟件發(fā)出的密鑰數(shù)據(jù)進(jìn)行加密變換,以對抗邏輯分析儀。在軟件上采取數(shù)據(jù)交換隨機(jī)噪聲技術(shù)、迷宮技術(shù)、As技術(shù)、算法植入技術(shù)等,有效地干擾各種靜態(tài)和動(dòng)態(tài)的分析。智能卡技術(shù)具有極高的安全性且功能強(qiáng)大,因此廣泛應(yīng)用于金融、軍隊(duì)、網(wǎng)絡(luò)身份認(rèn)證等對安全性、穩(wěn)定性要求極高的領(lǐng)域。這次技術(shù)升級(jí)的標(biāo)志性產(chǎn)品是深思洛克的深思IV型加密鎖和美國彩虹天地公司的智能狗,它們實(shí)現(xiàn)了真正意義上的用戶“可編程”。這兩款產(chǎn)品支持軟件廠商將復(fù)雜的算法“移植到加密鎖內(nèi)運(yùn)算,軟件中不再有該算法的副本。由于加密鎖內(nèi)可能是任意的數(shù)學(xué)方程,理論上沒有確定解法,加密強(qiáng)度由廠家控制,幾乎是沒有限制的。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于動(dòng)態(tài)鏈接庫DLL文件的,幾乎無成本的虛擬軟件狗(DLL文件)可以取代軟件狗來控制軟件主體的運(yùn)行,同時(shí)實(shí)現(xiàn)軟件狗的基本功能的虛擬軟件狗加密方法,以克服上述的不足。
所謂動(dòng)態(tài)鏈接庫(Dynamic-Link Libraries,簡稱DLL),DLL是基于Windows的程序模塊,簡單地說就是一個(gè)可執(zhí)行的模塊(其擴(kuò)展名為.DLL,是一個(gè)包含函數(shù)的庫文件),模塊中包含了可以被其它應(yīng)用程序或其它DLL使用的例程和資源。程序員在編程時(shí)可將其放入自己的程序,然后在程序中便可調(diào)用DLL的函數(shù)了。所謂“動(dòng)態(tài)鏈接”指在生成EXE文件時(shí),并沒有將DLL文件直接包含到程序中,而是當(dāng)程序執(zhí)行時(shí)才進(jìn)行鏈接。一般來說,DLL(動(dòng)態(tài)鏈接庫)是由全局?jǐn)?shù)據(jù)、服務(wù)函數(shù)和資源組成,在運(yùn)行時(shí)被系統(tǒng)加載到進(jìn)程的虛擬空間中,成為調(diào)用進(jìn)程的一部分。函數(shù)的可執(zhí)行代碼位于一個(gè)DLL中,該DLL包含一個(gè)或多個(gè)已被編譯、鏈接并與使用它們的進(jìn)程分開存儲(chǔ)的函數(shù)。DLL中定義有兩種函數(shù)導(dǎo)出函數(shù)(export function)和內(nèi)部函數(shù)(internal function)。導(dǎo)出函數(shù)可以被其它模塊調(diào)用,用于向外界提供服務(wù),內(nèi)部函數(shù)在定義它們的DLL程序內(nèi)部使用。DLL具有節(jié)省內(nèi)存,減少交換操作,節(jié)省磁盤空間,易于升級(jí),提供擴(kuò)展MFC庫類的機(jī)制,支持多語言程序等眾多優(yōu)點(diǎn)。因此,硬件廠商大多提供DLL庫的支持。跟一般的可執(zhí)行程序(擴(kuò)展名為.EXE)不同的是,DLL沒有通常的主程序,因而不能直接運(yùn)行,但它有多個(gè)入口。DLL具有如下特點(diǎn)DLL的編制與具體的編程語言及編譯器無關(guān),只要遵守其開發(fā)規(guī)范并安排正確的調(diào)用接口,無論使用何種語言編制的DLL都具有通用性;使用DLL不是將其庫代碼拷貝,而只在程序中記錄函數(shù)的入口點(diǎn)和接口,程序執(zhí)行時(shí)才將代碼載入內(nèi)存。多個(gè)程序使用相同的DLL時(shí),內(nèi)存中只需裝載一次,可以高效經(jīng)濟(jì)地使用內(nèi)存;DLL不僅包含可執(zhí)行代碼,還可以包含數(shù)據(jù)和各種資源,擴(kuò)大了庫文件的使用范圍;DLL中封裝了一些可以被共享的資源,是Windows最重要的組成要素和WindowsAPI函數(shù)的封裝形式,Windows最基本的3大組成模塊Kernel,GDI和User都是.dll文件,他的許多新功能也是通過DLL來實(shí)現(xiàn)的。DLL文件是一種可執(zhí)行文件,它允許程序共享執(zhí)行特殊任務(wù)所必需的代碼和其他資源。Windows提供的DLL文件中包含了允許基于Windows的程序在Windows環(huán)境下操作的許多函數(shù)和資源。DLL多數(shù)情況下是帶有DLL擴(kuò)展名的文件,但也可能是EXE或其他擴(kuò)展名。它們向運(yùn)行于Windows操作系統(tǒng)下的程序提供代碼、數(shù)據(jù)或函數(shù)。程序可根據(jù)DLL文件中的指令打開、啟用、查詢、禁用和關(guān)閉驅(qū)動(dòng)程序。
為了實(shí)現(xiàn)上述目的,本發(fā)明所采用的方案是用C++編制采集用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息的文件ReadSerialPro.exe,ReadSerialPro.exe將讀取用戶本地計(jì)算機(jī)的信息,并自動(dòng)生成文件DASC.KEY,將DASC.KEY發(fā)送給軟件研制者;軟件研制者根據(jù)用戶發(fā)送過來的DASC.KEY,通過若干算法和程序制作虛擬軟件狗Coderead.DLL文件,并返回給用戶;用戶使用接收到的Coderead.DLL文件覆蓋原Coderead.DLL文件,軟件主體便可正常運(yùn)行。
本發(fā)明是一種基于動(dòng)態(tài)鏈接庫(DLL)文件的加密方法,DLL文件主要是通過模仿實(shí)際軟件狗對軟件主體運(yùn)行的控制來仿真軟件狗的。密鑰、算法以及軟件主體中的一些關(guān)鍵公用程序都內(nèi)置于DLL中,軟件主體運(yùn)行時(shí)必須讀DLL文件,且DLL文件不可復(fù)制,離開本地機(jī)無法使用。因而DLL文件具有類似軟件狗的功能,可以取代軟件狗,達(dá)到對軟件進(jìn)行加密的目的,起到虛擬軟件狗的作用。
本發(fā)明有益效果是(1)相對于軟件狗(軟件狗的硬件組成包括電源轉(zhuǎn)換芯片、數(shù)據(jù)通信接口芯片、可編程器件、存儲(chǔ)器芯片;軟件包括提供給用戶的接口)而言,我們的虛擬軟件狗DLL文件可以仿真其基本功能(存放一些加密、解密操作所必須的重要的東西,并與軟件主體進(jìn)行通信),并且制作便利,成本低,不占用機(jī)器硬件資源,易于推廣。
(2)由于虛擬軟件狗中采用了先進(jìn)的偽隨機(jī)數(shù)生成技術(shù)以及隨機(jī)混沌加密技術(shù),因而加密強(qiáng)度高,效果好,破解困難。
(3)與市面上流行的軟件狗相比,由于無需訪問并行接口或USB接口,虛擬軟件狗與軟件主體在同一個(gè)文件夾下,因而運(yùn)行速度快。
圖1為本發(fā)明的原理框圖。
圖2為本發(fā)明工作過程圖。
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的描述,但下述實(shí)施例不應(yīng)理解為對本發(fā)明的限制。
本發(fā)明虛擬軟件狗加密方法是一種基于動(dòng)態(tài)鏈接庫(DLL)文件的加密方法,將軟件主體中的一些關(guān)鍵公用程序放入虛擬軟件狗中,使得軟件狗絕對不能被棄之不用。虛擬軟件狗與軟件主體工作時(shí)都需要讀取用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息,其中虛擬軟件狗中內(nèi)置的巨量信息被切割、加密轉(zhuǎn)換、散置于一個(gè)充分大的數(shù)組之中,準(zhǔn)確找到這些內(nèi)置信息的工作難度和強(qiáng)度自是不可想象。虛擬軟件狗與軟件主體之間的口令交流是動(dòng)態(tài)的,周期近乎天文數(shù)字,所以要破譯動(dòng)態(tài)口令幾乎成為不可能。
本發(fā)明利用用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息進(jìn)行識(shí)別軟件運(yùn)行者,用戶本地計(jì)算機(jī)信息主要包括機(jī)器指紋信息。所謂機(jī)器指紋,是指與計(jì)算機(jī)的硬件有關(guān)的不能復(fù)制的信息,這些信息通常包括CPU的序列號(hào)、硬盤的序列號(hào)和網(wǎng)卡的MAC地址等。不同的機(jī)器有不同的指紋,即使是同一廠家生產(chǎn)的同一批次同一配置的計(jì)算機(jī),因而機(jī)器指紋可以起到唯一標(biāo)識(shí)計(jì)算機(jī)的作用。
本發(fā)明用C++編制采集用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息的文件ReadSerialPro.exe,點(diǎn)擊ReadSerialPro.exe,將讀取用戶本地計(jì)算機(jī)的信息(這些信息包括計(jì)算機(jī)名、用戶名、CPU類型、CPU修訂號(hào)、硬盤序列號(hào)、且具有唯一性)和軟件序列號(hào)信息,并自動(dòng)生成文件DASC.KEY。根據(jù)生成的DASC.KEY文件,通過若干算法和程序制作虛擬軟件狗Coderead.DLL文件。其具體過程大致是①加密程序打開含有用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息的文件DASC.KEY,將信息切割、加密轉(zhuǎn)換、散置于一個(gè)充分大的頭文件jiami.h中。
②解密程序打開jiami.h,進(jìn)行解密,收集原始信息。
③密碼參數(shù)生成程序從計(jì)算機(jī)讀取時(shí)鐘信息,結(jié)合原始信息生成偽隨機(jī)數(shù)種子等參數(shù)。
④密碼生成程序根據(jù)密碼參數(shù)生成周期不斷擴(kuò)展的偽隨機(jī)數(shù)序列,即動(dòng)態(tài)口令。
⑤內(nèi)控程序?qū)㈥P(guān)鍵函數(shù)和if語句綁定在一起,防止反編譯。
在實(shí)際應(yīng)用中①將軟件主體中的一些關(guān)鍵公用程序放入虛擬軟件狗中,使得虛擬軟件狗絕對不能被棄之不用。
②將用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息切割、加密轉(zhuǎn)換、散置于一個(gè)充分大的數(shù)組之中,并將其內(nèi)置于虛擬軟件狗內(nèi),準(zhǔn)確找到這些內(nèi)置信息的工作難度和強(qiáng)度自是不可想象。
③在虛擬軟件狗內(nèi)編制的偽隨機(jī)數(shù)發(fā)生器,可生成周期不斷擴(kuò)展的偽隨機(jī)數(shù)序列,其周期近乎天文數(shù)字,所以要破譯動(dòng)態(tài)口令幾乎成為不可能;④內(nèi)控程序?qū)㈥P(guān)鍵函數(shù)和if語句綁定在一起,可有效防止反編譯。
本發(fā)明中虛擬軟件狗實(shí)質(zhì)是動(dòng)態(tài)鏈接庫(DLL)文件,通過模仿實(shí)際軟件狗對軟件主體運(yùn)行的控制來仿真軟件狗的。DLL文件可向運(yùn)行于Windows操作系統(tǒng)下的程序提供代碼、數(shù)據(jù)或函數(shù)。程序可根據(jù)DLL文件中的指令打開、啟用、查詢、禁用和關(guān)閉驅(qū)動(dòng)程序。Windows將遵循下面的搜索順序來定位DLL包含EXE文件的目錄、進(jìn)程的當(dāng)前工作目錄、Windows系統(tǒng)目錄、Windows目錄、列在Path環(huán)境變量中的一系列目錄。
如圖1所示用戶點(diǎn)擊ReadSerialPro.exe文件(讀取用戶的計(jì)算機(jī)信息)后,自動(dòng)生成文件DASC.KEY(包含用戶的計(jì)算機(jī)信息),并將DASC.KEY發(fā)送給軟件研制者;軟件研制者根據(jù)用戶發(fā)送過來的DASC.KEY,制作虛擬軟件狗Coderead.DLL文件,并返回給用戶;用戶使用接收到的Coderead.DLL文件覆蓋原Coderead.DLL文件,軟件主體便可正常運(yùn)行。
如圖2所示,其中,軟件主體主要由必要程序、加密點(diǎn)、口令組成,虛擬軟件狗主要由關(guān)鍵程序、預(yù)置信息、口令組成。軟件主體中的口令是使用偽隨機(jī)數(shù)發(fā)生器并結(jié)合計(jì)算機(jī)時(shí)鐘信息,計(jì)算機(jī)信息生成;虛擬軟件狗中的口令是使用相同的偽隨機(jī)數(shù)發(fā)生器并結(jié)合計(jì)算機(jī)時(shí)鐘信息,虛擬軟件狗中的預(yù)置信息生成。加密點(diǎn)由加密函數(shù)設(shè)定。預(yù)置信息是用戶本地計(jì)算機(jī)信息經(jīng)過加密算法和密鑰加密而得。其工作過程描述如下軟件主體在每次運(yùn)行前都要先被指向一段加密代碼(即加密點(diǎn)函數(shù))中,執(zhí)行后讀取虛擬軟件狗,將虛擬軟件狗中的動(dòng)態(tài)口令與軟件主體中的動(dòng)態(tài)口令進(jìn)行比較,若兩者相等,則虛擬軟件狗與軟件主體動(dòng)態(tài)同步,該用戶是合法的,軟件主體從虛擬軟件狗中獲取必要程序,軟件正常工作;若兩者不相等,則該用戶不是合法的,軟件的執(zhí)行受到限制,立即中止退出。
本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。
權(quán)利要求
1.一種虛擬軟件狗加密方法,所采用的方案是用計(jì)算機(jī)語言編制采集用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息的文件ReadSerialPro.exe,ReadSerialPro.exe讀取用戶本地計(jì)算機(jī)的信息和軟件序列號(hào)信息,生成文件DASC.KEY,并將DASC.KEY發(fā)送給軟件研制者,軟件研制者根據(jù)用戶發(fā)送過來的DASC.KEY,制作虛擬軟件狗Coderead.DLL文件,并返回給用戶,用戶使用接收到的Coderead.DLL文件覆蓋原Coderead.DLL文件,軟件主體便可正常運(yùn)行。
2.如權(quán)利要求1所述的虛擬軟件狗加密方法,其具體過程是①利用軟件自帶的信息采集文件ReadSerialPro.exe采集用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息,生成文件DASC.KEY;②加密程序打開含有用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息的文件DASC.KEY,將信息切割、加密轉(zhuǎn)換、散置于一個(gè)充分大的頭文件jiami.h中;③解密程序打開jiami.h,進(jìn)行解密,收集原始信息;④密碼參數(shù)生成程序從計(jì)算機(jī)讀取時(shí)鐘信息,結(jié)合原始信息生成偽隨機(jī)數(shù)種子等參數(shù);⑤密碼生成程序根據(jù)密碼參數(shù)生成周期不斷擴(kuò)展的偽隨機(jī)數(shù)序列,即動(dòng)態(tài)口令;⑥內(nèi)控程序?qū)㈥P(guān)鍵函數(shù)和if語句綁定在一起,防止反編譯。
3.如權(quán)利要求1或2所述的虛擬軟件狗加密方法,其特征在于①將軟件主體中的一些關(guān)鍵公用程序放入虛擬軟件狗中,使得虛擬軟件狗絕對不能被棄之不用;②將用戶本地計(jì)算機(jī)信息和軟件序列號(hào)信息切割、加密轉(zhuǎn)換、散置于一個(gè)充分大的數(shù)組之中,并將其內(nèi)置于虛擬軟件狗內(nèi),準(zhǔn)確找到這些內(nèi)置信息的工作難度和強(qiáng)度自是不可想象;③在虛擬軟件狗內(nèi)編制的偽隨機(jī)數(shù)發(fā)生器,可生成周期不斷擴(kuò)展的偽隨機(jī)數(shù)序列,其周期近乎天文數(shù)字,所以要破譯動(dòng)態(tài)口令幾乎成為不可能;④內(nèi)控程序?qū)㈥P(guān)鍵函數(shù)和if語句綁定在一起,可有效防止反編譯。
全文摘要
本發(fā)明涉及一種虛擬軟件狗加密方法,采用的方案是編制采集用戶本地計(jì)算機(jī)信息的文件ReadSerialPro.exe,ReadSerialPro.exe讀取用戶本地計(jì)算機(jī)的信息,并自動(dòng)生成文件DASC. KEY,并將DASC.KEY發(fā)送給軟件研制者,軟件研制者根據(jù)用戶發(fā)送過來的DASC.KEY,制作虛擬軟件狗Coderead.DLL文件,并返回給用戶,用戶使用接收到的Coderead.DLL文件覆蓋原Coderead.DLL文件,軟件主體便可正常運(yùn)行。本發(fā)明是一種基于動(dòng)態(tài)鏈接庫(DLL)文件的加密方法,DLL文件主要是通過模仿實(shí)際軟件狗對軟件主體運(yùn)行的控制來仿真軟件狗的,DLL文件具有類似軟件狗的功能,可以取代軟件狗,達(dá)到對軟件進(jìn)行加密的目的,起到虛擬軟件狗的作用。
文檔編號(hào)G06F9/44GK1749906SQ20051001968
公開日2006年3月22日 申請日期2005年10月28日 優(yōu)先權(quán)日2005年10月28日
發(fā)明者童恒慶, 熊麗 申請人:武漢理工大學(xué)