專利名稱:一種調(diào)用軟件保護裝置外部代碼的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件版權(quán)保護技術(shù),特別涉及一種對軟件進行保護的方法。
背景技術(shù):
軟件作為一種特殊的產(chǎn)品,由于其純數(shù)字化的特征,從問世起就一直遭受盜版的困擾。盜版的存在不僅給軟件開發(fā)者造成了巨大的損失,也極大阻礙了整個軟件行業(yè)的發(fā)展。因此,幾乎所有的軟件都采取了相應(yīng)的技術(shù)措施來避免軟件遭受破解和盜版,其中最為有效的就是基于硬件的加密鎖技術(shù)。軟件保護裝置是一種通過計算機接口(包括但不限于并口或者USB接口)連接到計算機主機上的硬件設(shè)備。該設(shè)備內(nèi)部具有非易失性存儲空間可供讀寫,通常還具有單片機或者微處理控制芯片等計算處理單元。加密鎖是一種常見的軟件保護裝置。軟件開發(fā)者可以通過接口函數(shù)和加密鎖進行數(shù)據(jù)交換(即對加密鎖進行讀寫),來檢查加密鎖是否插在接口上;或者直接用加密鎖附帶的加密工具進行加密。這樣,軟件開發(fā)者可以在軟件中設(shè)置多處軟件鎖,利用加密鎖做為鑰匙來打開這些軟件鎖;如果沒插加密鎖或加密鎖不對應(yīng),軟件將不能正常執(zhí)行。此外,加密鎖內(nèi)部包含特定的功能,例如一部分存儲空間、一些密碼算法或者一些用戶自定義的算法或者功能。在軟件發(fā)行之前,軟件開發(fā)者修改自己的軟件代碼,使得軟件在運行過程中需要使用到加密鎖內(nèi)部的一些功能,這樣軟件離開加密鎖之后就會無法運行,而加密鎖作為一種硬件設(shè)備復(fù)制的難度較大,從而起到防止盜版軟件非法傳播的作用。當(dāng)前市場上主要的加密鎖包括:美國SafeNet公司的Sentinel Superpro、以色列Aladdin公司的Hasp HL、中國北京深思洛克數(shù)據(jù)保護中心的精銳IV、德國W1-Bu公司的WIBU-Key等。所有這些加密鎖都提供了內(nèi)置的存儲空間、私有或公開的密碼算法,當(dāng)軟件運行過程中可以調(diào)用這些功能來檢驗是否屬于正版。北京深思洛克數(shù)據(jù)保護中心的精銳IV于2002年上市,其特點是采用了智能卡芯片作為硬件的基礎(chǔ),而且支持用戶將自己定義的功能寫入到加密鎖內(nèi)部,甚至可以直接將軟件的部分功能移植到加密鎖內(nèi)部完成,從而大大提高了軟件被盜版的難度,通常稱這種將自己定義的功能或者軟件的部分功能移植到加密鎖內(nèi)部的技術(shù)為代碼移植。北京深思洛克數(shù)據(jù)保護中心是本發(fā)明人的前身,現(xiàn)在對應(yīng)網(wǎng)站為http://VWW.sense, com, cn/,其中詳細公開了本發(fā)明人開發(fā)的精銳IV型加密鎖的具體參數(shù)性能和工作原理。在現(xiàn)有技術(shù)中,理論上通過代碼移植可以將需要保護的軟件的任意部分的代碼移植到加密鎖內(nèi)部,從而使得這些代碼能夠在加密鎖內(nèi)部運行,以防止軟件被復(fù)制或者非法使用。但是由于加密鎖是一個獨立于計算機主機之外的外部系統(tǒng),其屬于一種封閉的運行環(huán)境,因此只能運行封閉環(huán)境內(nèi)部的代碼。而且運行代碼時不能與外界函數(shù)調(diào)用或者外界軟件的功能模塊進行交互,由于這些代碼在加密鎖中無法調(diào)用計算機主機系統(tǒng)中的應(yīng)用程序接口(Application Programming Interface,即應(yīng)用程序編程接口,下稱API)或者受保護軟件中其他模塊的功能,因此移植到加密鎖內(nèi)部的那些代碼在功能上必須獨立,否則整個軟件就無法運行。在本發(fā)明中,API是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件的以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機制的細節(jié)。舉例而言,Windows操作系統(tǒng)提供Windows API。Windows API是一套用來控制Windows的各個部件的外觀和行為的一套預(yù)先定義的Windows函數(shù)。用戶的每個動作都會引發(fā)一個或幾個函數(shù)的運行以告訴Windows發(fā)生了什么。這在某種程度上類似于Windows的天然代碼,其他的語言只是提供一種能自動而且更容易的訪問API的方法。凡是在Windows工作環(huán)境底下執(zhí)行的應(yīng)用程序都可以調(diào)用Windows API。但是,實際應(yīng)用中的很多情況下,受保護軟件都需要調(diào)用系統(tǒng)API或者與軟件其他模塊的功能進行交互來以完成特定的功能,這要求移植代碼的時候需要對代碼進行大量修改。不僅必須要將移植到加密鎖內(nèi)部的代碼拆分成許多個獨立的子功能模塊,還要保證加密鎖外部的軟件代碼與加密鎖內(nèi)部代碼之間調(diào)用和處理的正確性,這就增加了移植代碼工作量和難度,同時也縮小了代碼移植的范圍。舉例而言,假設(shè)受保護軟件要實現(xiàn)一種功能,即:在Windows系統(tǒng)中檢查是否存在畫圖板程序mspaint.exe。這種功能可用一個稱為CheckMspaint函數(shù)(即,檢查Windows的畫圖板)的功能模塊實現(xiàn)。在未對該功能模塊進行移植,即未將該功能模塊代碼移植到加密鎖硬件裝置中的情況下,參見附
圖1,要實現(xiàn)該功能的執(zhí)行步驟如下:1.受保護軟件調(diào)用CheckMspaint函數(shù)。2.受保護軟件調(diào)用系統(tǒng)API GetWindowsDirectory,從而獲得操作系統(tǒng)目錄,并存放到變量char acffindowsDir [256]中,通常情況下所述操作系統(tǒng)目錄是C: \Windows。3.受保護軟件拼接畫圖板程序所在的全路徑,通過調(diào)用C標(biāo)準(zhǔn)函數(shù)strcat,將字符串常量“\System32\mspaint.exe”連接到acWindowsDir里面存儲的字符串C:\Windows的結(jié)尾,便得到畫圖板程序所在的全路徑,通常情況下是C: \Windows\System32\mspaint.exe ο 其中 C 標(biāo)準(zhǔn)函數(shù) strcat 的說明是:char*strcat (char*strDestination, constchar*strSource),其功能是將兩個字符串連接,即將strSource連接到的字符串結(jié)尾處形成一個新的字符串。4.受保護軟件調(diào)用系統(tǒng)API CreateFile,同時指定參數(shù)為0PEN_EXISTING,即打開一個已經(jīng)存在的文件。如果文件不存在就會返回錯誤。如果成功地打開了 mspaint.exe文件,則表明mspaint.exe存在。如果返回了錯誤則表明mspaint.exe文件不存在。CheckMspaint函數(shù)根據(jù)CreateFile函數(shù)的結(jié)果返回對應(yīng)的結(jié)果。5.受保護軟件調(diào)用CheckMspaint的過程結(jié)束。為了便于描述清楚,上述過程的偽代碼及說明如下:
權(quán)利要求
1.一種調(diào)用軟件保護裝置外部代碼的方法,所述軟件保護裝置是用于軟件保護的硬件設(shè)備,包括微控制器單元、存儲單元以及用于與計算機主機相連接的接口單元; 其特征在于,該方法包括如下步驟: 步驟1:所述軟件保護裝置向所述受保護軟件中的外部功能調(diào)用模塊發(fā)送調(diào)用請求; 步驟2:所述受保護軟件中的所述外部功能調(diào)用模塊接收到所述調(diào)用請求后,所述外部功能調(diào)用模塊調(diào)用操作系統(tǒng)中的功能模塊,或者所述外部功能調(diào)用模塊調(diào)用所述受保護軟件中的功能模塊。
2.根據(jù)權(quán)利要求1所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,步驟2之后還執(zhí)行: 步驟3:所述外部功能調(diào)用模塊調(diào)用所述功能模塊后得到第一執(zhí)行結(jié)果,將所述第一執(zhí)行結(jié)果發(fā)送給所述軟件保護裝置。
3.根據(jù)權(quán)利要求2所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,步驟3之后還執(zhí)行: 步驟4:所述軟件保護裝置接收到所述第一執(zhí)行結(jié)果后,根據(jù)所述第一執(zhí)行結(jié)果進行處理。
4.根據(jù)權(quán)利要求3所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,上述步驟I到步驟4的步驟進行多次。
5.根據(jù)權(quán)利要求3或4所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,步驟4之后還執(zhí)行: 步驟5:所述軟件保護裝置根據(jù)所述第一執(zhí)行結(jié)果進行處理得到第二執(zhí)行結(jié)果,將所述第二執(zhí)行結(jié)果發(fā)送給所述受保護軟件。
6.根據(jù)權(quán)利要求5所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,步驟5之后還執(zhí)行: 步驟6:所述受保護軟件接收所述第二執(zhí)行結(jié)果,利用所述第二執(zhí)行結(jié)果運行。
7.根據(jù)權(quán)利要求1-6所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,所述微控制器單元、存儲器單元、接口單元集成到同一個芯片中。
8.根據(jù)權(quán)利要求1-6所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,所述軟件保護裝置內(nèi)部包括:通信模塊、進程管理模塊、存儲模塊, 所述通信模塊,用于所述軟件保護裝置與計算機主機之間的通信; 所述進程管理模塊,用于管理所述軟件保護裝置內(nèi)部處理的啟動、執(zhí)行和終止,并且所述進程管理模塊通過所述通信模塊與計算機主機之間進行通信; 存儲模塊,用于存儲移植到所述軟件保護裝置內(nèi)部的可執(zhí)行代碼,當(dāng)需要啟動所述軟件保護裝置內(nèi)部的處理時,所述進程管理模塊會到所述存儲模塊中找到對應(yīng)的代碼,然后執(zhí)行。
9.根據(jù)權(quán)利要求1-6所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,所述受保護軟件包括:軟件自身邏輯模塊、通信模塊、外部功能調(diào)用模塊; 所述軟件自身邏輯模塊,用于實現(xiàn)受保護軟件本身所要實現(xiàn)的功能; 所述通信模塊,用于進行所述受保護軟件與所述軟件保護裝置之間的通信; 所述外部功能調(diào)用模塊,用于執(zhí)行來自所述軟件保護裝置的所述第二調(diào)用請求,從而調(diào)用操作系統(tǒng)中的功能模塊或者所述受保護軟件中的功能模塊,并通過所述通信模塊將所述第一執(zhí)行結(jié)果返回給所述軟件保護裝置。
10.根據(jù)權(quán)利要求1-9所述的調(diào)用軟件保護裝置外部代碼的方法,其特征在于,通過預(yù)先設(shè)置列表方式 或者通過查找方式調(diào)用操作系統(tǒng)中的功能模塊或者所述受保護軟件中的功能模塊。
全文摘要
本發(fā)明公開了一種能調(diào)用外部代碼的軟件保護裝置,軟件保護裝置包括安全硬件設(shè)備和軟件執(zhí)行單元。本發(fā)明中,將部分軟件代碼移植到硬件設(shè)備中,硬件運行時,當(dāng)發(fā)現(xiàn)需要調(diào)用的代碼不在硬件內(nèi)部時,便會通知軟件執(zhí)行單元,由軟件單元調(diào)用相應(yīng)代碼并將結(jié)果傳送到安全硬件設(shè)備。通過本發(fā)明大大的提高了軟件代碼移植率,同時降低了安全硬件設(shè)備內(nèi)部代碼的復(fù)雜性。
文檔編號G06F21/12GK103164641SQ20111040969
公開日2013年6月19日 申請日期2011年12月8日 優(yōu)先權(quán)日2011年12月8日
發(fā)明者孫吉平, 韓勇 申請人:北京深思洛克軟件技術(shù)股份有限公司