專利名稱:一種使用軟件保護(hù)裝置存儲程序代碼實(shí)現(xiàn)軟件保護(hù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件保護(hù)技術(shù),特別涉及一種使用軟件保護(hù)裝置存儲程序代 碼實(shí)現(xiàn)軟件保護(hù)的方法。
背景技術(shù):
軟件保護(hù)裝置是實(shí)現(xiàn)軟件安全保護(hù)和版權(quán)保護(hù)的主要手段。軟件保護(hù)裝置特指一種附加在計(jì)算機(jī)接口 (比如,USB接口、串口、并口等接口)上的 硬件設(shè)備,對運(yùn)行在計(jì)算機(jī)上的特定的軟件進(jìn)行軟件安全保護(hù)和版權(quán)保護(hù)。 現(xiàn)代的軟件保護(hù)裝置,例如USB加密鎖,采用高強(qiáng)度智能卡芯片和先進(jìn)的 密碼學(xué)技術(shù),具有一定的運(yùn)算和存儲能力,同時難以被破解和復(fù)制,在高強(qiáng) 度軟件版權(quán)保護(hù)中具有廣泛的應(yīng)用。采用軟件保護(hù)裝置進(jìn)行軟件保護(hù)的通常的方法是將其視作 一個與受保 護(hù)軟件并行的運(yùn)算平臺,將軟件中的一部分功能移植到軟件保護(hù)裝置中實(shí) 現(xiàn),在軟件運(yùn)行時調(diào)用這些功能。軟件破解者的目的是使得被保護(hù)軟件在沒 有連接軟件保護(hù)裝置時也能正常工作,或者制造可以克隆軟件保護(hù)裝置功能 的硬件裝置。理想情況下,受保護(hù)軟件的運(yùn)行依賴于軟件保護(hù)裝置提供的預(yù) 算功能,而破解者又無法復(fù)制軟件保護(hù)裝置,因此可以很好的保護(hù)軟件。為了達(dá)到一定的保護(hù)強(qiáng)度,被移植的功能應(yīng)該是一定復(fù)雜性、且非常見 的算法,而且輸入輸出的數(shù)據(jù)空間必須足夠大,同時又適合在軟件保護(hù)裝置 中有限的存儲和計(jì)算條件下運(yùn)行。在實(shí)際情況中要找到軟件中滿足上述要求 的功能模塊并非易事,通常要在安全強(qiáng)度和運(yùn)行效率之間權(quán)衡。另外,由于 軟件保護(hù)裝置和PC主機(jī)是完全不同的硬件運(yùn)算平臺,軟件開發(fā)商需要將原 先在PC上的功能在軟件保護(hù)裝置的開發(fā)平臺上重新編程實(shí)現(xiàn),具有一定的技術(shù)難度,因此提高了軟件開發(fā)和維護(hù)成本。 發(fā)明內(nèi)容有鑒于此,本發(fā)明提出了一種使用軟件保護(hù)裝置存儲應(yīng)用程序代碼進(jìn)行 軟件保護(hù)的方法。本發(fā)明將可執(zhí)行程序中的部分機(jī)器指令或腳本語言存儲在軟件保護(hù)裝置中,在程序運(yùn)行時動態(tài)的從軟件保護(hù)裝置中取出并在PC上執(zhí)行,在保護(hù)程序的代碼同時無需進(jìn)行代碼移植,易于實(shí)現(xiàn)。同時由于受保護(hù)代碼是在PC上執(zhí)行,因此不影響程序的運(yùn)行效率,可以對程序中多段代碼進(jìn)行存儲保護(hù),提高了軟件的保護(hù)強(qiáng)度。參見圖1,利用軟件保護(hù)裝置存儲程序代碼進(jìn)行軟件保護(hù)的方法,具體包括步驟IOI,從受保護(hù)軟件的可執(zhí)行程序文件中選取若干代碼段,將代碼 段數(shù)據(jù)和起始地址存儲到軟件保護(hù)裝置中,擦除代碼段內(nèi)容,并在代碼段起 始處寫入調(diào)用軟件保護(hù)裝置的指令。步驟102,軟件運(yùn)行到被保護(hù)代碼部分時執(zhí)行預(yù)先寫入的調(diào)用軟件保護(hù) 裝置的指令,計(jì)算被保護(hù)代碼段的起始地址,將其發(fā)送到軟件保護(hù)裝置中。 軟件保護(hù)裝置根據(jù)被保護(hù)代碼段的起始地址找到已存儲的代碼段數(shù)據(jù),返回 給軟件。步驟103,軟件分配一塊內(nèi)存,將軟件保護(hù)裝置返回的代碼段數(shù)據(jù)存儲 到該內(nèi)存中,調(diào)用其中的入口函數(shù)實(shí)現(xiàn)受保護(hù)功能,完成后擦除并釋放該塊 內(nèi)存。在上述過程中,為了進(jìn)一步提高軟件保護(hù)強(qiáng)度,可以采用以下措施1. 被存儲的代碼以密文形式從軟件保護(hù)裝置發(fā)送到軟件,須解密后才可被執(zhí)行,因此防止了破解者通過監(jiān)控和記錄通信數(shù)據(jù)獲得被存儲代 碼的方法。2. 進(jìn)一步,解密密鑰是軟件與軟件保護(hù)裝置協(xié)商建立的動態(tài)會話密鑰,保證了每次取回的代碼數(shù)據(jù)密文都不相同。以包含對軟件保護(hù)裝置的再次調(diào)用,因此軟件要正常運(yùn)行,首先要從軟件保護(hù)裝置中讀取被存儲代碼,而在執(zhí)行該段 代碼時仍需要調(diào)用軟件保護(hù)裝置的功能,這種二次調(diào)用方式可以有 效的防止破解者復(fù)制被存儲代碼。4. 進(jìn)一步,在上述二次調(diào)用軟件保護(hù)裝置功能時傳入的參數(shù)是由軟件保護(hù)裝置在返回該段代碼時動態(tài)生成的,軟件保護(hù)裝置在處理二次調(diào) 用時檢查傳入?yún)?shù)的合法性,這樣保證了軟件每次執(zhí)行的被移植代 碼是不同的,并且與軟件保護(hù)裝置結(jié)合緊密。 根據(jù)本發(fā)明的 一個方面,提供一種使用軟件保護(hù)裝置實(shí)現(xiàn)軟件保護(hù)的方法,其特征在于,該方法包括步驟A、 將受保護(hù)軟件的可執(zhí)行程序的若干段代碼段數(shù)據(jù)和起始地址存儲到 軟件保護(hù)裝置中;B、 在受保護(hù)軟件中擦除上述代碼段數(shù)據(jù);C、 在代碼段起始位置處寫入調(diào)用軟件保護(hù)裝置的指令;D、 當(dāng)軟件運(yùn)行到某個已轉(zhuǎn)移存儲到軟件保護(hù)裝置中的被保護(hù)代碼段 時,將所述代碼段的起始地址發(fā)送給軟件保護(hù)裝置;E、 軟件保護(hù)裝置返回相應(yīng)的代碼段數(shù)據(jù);F、 軟件將代碼段數(shù)據(jù)存儲到內(nèi)存中,并執(zhí)行該代碼段數(shù)據(jù)。 根據(jù)本發(fā)明的一個方面,其特征還在于,在步驟F之后還包括步驟G、 執(zhí)行完成后擦除該段內(nèi)存數(shù)據(jù)。根據(jù)本發(fā)明的一個方面,其特征還在于,在步驟D中還包括通過執(zhí) 行預(yù)先寫入的調(diào)用軟件保護(hù)裝置的指令,計(jì)算被保護(hù)代碼段的起始地址,然 后將其發(fā)送到軟件保護(hù)裝置中。根據(jù)本發(fā)明的一個方面,其特征還在于,在步驟E中還包括軟件保護(hù) 裝置根據(jù)被保護(hù)代碼段的起始地址找到已存儲的代碼段數(shù)據(jù),返回給軟件。根據(jù)本發(fā)明的一個方面,其特征還在于,在步驟F中還包括軟件首先 分配一塊內(nèi)存,然后將軟件保護(hù)裝置返回的代碼段數(shù)據(jù)存儲到所述內(nèi)存中。6根據(jù)本發(fā)明的一個方面,其特征還在于,被存儲的代碼段數(shù)據(jù)以密文形 式從軟件保護(hù)裝置發(fā)送到軟件,須解密后才可被軟件執(zhí)行。根據(jù)本發(fā)明的一個方面,其特征還在于,解密密鑰是軟件與軟件保護(hù)裝 置協(xié)商建立的動態(tài)會話密鑰。根據(jù)本發(fā)明的一個方面,其特征還在于,被存儲的代碼段數(shù)據(jù)中包含對 軟件保護(hù)裝置的再次調(diào)用。根據(jù)本發(fā)明的一個方面,其特征還在于,軟件正常運(yùn)行時,首先從軟件 保護(hù)裝置中讀取被存儲的代碼段數(shù)據(jù),在執(zhí)行所述代碼段數(shù)據(jù)時再次調(diào)用軟 件保護(hù)裝置的功能。根據(jù)本發(fā)明的一個方面,其特征還在于,在上述二次調(diào)用軟件保護(hù)裝置 的功能時,傳入?yún)?shù)由軟件保護(hù)裝置在返回所述代碼段數(shù)據(jù)時動態(tài)生成。根據(jù)本發(fā)明的一個方面,其特征還在于,軟件保護(hù)裝置在處理上述二次 調(diào)用時,檢查傳入?yún)?shù)的合法性。根據(jù)本發(fā)明的一個方面,其特征還在于,在上述步驟A中還包括由 軟件開發(fā)商選取受保護(hù)軟件的若干段代碼,標(biāo)記代碼段的起始和結(jié)束位置并 計(jì)算其長度,將代碼段數(shù)據(jù)和起始地址存儲到軟件保護(hù)裝置中。根據(jù)本發(fā)明的一個方面,其特征還在于,還包括軟件開發(fā)商將上述受 保護(hù)軟件和軟件保護(hù)裝置發(fā)布給授權(quán)的軟件用戶。根據(jù)本發(fā)明的一個方面,其特征還在于,還包括軟件調(diào)用解密后的代 碼段中的功能函數(shù),執(zhí)行完功能函數(shù)后擦除內(nèi)存數(shù)據(jù)并釋放內(nèi)存。根據(jù)本發(fā)明的一個方面,其特征還在于,還包括功能函數(shù)中包含對軟 件保護(hù)裝置的進(jìn)一步調(diào)用,同時調(diào)用的參數(shù)是由軟件保護(hù)裝置在返回被存儲 的代碼段數(shù)據(jù)時動態(tài)設(shè)定的。上述過程與軟件的功能無關(guān),可對可執(zhí)行程序中任意的代碼段進(jìn)行轉(zhuǎn)移 存儲,易于實(shí)現(xiàn)自動化的軟件保護(hù)方法,降低了軟件保護(hù)的技術(shù)難度和開發(fā) 成本。同時受保護(hù)的代碼功能不是在軟件保護(hù)裝置中而是在PC上運(yùn)行,因 此對軟件的執(zhí)行效率影響很小。而使用基于硬件的軟件保護(hù)裝置,保證了被存儲代碼的私密性,提高了保護(hù)的安全性。
圖1為本發(fā)明使用軟件保護(hù)裝置存儲程序代碼實(shí)現(xiàn)軟件保護(hù)的方法的 流程示意圖。圖2為本發(fā)明實(shí)施例中使用軟件保護(hù)裝置存儲程序代碼實(shí)現(xiàn)軟件保護(hù) 的方法的流程示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉 實(shí)施例,對本發(fā)明進(jìn)一步詳細(xì)說明。圖2為本發(fā)明實(shí)施例中基加密數(shù)據(jù)文件實(shí)現(xiàn)軟件保護(hù)方法的流程示意圖。步驟201,軟件開發(fā)商選取受保護(hù)軟件的若干段代碼,標(biāo)記代碼的起始 和結(jié)束位置并計(jì)算其長度,將代碼段數(shù)據(jù)和起始地址存儲到軟件保護(hù)裝置 中,擦除代碼段內(nèi)容,并在代碼段起始處寫入調(diào)用軟件保護(hù)裝置的指令。步驟202,軟件開發(fā)商將上述受保護(hù)軟件和軟件保護(hù)裝置發(fā)布給授權(quán)的 軟件用戶。步驟203,軟件運(yùn)行時,當(dāng)執(zhí)行到某個被轉(zhuǎn)移存儲的代碼段時,執(zhí)行預(yù) 設(shè)的調(diào)用軟件保護(hù)裝置指令,將該代碼段的起始地址發(fā)送給軟件保護(hù)裝置, 后者從根據(jù)該地址找到相應(yīng)的代碼段數(shù)據(jù),用會話密鑰加密后發(fā)送回軟件。步驟204,軟件分配一塊內(nèi)存存儲接收到的加密代碼段數(shù)據(jù),并用會話 密鑰進(jìn)行解密。步驟205,軟件調(diào)用解密后的代碼段中的功能函數(shù),完成后擦除內(nèi)存數(shù) 據(jù)并釋放內(nèi)存。在步驟205中,功能函數(shù)里可以包含對軟件保護(hù)裝置的進(jìn)一步調(diào)用,同 時調(diào)用的輸入?yún)?shù)可以是由軟件保護(hù)裝置在返回被存儲代碼段數(shù)據(jù)時動態(tài)設(shè)定的。這樣可以有效的增加軟件和軟件保護(hù)裝置的相互依賴性,使得破解 者難以分析和復(fù)制輸入輸出數(shù)據(jù)。綜上所見,本發(fā)明提供了一種統(tǒng)一而便捷的利用軟件保護(hù)裝置進(jìn)行軟件 保護(hù)的方法,極大的降低了 一般的代碼移植方法的技術(shù)難度和軟件局限性,具有易于實(shí)施、執(zhí)行效率高和高安全強(qiáng)度的優(yōu)點(diǎn)。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范 圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等, 均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1. 一種使用軟件保護(hù)裝置存儲程序代碼實(shí)現(xiàn)軟件保護(hù)的方法,其特征在于,該方法包括步驟A、將受保護(hù)軟件的可執(zhí)行程序的若干段代碼段數(shù)據(jù)和起始地址存儲到軟件保護(hù)裝置中;B、在受保護(hù)軟件中擦除上述代碼段數(shù)據(jù);C、在代碼段起始位置處寫入調(diào)用軟件保護(hù)裝置的指令;D、當(dāng)軟件運(yùn)行到某個已轉(zhuǎn)移存儲到軟件保護(hù)裝置中的被保護(hù)代碼段時,將所述代碼段的起始地址發(fā)送給軟件保護(hù)裝置;E、軟件保護(hù)裝置返回相應(yīng)的代碼段數(shù)據(jù);F、軟件將代碼段數(shù)據(jù)存儲到內(nèi)存中,并執(zhí)行該代碼段數(shù)據(jù)。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟F之后還包括步驟G、 執(zhí)行完成后擦除內(nèi)存中所述代碼段數(shù)據(jù)。 -
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟D中還包括通 過執(zhí)行預(yù)先寫入的調(diào)用軟件保護(hù)裝置的指令,計(jì)算被保護(hù)代碼段的起始地 址,然后將其發(fā)送到軟件保護(hù)裝置中。
4、 根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟E中還包括軟 件保護(hù)裝置根據(jù)被保護(hù)代碼段的起始地址找到已存儲的代碼段數(shù)據(jù),返回給 軟件。
5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,在步驟F中還包括軟 件首先分配一塊內(nèi)存,然后將軟件保護(hù)裝置返回的代碼段數(shù)據(jù)存儲到所述內(nèi) 存中。
6、 根據(jù)權(quán)利要求1-5所述的任一方法,其特征在于,被存儲的代碼段 數(shù)據(jù)以密文形式從軟件保護(hù)裝置發(fā)送到軟件,須解密后才可被軟件執(zhí)行。
7、 根據(jù)權(quán)利要求6所述的方法,其特征在于,解密密鑰是軟件與軟件 保護(hù)裝置協(xié)商建立的動態(tài)會話密鑰。
8、 根據(jù)權(quán)利要求6所述的方法,其特征在于,被存儲的代碼段數(shù)據(jù)中 包含對軟件保護(hù)裝置的再次調(diào)用。
9、 根據(jù)權(quán)利要求8所述的方法,其特征在于,軟件正常運(yùn)行時,首先 從軟件保護(hù)裝置中讀取被存儲的代碼段數(shù)據(jù),在執(zhí)行所述代碼段數(shù)據(jù)時再次 調(diào)用軟件保護(hù)裝置的功能。
10、 根據(jù)權(quán)利要求9所述的方法,其特征在于,在上述二次調(diào)用軟件保 護(hù)裝置的功能時,傳入?yún)?shù)由軟件保護(hù)裝置在返回所述代碼段數(shù)據(jù)時動態(tài)生 成。
11、 根據(jù)權(quán)利要求10所述的方法,其特征在于,軟件保護(hù)裝置在處理 上述二次調(diào)用時,檢查傳入?yún)?shù)的合法性。
12、 根據(jù)權(quán)利要求5所述的方法,其特征在于,在上述步驟A中還包 括由軟件開發(fā)商選取受保護(hù)軟件的若干段代碼,標(biāo)記代碼段的起始和結(jié)束 位置并計(jì)算其長度,將代碼段數(shù)據(jù)和起始地址存儲到軟件保護(hù)裝置中。
13、 根據(jù)權(quán)利要求12所述的方法,其特征在于,還包括軟件開發(fā)商 將上述受保護(hù)軟件和軟件保護(hù)裝置發(fā)布給授權(quán)的軟件用戶。
14、 根據(jù)權(quán)利要求12所述的方法,其特征在于,還包括軟件調(diào)用解 密后的代碼段中的功能函數(shù),執(zhí)行完功能函數(shù)后擦除內(nèi)存數(shù)據(jù)并釋放內(nèi)存。
15、 根據(jù)權(quán)利要求14所述的方法,其特征在于,還包括功能函數(shù)中 包含對軟件保護(hù)裝置的進(jìn)一步調(diào)用,同時調(diào)用的參數(shù)是由軟件保護(hù)裝置在返 回被存儲的代碼段數(shù)據(jù)時動態(tài)設(shè)定的。
全文摘要
本發(fā)明提出了一種使用軟件保護(hù)裝置存儲應(yīng)用程序代碼進(jìn)行軟件保護(hù)的方法。本發(fā)明將可執(zhí)行程序中的部分機(jī)器指令或腳本語言存儲在軟件保護(hù)裝置中,在程序運(yùn)行時動態(tài)地從軟件保護(hù)裝置中取出并在PC上執(zhí)行,在保護(hù)程序的代碼同時無需進(jìn)行代碼移植,易于實(shí)現(xiàn)。同時由于受保護(hù)代碼是在PC上執(zhí)行,因此不影響程序的運(yùn)行效率,可以對程序中多段代碼進(jìn)行存儲保護(hù),提高了軟件的保護(hù)強(qiáng)度。本發(fā)明為軟件的保護(hù)提供了一種簡單、高效、安全的方法。
文檔編號G06F21/00GK101261664SQ20081010366
公開日2008年9月10日 申請日期2008年4月10日 優(yōu)先權(quán)日2008年4月10日
發(fā)明者孫吉平, 勇 韓 申請人:北京深思洛克數(shù)據(jù)保護(hù)中心