專利名稱:一種提高軟件保護(hù)安全性的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于軟件保護(hù)裝置及軟件保護(hù)技術(shù),特別涉及通過在軟件保護(hù)裝置中實(shí)現(xiàn)指令代碼字典庫的一種提高軟件保護(hù)安全性的方法及裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,外殼程序是軟件保護(hù)的一種快速、簡(jiǎn)單的保護(hù)方案,它不像使用接口函數(shù)需要對(duì)源代碼進(jìn)行改動(dòng),而是自動(dòng)給可執(zhí)行應(yīng)用程序加了一個(gè)保護(hù)層。并且這些外殼都具有專門的反跟蹤、反調(diào)試的功能。應(yīng)用外殼加密時(shí),在程序開始運(yùn)行和運(yùn)行當(dāng)中會(huì)自動(dòng)地訪問軟件保護(hù)裝置是否存在。假如軟件保護(hù)裝置不存在,應(yīng)用程序?qū)⒉荒苓\(yùn)行。所以,很多軟件開發(fā)商采用外殼程序?qū)ζ滠浖M(jìn)行加密。但是,隨著各種外殼程序的出現(xiàn),通用的解外殼工具也出現(xiàn)了,這些工具并不針對(duì)某種特別的外殼程序,但能夠采用某種特別的方法脫掉大部分外殼加密程序的殼,從而給外殼程序加密帶來了安全隱患,不能確保被保護(hù)軟件的安全性。
現(xiàn)有的應(yīng)用軟件保護(hù)裝置保護(hù)軟件的原理是將軟件中的核心程序?qū)懭胲浖Wo(hù)裝置,并且不在主機(jī)上保留這一部分程序的副本。但現(xiàn)有的軟件保護(hù)裝置在將這一部分程序?qū)懭胲浖Wo(hù)裝置時(shí),需將該程序的源代碼在特定開發(fā)環(huán)境下編譯成軟件保護(hù)裝置能夠運(yùn)行的指令文件,才能將文件寫入到軟件保護(hù)裝置,這一過程需要開發(fā)人員對(duì)程序進(jìn)行多次改寫,花費(fèi)時(shí)間較長(zhǎng)且過程繁瑣。
軟件保護(hù)裝置是一種帶有處理器和存儲(chǔ)器的小型硬件裝置,它可通過計(jì)算機(jī)的數(shù)據(jù)通訊接口與計(jì)算機(jī)連接??深A(yù)置加密算法,且相關(guān)的運(yùn)算完全在裝置內(nèi)部運(yùn)行,具有抗攻擊的特性,安全性極高,加密鎖是軟件保護(hù)裝置的一種。
在現(xiàn)有技術(shù)中,指令的基本格式為地址碼和操作碼兩個(gè)部分。地址碼,表明操作數(shù)的地址,其位數(shù)決定了直接能訪問的內(nèi)存空間。常見的地址結(jié)構(gòu)格式四、三、二、一、零地址指令。操作碼表明指令應(yīng)該進(jìn)行什么性質(zhì)的操作,所以操作碼的位數(shù)決定了系統(tǒng)中指令的多少,常見的操作碼格式有定長(zhǎng)操作碼和擴(kuò)展操作碼。
發(fā)明內(nèi)容
鑒于現(xiàn)有技術(shù)在采用外殼程序加密和原有軟件保護(hù)裝置保護(hù)軟件時(shí),給軟件安全性帶來的威脅以及保護(hù)過程的繁瑣。因此本發(fā)明的目的是提供了一種提高軟件保護(hù)安全性的方法及裝置,所述提高軟件保護(hù)安全性的方法包括以下兩個(gè)過程a,處理被保護(hù)軟件;b,執(zhí)行被保護(hù)軟件;所述處理被保護(hù)軟件的過程包括如下內(nèi)容1)查閱所述被保護(hù)軟件和指令代碼字典庫;2)刪除所述被保護(hù)軟件與所述指令代碼字典庫中操作碼相同的指令代碼;3)在被保護(hù)軟件中寫入與軟件保護(hù)裝置通訊的通訊指令。
所述執(zhí)行被保護(hù)軟件的過程包括如下具體內(nèi)容1)執(zhí)行所述被保護(hù)軟件;2)執(zhí)行通訊指令,訪問所述軟件保護(hù)裝置,執(zhí)行指定操作,返回結(jié)果;3)繼續(xù)執(zhí)行所述被保護(hù)軟件。
所述處理被保護(hù)軟件的步驟2)還可以包括將所述指令代碼寫入軟件保護(hù)裝置。
所述指令代碼字典庫是包含被保護(hù)軟件所用指令集的指令代碼和軟件保護(hù)裝置所能執(zhí)行的本地指令代碼的相關(guān)集合;所述指令代碼字典庫還包括索引。
所述指令代碼字典庫中的被保護(hù)軟件所用指令集的指令代碼為編寫程序時(shí)常用的指令代碼且該指令集是不斷更新的。
所述處理被保護(hù)軟件具體為1)查閱被保護(hù)軟件和軟件保護(hù)裝置指令代碼字典庫;2)找到被保護(hù)軟件中與軟件保護(hù)裝置指令代碼字典庫中操作碼相同的指令代碼;3)將被保護(hù)軟件中找到的與軟件保護(hù)裝置指令代碼字典庫中操作碼相同的指令代碼刪除;
4)在被保護(hù)軟件中寫入與軟件保護(hù)裝置通訊的通訊指令。
所述軟件保護(hù)裝置中預(yù)置了指令代碼字典庫。
所述每個(gè)軟件保護(hù)裝置內(nèi)部已設(shè)置的本地指令代碼的順序是一致的,根據(jù)不同的保護(hù)需要,所述本地指令代碼可以設(shè)置不同的調(diào)用順序,即設(shè)置的不同的索引;或每個(gè)軟件保護(hù)裝置內(nèi)部已設(shè)置的本地指令代碼順序是不一致的。
所述處理被保護(hù)軟件還可以具體為1)查閱被保護(hù)軟件和指令代碼字典庫;2)找到指令代碼字典庫中與被保護(hù)軟件中指令代碼操作碼相同的指令代碼;3)將指令代碼字典庫中找到的指令代碼所對(duì)應(yīng)的軟件保護(hù)裝置能執(zhí)行的本地指令代碼寫入軟件保護(hù)裝置4)并將在被保護(hù)軟件中找到的與指令代碼字典庫中操作碼相同的指令代碼刪除;5)在被保護(hù)軟件中寫入與軟件保護(hù)裝置通訊的通訊指令。
所述軟件保護(hù)裝置中沒有預(yù)置指令代碼字典庫。
所述軟件保護(hù)裝置中寫入的本地指令代碼是根據(jù)被保護(hù)軟件的情況確定的,即對(duì)不同的軟件進(jìn)行保護(hù)時(shí),寫入到軟件保護(hù)裝置中的指令順序是不同的,且該寫入軟件保護(hù)裝置中的本地指令代碼是指令代碼字典庫中與被保護(hù)軟件中相同的指令代碼操作碼所對(duì)應(yīng)的本地指令代碼。
所述通訊指令可以寫在所述刪除指令代碼的原位置,可以在原刪除指令代碼的位置處寫入調(diào)用所述通訊指令的指令,該所述通訊指令寫在被保護(hù)軟件可執(zhí)行文件的其他位置,所述通訊指令還可以寫在被保護(hù)軟件執(zhí)行文件的起始地址處,調(diào)用時(shí),所述通訊指令填充原刪除指令代碼的位置。
所述通訊指令由軟件保護(hù)裝置生產(chǎn)商提供。
所述被保護(hù)軟件中所刪除的指令代碼的操作碼與軟件保護(hù)裝置指令代碼字典庫中的部分指令代碼的操作碼是相同的。
所述通訊指令用于訪問軟件保護(hù)裝置、通知軟件保護(hù)裝置執(zhí)行指定指令代碼,并返回執(zhí)行結(jié)果。
所述執(zhí)行被保護(hù)軟件的過程具體包括如下步驟步驟1.執(zhí)行被保護(hù)軟件;步驟2.軟件執(zhí)行到通訊指令處,訪問軟件保護(hù)裝置,并傳入指令所需的信息;步驟3.執(zhí)行軟件保護(hù)裝置中的操作,由通訊指令返回結(jié)果,繼續(xù)執(zhí)行被保護(hù)軟件。
根據(jù)軟件保護(hù)裝置與主機(jī)交互的步驟2,所述傳入所需信息是用于通知軟件保護(hù)裝置執(zhí)行哪條預(yù)置的指令。
所述執(zhí)行被保護(hù)軟件的過程,在步驟2或步驟3傳入指令所需的信息或返回結(jié)果時(shí),需要在軟件保護(hù)裝置與主機(jī)間進(jìn)行一系列變換。
所述變換包括在軟件保護(hù)裝置虛擬機(jī)與主機(jī)間進(jìn)行的內(nèi)存地址、寄存器和堆棧的相互映射。
本發(fā)明還提供了一種提高軟件保護(hù)安全性的系統(tǒng)具體包括讀取模塊該模塊用于讀取指令代碼字典庫和被保護(hù)軟件中的指令代碼;選取模塊該模塊用于在被保護(hù)軟件中選取與指令代碼字典庫中相同指令代碼操作碼的指令代碼;刪除模塊該模塊用于在被保護(hù)軟件中刪除選取模塊在被保護(hù)軟件中選取的指令代碼;運(yùn)行模塊該模塊用于完成被保護(hù)軟件在主機(jī)與軟件保護(hù)裝置中的運(yùn)行;指令代碼字典庫用于確定被保護(hù)軟件中欲刪除的指令代碼,還可以確定寫入軟件保護(hù)裝置中的本地指令代碼;寫入模塊該模塊用于在被保護(hù)軟件或軟件保護(hù)裝置中寫入所需內(nèi)容。
所述提高軟件保護(hù)安全性的系統(tǒng)還包括軟件保護(hù)裝置;且該裝置用于接收主機(jī)發(fā)送的命令,并執(zhí)行指定的其內(nèi)部的本地指令代碼。
所述指令代碼字典庫可以預(yù)置在軟件保護(hù)裝置內(nèi)部。
所述提高軟件保護(hù)安全性的系統(tǒng)還包括索引模塊,該模塊用于設(shè)置軟件保護(hù)裝置指令代碼字典庫中的指令代碼的排列順序,而該指令代碼是與被保護(hù)軟件中刪除的指令代碼對(duì)應(yīng)的。
所述寫入模塊寫入的內(nèi)容包括在被保護(hù)軟件中寫入與軟件保護(hù)裝置通訊的通訊指令或根據(jù)被保護(hù)軟件中指令情況在軟件保護(hù)裝置中寫入指令代碼字典庫中的部分內(nèi)容或在被保護(hù)軟件中寫入調(diào)用通訊指令的指令,此時(shí),在刪除指令代碼的原位置寫入調(diào)用通訊程序的指令,通訊程序?qū)懭氡槐Wo(hù)軟件的其他位置。
所述寫入模塊可以把通訊指令寫在刪除指令代碼的原位置,還可以寫在被保護(hù)軟件可執(zhí)行文件的起始位置在被調(diào)用時(shí)填充原刪除指令代碼的位置。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于使用軟件保護(hù)裝置對(duì)軟件加密提高了軟件保護(hù)的安全性。
結(jié)合軟件保護(hù)裝置保護(hù)軟件的過程省去了編寫軟件保護(hù)裝置中程序的過程,簡(jiǎn)化了軟件開發(fā)商對(duì)軟件保護(hù)裝置的開發(fā)過程。
對(duì)軟件保護(hù)的過程不需要開發(fā)人員的參與。
圖1是提高軟件保護(hù)安全性的一種方法的流程圖。
圖2是提高軟件保護(hù)安全性的另一種方法的流程圖。
圖3為軟件保護(hù)裝置與主機(jī)進(jìn)行交互的過程。
圖4是軟件保護(hù)裝置與主機(jī)進(jìn)行交互的具體流程。
圖5是本發(fā)明提供的一種實(shí)現(xiàn)提高軟件保護(hù)安全性方法的裝置圖。
圖6是本發(fā)明提供的另一種實(shí)現(xiàn)提高軟件保護(hù)安全性方法的裝置圖。
具體實(shí)施例方式
本發(fā)明提供一種提高軟件保護(hù)安全性的方法及裝置。下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明,但不作為對(duì)本發(fā)明的限定。在下述實(shí)施例中,所述對(duì)軟件保護(hù)裝置的處理采用第一種處理方式,所述軟件保護(hù)裝置是加密鎖。
圖1是提高軟件保護(hù)安全性的一種方法的流程圖,具體步驟如下步驟101.獲取軟件加密鎖。
在本實(shí)施例中,加密鎖中預(yù)置指令代碼字典庫,該指令代碼字典庫中的指令代碼為常用指令代碼,且指令代碼字典庫是可以不斷更新的。
在本實(shí)施例中,每個(gè)軟件保護(hù)裝置中的指令代碼字典庫中的指令代碼設(shè)置了不同的順序。
在本實(shí)施例中,指令代碼字典庫包含被保護(hù)軟件所用指令集的指令代碼和軟件保護(hù)裝置所能執(zhí)行的本地指令代碼。
步驟102.選擇被保護(hù)軟件,所選擇被保護(hù)軟件中含有至少一條常用指令代碼。
步驟103.查閱被保護(hù)軟件和指令代碼字典庫,并刪除被保護(hù)軟件中與軟件加密鎖中指令代碼操作碼相同的指令代碼。
在本實(shí)施例中,被刪除指令代碼為X86指令代碼。
步驟104.在被保護(hù)軟件刪除代碼處寫入通訊指令。
在本實(shí)施例中,通訊指令是由加密鎖生產(chǎn)商提供。
在本實(shí)施例中,對(duì)多種軟件寫通訊指令時(shí),可以共用一個(gè)指令,也可以只對(duì)指令中的部分參數(shù)、地址做少量改變。
步驟105.保存含通訊指令的被保護(hù)軟件。
圖2是提高對(duì)被保護(hù)軟件保護(hù)的另一種方法的流程圖,即在所述加密鎖中未預(yù)置指令代碼字典庫。
步驟201.獲取軟件加密鎖。
步驟202.選擇被保護(hù)軟件,可以執(zhí)行步驟203.刪除與軟件加密鎖中本地指令代碼對(duì)應(yīng)的指令代碼。還執(zhí)行步驟205向加密鎖中寫入加密鎖能執(zhí)行的本地指令代碼。
在本實(shí)施例中所述步驟203和步驟205沒有先后關(guān)系。
步驟204在被保護(hù)軟件刪除指令代碼處寫入通訊指令,執(zhí)行步驟206;步驟206保存寫入通訊指令的被保護(hù)軟件。
圖3是加密鎖開發(fā)后與主機(jī)進(jìn)行交互的過程,在本實(shí)施例中,通訊指令是用于訪問加密鎖、通知加密鎖執(zhí)行指定代碼,并返回執(zhí)行結(jié)果及完成加密鎖與主機(jī)交互進(jìn)行的一系列的變換。
具體步驟如下
本實(shí)施例由301,302交互完成。具體步驟為(1)執(zhí)行被保護(hù)軟件;(2)軟件執(zhí)行到通訊指令處,訪問軟件加密鎖,并傳入指令所需的信息;在軟件加密鎖與主機(jī)間進(jìn)行一系列變換,執(zhí)行步驟303-310,包括內(nèi)存地址、寄存器、堆棧之間相互映射如下。
所述內(nèi)存映射是指將主機(jī)中存儲(chǔ)這部分內(nèi)容的內(nèi)存地址變換為軟件加密鎖中的內(nèi)存地址。
所述寄存器映射是指這部分指令運(yùn)行所需的寄存器變換為軟件加密鎖內(nèi)的寄存器。
所述堆棧映射,是指對(duì)計(jì)算機(jī)運(yùn)行這段程序的堆棧地址映射到軟件加密鎖的堆??臻g。
根據(jù)軟件加密鎖與主機(jī)交互過程的步驟2所述通訊指令完成輸入數(shù)據(jù)工作。
所述輸入數(shù)據(jù)包括,內(nèi)存數(shù)據(jù)輸入可以包括寄存器數(shù)據(jù)輸入、堆棧數(shù)據(jù)輸入。
所述通訊指令使用所述輸入數(shù)據(jù)完成軟件加密鎖的更新工作,包括地址變換、寄存器變換、堆棧變換,這種銜接工作是在運(yùn)行前的。
所述地址變換是將這段程序運(yùn)行所需要的內(nèi)存映射并傳入到軟件加密鎖中。
所述寄存器變換是將這段程序運(yùn)行所需要的寄存器映射并傳入到軟件加密鎖中。
所述堆棧變換是將這段程序運(yùn)行所需要的堆棧映射并傳入到軟件加密鎖中。
(3)執(zhí)行軟件加密鎖中的操作,由通訊指令返回結(jié)果,繼續(xù)執(zhí)行被保護(hù)軟件。
根據(jù)軟件加密鎖與主機(jī)交互過程的步驟3所述通訊指令完成輸出數(shù)據(jù)的工作。
所述輸出數(shù)據(jù)包括,內(nèi)存數(shù)據(jù)輸出,寄存器數(shù)據(jù)輸出、堆棧數(shù)據(jù)輸出。
根據(jù)軟件加密鎖與主機(jī)交互過程的步驟3所述通訊指令使用所述輸出數(shù)據(jù)完成計(jì)算機(jī)內(nèi)程序運(yùn)行環(huán)境的更新工作,包括地址反變換、寄存器反變換、堆棧反變換,這種銜接工作是在運(yùn)行后的。
所述地址反變換是將軟件加密鎖運(yùn)行完所述程序段返回的輸出內(nèi)存數(shù)據(jù)并更新到計(jì)算機(jī)內(nèi)運(yùn)行程序的內(nèi)存。
所述寄存器反變換是將軟件加密鎖運(yùn)行完所述程序段返回的輸出寄存器數(shù)據(jù)并更新到計(jì)算機(jī)內(nèi)運(yùn)行程序的寄存器。
所述堆棧反變換是將軟件加密鎖運(yùn)行完所述程序段返回的輸出堆棧數(shù)據(jù)并更新到計(jì)算機(jī)內(nèi)運(yùn)行程序的堆棧。
圖4是軟件加密鎖與主機(jī)進(jìn)行交互的具體流程。
步驟401運(yùn)行用戶程序,主機(jī)將程序調(diào)入內(nèi)存。
在本實(shí)施例中,運(yùn)行的用戶程序如下int add(int a,int b){return a+b+constVar;}在本實(shí)施例中,constVar是一個(gè)全局變量。
步驟402 CPU運(yùn)行用戶程序。
在本實(shí)施例中,經(jīng)編譯后將產(chǎn)生x86的指令,用匯編語言表示如下00401020 push ebp00401021 mov ebp,esp00401023 sub esp,40h00401026 push ebx00401027 push esi00401028 push edi00401029 lea edi,[ebp-40h]0040102C mov ecx,10h00401031 mov eax,OCCCCCCCCh00401036 rep stos dword ptr[edi]00401038 mov eax,dword ptr[ebp+8]
0040103B adde8x,dword ptr[ebp+OCh]0040103E addeax,dword ptr
00401044 popedi00401045 popesi00401046 popebx00401047 movesp,ebp00401049 popebp0040104A ret在本實(shí)施例中,push ebp、mov eax,OCCCCCCCCh等一系列指令是常用指令,這些常用指令及其對(duì)應(yīng)軟件加密鎖所能執(zhí)行的本地指令代碼以字典的形式放入軟件加密鎖中,該軟件加密鎖根據(jù)預(yù)置的指令執(zhí)行方式來執(zhí)行這些指令。
在本實(shí)施例中,上面指令mov eax,dword ptr[ebp+8],addeax,dword ptr[ebp+OCh],兩條指令用來完成加法運(yùn)算,這兩條指令是存放在指令代碼字典庫中的,且在指令代碼字典庫中的索引為1。
在本實(shí)施例中,被保護(hù)軟件與上面指令相同的部分改寫成如下通訊指令push 1call funl在本實(shí)施例中,步驟203、204,完成主機(jī)CPU與軟件加密鎖CPU的銜接,包括以下步驟。
步驟403運(yùn)行至通訊處,訪問軟件加密鎖并進(jìn)行需要的變換。
在本實(shí)施例中,所述的變換包括內(nèi)存變換、寄存器變換、堆棧的變換。
在本實(shí)施例中,內(nèi)存變換是指將程序在主機(jī)中的內(nèi)存地址變換為虛擬機(jī)或軟件加密鎖中的內(nèi)存地址,即步驟308的過程。
在本實(shí)施例中,寄存器的變換是由將主機(jī)中寄存器的初始值送入軟件加密鎖中實(shí)現(xiàn)的。
在本實(shí)施例中,所用到的寄存器有ebp、esi、esp,在軟件加密鎖中程序段運(yùn)行結(jié)束后,要將上述寄存器數(shù)據(jù)更新到主機(jī)運(yùn)行程序的寄存器中。
在本實(shí)施例中,還可以出現(xiàn)堆棧映射,堆棧映射是指用虛擬機(jī)或軟件加密鎖中的堆棧替換主機(jī)中的堆棧,即步驟310。用于處理push ebp,pop ebp。
在本實(shí)施例中,映射由代碼實(shí)現(xiàn)。
步驟404軟件加密鎖處理指令代碼字典庫中被指定指令代碼。
在本實(shí)施例中,指令代碼字典庫中的用現(xiàn)有的基于C51虛擬機(jī)的軟件加密鎖編寫的C51程序,用來完成這兩條指令的執(zhí)行。具體指令代碼字典庫如下
上面表格中X86指令欄中的ptr表示地址,在本實(shí)施例中具體為[ebp+8],[ebp+OCh]。
上面表格中軟件加密鎖執(zhí)行指令欄中的MOV DPTR,#1是通用的,表示加法的第一個(gè)參數(shù),本實(shí)施例中具體為MOV DPTR,#OX0000;MOV DPTR,#2是通用的,表示加法的第二個(gè)參數(shù)在本實(shí)施例中具體為MOV DPTR,#OX0004;欄中最后一行MOV DPTR,#3也是通用的,表示加法的結(jié)果,在本實(shí)施例中具體為MOVDPTR,#OX0008。
步驟405將處理結(jié)果經(jīng)由變換,返回原用戶程序。
在本實(shí)施例中,這一過程包括步驟307即內(nèi)存地址反變換,可以包括步驟305寄存器反變換,還可以包括步驟309堆棧反變換。
在本實(shí)施例中,這些反變換實(shí)現(xiàn)方式由原變換方式將代碼替換即可實(shí)現(xiàn)。
在本實(shí)施例中,映射由代碼實(shí)現(xiàn)。
圖5所示為本發(fā)明提供的一種實(shí)現(xiàn)提高軟件保護(hù)安全性方法的裝置,具體如下本裝置包含軟件加密鎖和主機(jī)兩部分,其中軟件加密鎖包含指令代碼字典庫和運(yùn)行模塊;主機(jī)含有讀取模塊、選取模塊、寫入模塊、刪除模塊和運(yùn)行模塊。
讀取模塊該模塊用于讀取軟件加密鎖指令代碼字典庫中和被保護(hù)軟件中的指令代碼,用來確定被保護(hù)軟件中刪除的指令代碼;選取模塊該模塊用于在被保護(hù)軟件中選取與軟件加密鎖指令代碼字典庫中相同的指令代碼,在讀取模塊的基礎(chǔ)上完成,輔助實(shí)現(xiàn)刪除模塊的功能;刪除模塊該模塊用于在被保護(hù)軟件中刪除由選取模塊選取的指令代碼;寫入模塊該模塊用于在被保護(hù)軟件中刪除指令代碼的位置寫入與軟件加密鎖通訊的指令,完成被保護(hù)軟件運(yùn)行到刪除指令代碼處訪問軟件加密鎖,確保被保護(hù)軟件的順利進(jìn)行;運(yùn)行模塊該模塊用于完成被保護(hù)軟件在主機(jī)與軟件加密鎖中的運(yùn)行。
指令代碼字典庫用于確定被保護(hù)軟件中欲刪除的指令代碼,還可以確定寫入軟件保護(hù)裝置中的本地指令代碼;在本實(shí)施例中通訊指令是直接寫入被保護(hù)軟件中刪除指令代碼的位置的。
在本實(shí)施例中,指令代碼字典庫包括索引、被保護(hù)軟件所用指令集的指令代碼和軟件保護(hù)裝置所能執(zhí)行的本地指令代碼。
在本實(shí)施例中,該裝置包括索引模塊。該模塊用于設(shè)置索引即軟件加密鎖指令代碼字典庫中的指令代碼的調(diào)用順序,該指令代碼是與被保護(hù)軟件中刪除的指令代碼對(duì)應(yīng)的,且不同的索引對(duì)應(yīng)不同的指令代碼字典庫中的指令代碼被調(diào)用順序,實(shí)現(xiàn)不同的被保護(hù)軟件只能有其特定的軟件保護(hù)裝置;在本實(shí)施例中,軟件加密鎖內(nèi)部是包含指令代碼字典庫的且由軟件開發(fā)商個(gè)人設(shè)置不同的索引順序。
圖6所示為本發(fā)明提供的另外一種實(shí)現(xiàn)提高軟件保護(hù)安全性方法的裝置,具體如下本裝置包含軟件加密鎖和主機(jī)兩部分,其中軟件加密鎖包含寫入模塊和運(yùn)行模塊;主機(jī)含有讀取模塊、指令代碼字典庫、選取模塊、刪除模塊、寫入模塊和運(yùn)行模塊。
讀取模塊該模塊用于讀取指令代碼字典庫中和被保護(hù)軟件中的指令代碼,用來確定寫入軟件保護(hù)裝置中的指令代碼及被保護(hù)軟件中要?jiǎng)h除的指令代碼;指令代碼字典庫用于確定被保護(hù)軟件中欲刪除的指令代碼,并確定寫入軟件保護(hù)裝置中的本地指令代碼;選取模塊該模塊用于在被保護(hù)軟件中選取與指令代碼字典庫中相同的指令代碼,在讀取模塊的基礎(chǔ)上完成,輔助實(shí)現(xiàn)刪除模塊的功能;刪除模塊該模塊用于在被保護(hù)軟件中刪除選取模塊在被保護(hù)軟件中選取的指令代碼;寫入模塊該模塊用于將選取模塊選取的被保護(hù)軟件中的指令代碼寫入軟件加密鎖,同時(shí)在被保護(hù)軟件中刪除指令代碼的位置寫入與軟件加密鎖通訊的指令;運(yùn)行模塊該模塊用于完成被保護(hù)軟件在主機(jī)與軟件保護(hù)裝置中的運(yùn)行。
在本實(shí)施例中,指令代碼字典庫包括被保護(hù)軟件所用指令集的指令代碼和軟件加密鎖所能執(zhí)行的本地指令代碼。
在本實(shí)施例中,軟件加密鎖內(nèi)部不含有指令代碼字典庫,指令代碼字典庫是由軟件開發(fā)商根據(jù)自己的軟件特點(diǎn)自行寫入的上所述的實(shí)施例,只是本發(fā)明較優(yōu)選的具體實(shí)施方式
,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進(jìn)行的通常變化和替換,都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種提高軟件保護(hù)安全性的方法,其特征在于,所述提高軟件保護(hù)安全性的方法包括以下兩個(gè)過程a,處理被保護(hù)軟件;b,執(zhí)行被保護(hù)軟件;所述處理被保護(hù)軟件的過程包括如下內(nèi)容查閱所述被保護(hù)軟件和指令代碼字典庫;刪除所述被保護(hù)軟件與所述指令代碼字典庫中操作碼相同的指令代碼;在被保護(hù)軟件中寫入與軟件保護(hù)裝置通訊的通訊指令;所述執(zhí)行被保護(hù)軟件的過程包括如下具體內(nèi)容1)執(zhí)行所述被保護(hù)軟件;2)執(zhí)行通訊指令,訪問所述軟件保護(hù)裝置,執(zhí)行指定操作,返回結(jié)果;3)繼續(xù)執(zhí)行所述被保護(hù)軟件。
2.根據(jù)權(quán)利要求1所述提高軟件保護(hù)安全性的方法,其特征在于,所述處理被保護(hù)軟件的過程的中步驟2)還可以包括將所述指令代碼寫入軟件保護(hù)裝置。
3.根據(jù)權(quán)利要求1所述提高軟件保護(hù)安全性的方法,其特征在于,所述處理被保護(hù)軟件具體為1)查閱被保護(hù)軟件和軟件保護(hù)裝置指令代碼字典庫;2)找到被保護(hù)軟件中與軟件保護(hù)裝置指令代碼字典庫中操作碼相同的指令代碼;3)將被保護(hù)軟件中找到的與軟件保護(hù)裝置指令代碼字典庫中操作碼相同的指令代碼刪除;4)在被保護(hù)軟件中寫入與軟件保護(hù)裝置通訊的通訊指令。
4.根據(jù)權(quán)利要求1所述提高軟件保護(hù)安全性的方法,其特征在于,所述處理被保護(hù)軟件還可以具體為1)查閱被保護(hù)軟件和指令代碼字典庫;2)找到指令代碼字典庫中與被保護(hù)軟件中指令代碼操作碼相同的指令代碼;3)將指令代碼字典庫中找到的指令代碼所對(duì)應(yīng)的軟件保護(hù)裝置能執(zhí)行的本地指令代碼寫入軟件保護(hù)裝置;4)并將在被保護(hù)軟件中找到的與指令代碼字典庫中操作碼相同的指令代碼刪除;5)在被保護(hù)軟件中寫入與軟件保護(hù)裝置通訊的通訊指令。
5.根據(jù)權(quán)利要求1所述提高軟件保護(hù)安全性的方法,其特征在于,所述指令代碼字典庫是包含被保護(hù)軟件所用指令集的指令代碼和軟件保護(hù)裝置所能執(zhí)行的本地指令代碼的相關(guān)集合;所述指令代碼字典庫還包括索引。
6.根據(jù)權(quán)利要求3所述提高軟件保護(hù)安全性的方法,其特征在于,在所述軟件保護(hù)裝置中預(yù)置了指令代碼字典庫。
7.根據(jù)權(quán)利要求4所述提高軟件保護(hù)安全性的方法,其特征在于,在所述軟件保護(hù)裝置中沒有預(yù)置指令代碼字典庫。
8.根據(jù)權(quán)利要求3所述提高軟件保護(hù)安全性的方法,其特征在于,每個(gè)所述軟件保護(hù)裝置內(nèi)部已設(shè)置的本地指令代碼的順序是一致的,根據(jù)不同的保護(hù)需要所述本地指令代碼可以設(shè)置不同的調(diào)用順序,即設(shè)置不同的索引;或每個(gè)軟件保護(hù)裝置內(nèi)部已設(shè)置的本地指令代碼順序是不一致的。
9.根據(jù)權(quán)利要求3或4所述提高軟件保護(hù)安全性的方法,其特征在于,所述被保護(hù)軟件中所刪除的指令代碼的操作碼與指令代碼字典庫中的部分指令代碼的操作碼是相同的。
10.根據(jù)權(quán)利要求3或4所述提高軟件保護(hù)安全性的方法,其特征在于,所述通訊指令可以寫在所述刪除指令代碼的原位置。
11.根據(jù)權(quán)利要求3或4所述提高軟件保護(hù)安全性的方法,其特征在于,可以在原刪除指令代碼的位置處寫入調(diào)用所述通訊指令的指令,該所述通訊指令寫在被保護(hù)軟件可執(zhí)行文件的其他位置。
12.根據(jù)權(quán)利要求3或4所述提高軟件保護(hù)安全性的方法,其特征在于,所述通訊指令寫在被保護(hù)軟件的起始地址處,調(diào)用時(shí),所述通訊指令填充原刪除指令代碼的位置。
13.根據(jù)權(quán)利要求4所述提高軟件保護(hù)安全性的方法,其特征在于,所述軟件保護(hù)裝置中寫入的本地指令代碼是根據(jù)被保護(hù)軟件的情況確定的,即對(duì)不同的軟件進(jìn)行保護(hù)時(shí),寫入到軟件保護(hù)裝置中的指令順序是不同的;該寫入軟件保護(hù)裝置中的本地指令代碼是指令代碼字典庫中與被保護(hù)軟件中相同的指令代碼操作碼所對(duì)應(yīng)的本地指令代碼。
14.根據(jù)權(quán)利要求3或4所述提高軟件保護(hù)安全性的方法,其特征在于,所述通訊指令由軟件保護(hù)裝置生產(chǎn)商提供。
15.根據(jù)權(quán)利要求1所述提高軟件保護(hù)安全性的方法,其特征在于,所述通訊指令用于訪問軟件保護(hù)裝置、通知軟件保護(hù)裝置執(zhí)行指定指令代碼,并返回執(zhí)行結(jié)果。
16.根據(jù)權(quán)利要求1所述提高軟件保護(hù)安全性的方法,其特征在于,所述執(zhí)行被保護(hù)軟件的過程具體包括如下步驟步驟1.執(zhí)行被保護(hù)軟件;步驟2.軟件執(zhí)行到通訊指令處,訪問軟件保護(hù)裝置,并傳入指令所需的信息,用于通知軟件保護(hù)裝置執(zhí)行哪條預(yù)置的指令;步驟3.執(zhí)行軟件保護(hù)裝置中的操作,由通訊指令返回結(jié)果,繼續(xù)執(zhí)行被保護(hù)軟件。
17.根據(jù)權(quán)利要求16所述提高軟件保護(hù)安全性的方法,其特征在于,所述執(zhí)行被保護(hù)軟件的過程,在步驟2或步驟3傳入指令所需的信息或返回結(jié)果時(shí),需要在軟件保護(hù)裝置與主機(jī)間進(jìn)行一系列變換。
18.根據(jù)權(quán)利要求17所述提高軟件保護(hù)安全性的方法,其特征在于,所述變換包括在軟件保護(hù)裝置虛擬機(jī)與主機(jī)間進(jìn)行的內(nèi)存地址、寄存器和堆棧的相互映射。
19.一種提高軟件保護(hù)安全性的系統(tǒng),其特征在于,所述實(shí)現(xiàn)提高軟件保護(hù)安全性的系統(tǒng)包括讀取模塊該模塊用于讀取指令代碼字典庫和被保護(hù)軟件中的指令代碼;選取模塊該模塊用于在被保護(hù)軟件中選取與指令代碼字典庫中相同指令代碼操作碼的指令代碼;刪除模塊該模塊用于在被保護(hù)軟件中刪除選取模塊在被保護(hù)軟件中選取的指令代碼;運(yùn)行模塊該模塊用于完成被保護(hù)軟件在主機(jī)與軟件保護(hù)裝置中的運(yùn)行;指令代碼字典庫用于確定被保護(hù)軟件中欲刪除的指令代碼,還可以確定寫入軟件保護(hù)裝置中的本地指令代碼;寫入模塊該模塊用于在被保護(hù)軟件或軟件保護(hù)裝置中寫入所需內(nèi)容;所述系統(tǒng)還包括軟件保護(hù)裝置且該裝置用于接收主機(jī)發(fā)送的命令,并執(zhí)行指定的其內(nèi)部的本地指令代碼。
20.根據(jù)權(quán)利要求19所述提高軟件保護(hù)安全性的系統(tǒng),其特征在于,所述指令代碼字典庫可以預(yù)置在軟件保護(hù)裝置內(nèi)部。
21.根據(jù)權(quán)利要求19所述提高軟件保護(hù)安全性的系統(tǒng),其特征在于,所述系統(tǒng)還包括索引模塊,該模塊用于設(shè)置軟件保護(hù)裝置指令代碼字典庫中的指令代碼的排列順序,而該指令代碼是與被保護(hù)軟件中刪除的指令代碼對(duì)應(yīng)的。
22.根據(jù)權(quán)利要求19所述提高軟件保護(hù)安全性的系統(tǒng),其特征在于,所述寫入模塊寫入的內(nèi)容包括在被保護(hù)軟件中寫入與軟件保護(hù)裝置通訊的通訊指令或根據(jù)被保護(hù)軟件中指令情況在軟件保護(hù)裝置中寫入指令代碼字典庫中的部分內(nèi)容或在被保護(hù)軟件中寫入調(diào)用通訊指令的指令,此時(shí),在刪除指令代碼的原位置寫入調(diào)用通訊程序的指令,通訊程序?qū)懭氡槐Wo(hù)軟件的其他位置。
23.根據(jù)權(quán)利要求22所述提高軟件保護(hù)安全性的系統(tǒng),其特征在于,所述寫入模塊可以把通訊指令寫在刪除指令代碼的原位置,還可以寫在被保護(hù)軟件可執(zhí)行文件的起始位置,在被調(diào)用時(shí)填充原刪除指令代碼的位置。
全文摘要
本發(fā)明公開了屬于軟件保護(hù)裝置及軟件保護(hù)技術(shù)的一種提高軟件保護(hù)安全性的方法及裝置。該方法是通過在軟件保護(hù)裝置中預(yù)置針對(duì)不同用戶采用不同順序的指令代碼字典庫、或由個(gè)人設(shè)置索引的指令代碼字典庫或根據(jù)個(gè)人需要在軟件保護(hù)裝置中寫入指令代碼字典庫中的部分指令,并在被保護(hù)軟件中相應(yīng)位置刪除對(duì)應(yīng)的指令代碼,同時(shí)寫入與該軟件保護(hù)裝置通訊的通訊指令。所述軟件保護(hù)裝置包含讀取模塊、寫入模塊和運(yùn)行模塊。本發(fā)明在于使用軟件保護(hù)裝置對(duì)軟件進(jìn)行加密提高了軟件保護(hù)的安全性。結(jié)合軟件保護(hù)裝置保護(hù)軟件的過程省去了向軟件保護(hù)裝置寫入程序的過程,簡(jiǎn)化了軟件開發(fā)商對(duì)軟件保護(hù)裝置的開發(fā)過程。并且對(duì)軟件保護(hù)的過程不需要開發(fā)人員的參與。
文檔編號(hào)G06F21/00GK101013459SQ20071006365
公開日2007年8月8日 申請(qǐng)日期2007年2月7日 優(yōu)先權(quán)日2007年2月7日
發(fā)明者陸舟, 于華章 申請(qǐng)人:北京飛天誠信科技有限公司