專利名稱::基于虛擬機的軟件保護方法
技術領域:
:本發(fā)明涉及一種軟件保護方法,具體地說,是涉及一種將軟件分割為公開組件和隱藏組件,并將隱藏組件通過一定的編譯規(guī)則裝載到虛擬機中運行,以此來保護軟件的方法。
背景技術:
:盜版給軟件產(chǎn)業(yè)帶來了巨大的損失。以2004年為例,全球一年非法安裝的軟件總值達到了310億美元。由于軟件的盜版,軟件企業(yè)的研發(fā)投入資金不能得到充分回收,整個軟件業(yè)的發(fā)展變得萎縮或畸形。軟件盜版是一個全球性問題,它嚴重影響了整個軟件業(yè)的健康發(fā)展,可見,軟件保護技術研究有著重大的現(xiàn)實意義。目前,最能有效抑制軟件盜版的措施是通過使用技術手段來增加盜版軟件的難度和成本?;诜指钴浖能浖Wo是一種有效的軟件保護方法,其在軟件專有算法保護和軟件拷貝保護領域有著重要的應用。一般,基于分割軟件的軟件保護是將軟件分割為公開組件和隱藏組件兩部分。公開組件安裝在不可信的用戶的計算機上,隱藏組件安裝在安全的機器或設備上。隱藏組件所完成的功能是軟件不可或缺的部分,公開組件必須通過與隱藏組件交互才能完成軟件功能,即如果離開隱藏組件,公開組件便不能正常運行軟件。而安裝在安全的機器或設備上的隱藏組件是難于物理復制的,且隱藏組件的代碼也是無法獲得的,所以盜版者只能偷走公開組件(如復制),而得不到隱藏組件,這樣便很好地防止了軟件的盜版。目前,公知的用于存儲和運行隱藏組件的安全運行環(huán)境主要有兩種一種是軟件開發(fā)商完全控制的Internet服務器,另一種是含有安全智能卡芯片的軟件鎖(Dongle)。對于第一種安全運行環(huán)境,運行在用戶計算機上的公開組件只能以事先規(guī)定好的完全受控方式,通過網(wǎng)絡與運行在Internet服務器上的隱藏組件進行交互。其缺點是網(wǎng)絡同步通信速度慢,頻繁的延遲會造成較差的用戶體驗。近年,提出了一種虛擬束縛技術(VirtualLeashing)。若軟件使用了該技術,則為軟件的公開組件分配的存儲是由隱藏組件來決定如何釋放的。由于存儲的釋放是不需要嚴格同步的,所以公開組件與隱藏組件間的通信實現(xiàn)了異步??梢?,虛擬束縛技術作為一種不阻塞的軟件分割技術,在一定程度上解決了網(wǎng)絡延遲的問題,但是由于自身技術特點,其不能適用于采用自動存儲回收機制語言(如Java、0#等)編寫的應用軟件。而且,軟件的可用性依賴于Internet服務器中的隱藏組件的運行,也就是軟件的可用性依賴于網(wǎng)絡的可用性。因此,由于網(wǎng)絡的限制,使得該種環(huán)境的使用受到了極大的限制。對于第二種安全運行環(huán)境,軟件鎖中含有具有一定存儲和計算能力的安全智能卡芯片,軟件的隱藏組件存儲并運行在軟件鎖中。運行在用戶計算機中的軟件公開組件只能通過預定義的接口來調用軟件鎖中對用戶隱藏的隱藏組件。一般,正版軟件在發(fā)布時配送軟件鎖。盜版者由于無法復制軟件鎖,也無法獲得軟件鎖中的隱藏組件代碼,因此,離開隱藏組件而單純地復制軟件公開組件是無法正常運行軟件的,軟件鎖很好地解決了軟件盜版的問題。然而,每發(fā)布一個軟件拷貝,軟件公司都需要隨軟件拷貝贈送一個配套的軟件鎖。因此,對于大量發(fā)行的軟件,發(fā)布成本會顯著增加,而且,由于軟件鎖的存在,軟件的在線發(fā)布受到限制。另外,相對于目前的計算機而言,軟件鎖中安全智能卡芯片的存儲和計算能力都非常弱,這也就造成了軟件的整體運行性能低、用戶體驗差的缺陷,且無法實現(xiàn)在軟件鎖中運行復雜算法。而若在軟件鎖中對隱藏組件使用簡單算法,則又會使得攻擊者易猜測到算法的功能,這樣便很大地降低了軟件的安全性。
發(fā)明內容本發(fā)明的目的在于提供一種基于虛擬機的軟件保護方法,該方法為軟件構造了一種基于虛擬機的純軟件的安全運行環(huán)境,使軟件受到了有效保護,維護了軟件開發(fā)商的知識產(chǎn)權。為實現(xiàn)上述目的,本發(fā)明釆用了以下技術方案一種基于虛擬機的軟件保護方法,其特征在于它包括如下步驟A.定義一用于編寫隱藏組件的高級程序設計語言HCPL;B.定義虛擬機規(guī)范,該規(guī)范包括非公開的虛擬機專有指令集和虛擬機文件格式;C.實現(xiàn)高級程序設計語言HCPL到虛擬機專有指令集的編譯器;D.實現(xiàn)以解釋器作為執(zhí)行引擎的虛擬機;E.將軟件分割為公開組件和隱藏組件兩部分;F.在公開組件中添加提取用戶計算機硬件ID信息模塊,以用于在安裝軟件、運行該模塊后提取用戶計算機硬件ID信息而生成用戶可識別的注冊碼;G.將步驟D得到的虛擬機和步驟F得到的公開組件的源代碼編譯為可執(zhí)行文件;H.使用高級程序設計語言HCPL重新實現(xiàn)隱藏組件,將重新實現(xiàn)的隱藏組件使用編譯器編譯為虛擬機代碼,而作為一單獨的隱藏組件文件。之后還包括步驟a.在計算機中安裝所述可執(zhí)行文件;b.運行所述公開組件中的提取用戶計算機硬件ID信息模塊,該模塊將提取的計算機硬件ID信息轉換為軟件注冊碼;C.用戶將該注冊碼提供給軟件開發(fā)商;d.若該注冊碼合法,則軟件開發(fā)商將用戶提供的注冊碼生成為軟件使用許可證,將該許可證添加到所述隱藏組件文件中,然后將該隱藏組件文件反饋給用戶,進行下一步驟,若該注冊碼非法,則軟件開發(fā)商不進行隱藏組件文件的反饋,步驟中斷;e.在計算機中裝入軟件開發(fā)商反饋的隱藏組件文件;f.所述虛擬機的裝載器將隱藏組件的代碼從隱藏組件文件中裝載到所述虛擬機中;g.用戶開始使用軟件。本發(fā)明的優(yōu)點是1、由于本發(fā)明不采用即時編譯技術,所以隱藏組件的代碼永遠不會被編譯成本地代碼,這樣便可防止攻擊者通過公開指令集的反匯編工具來分析隱藏組件的代碼。將軟件分割后的隱藏組件是在一個專有指令集的虛擬機上運行的。由于攻擊者不知道指令集的定義和編碼方式,所以即使得到隱藏組件的代碼,也無法分析和理解其語義。攻擊者為了能夠理解隱藏組件代碼的含義,就不得不通過逆向工程的手段分析整個虛擬機的代碼。而虛擬機是一個復雜的系統(tǒng),在沒有源代碼和相關文檔資料的條件下,通過逆向工程的手段去分析一個虛擬機是一個工程難題。而且,在本發(fā)明中,為了更好地防止軟件的盜版,向虛擬機中插入了數(shù)目眾多的用于其自身完整性校驗的代碼段,眾多校驗點構成一個網(wǎng)絡,各個校驗點間形成多重相互保護,使虛擬機具有了更強的防非法篡改功能,給試圖篡改軟件的攻擊者造成了極大的困難。2、在使用軟件的過程中,公開組件向虛擬機發(fā)出調用隱藏組件的指令后,運行隱藏組件代碼而獲取的實際計算機硬件ID信息會與許可證中授權運行軟件的計算機硬件ID信息進行比較,這樣便可有效地防止軟件在未經(jīng)授權的計算機上使用。3、在保護不同的軟件產(chǎn)品時,只需要改變本發(fā)明中的編譯器后端、虛擬機的裝載器和解釋器等幾個重要模塊即可,通用性強。4、在性能上,基于虛擬機的隱藏組件安全運行環(huán)境比傳統(tǒng)技術構造的安全運行環(huán)境有了大幅地提高。對于交互式應用,這種提高更為明顯。公開組件與隱藏組件間的響應延遲會因虛擬機的采用而明顯降低,極大地改善和提升了用戶體驗。性能的改善也使得可以在隱藏組件中使用更復雜的算法,從而降低了受黑盒子攻擊的風險,提高了安全性。5、本發(fā)明為軟件開發(fā)商提供了一條有效防止軟件盜版的途徑,使在線發(fā)布軟件成為現(xiàn)實,軟件成本極大降低。圖1是本發(fā)明軟件保護方法的實現(xiàn)流程圖2是設定校驗器和構造校驗區(qū)間的一個實例;圖3是為校驗器選擇校驗區(qū)間而形成強連通校驗關系圖的一個實例;圖4是使用軟件時的本發(fā)明實施軟件保護的流程圖;圖5是擁有合法許可證的軟件運行效果圖;圖6是沒有合法許可證的軟件運行效果圖。具體實施例方式下面將結合附圖對本發(fā)明作進一步的說明。如圖1所示,軟件開發(fā)商可以通過以下步驟A至H來將軟件進行分割處理,以使軟件得到有效的保護。A.定義一用于編寫隱藏組件的高級程序設計語言HCPL。高級程序設計語言HCPL是軟件開發(fā)商自己定義的一種編寫語言,該HCPL可采用現(xiàn)有的程序設計語言中的語法規(guī)則,如采用與JAVA語言相類似的語法規(guī)則,當然,HCPL也可完全由軟件開發(fā)商自行規(guī)定一套新的、不同于現(xiàn)有程序設計語言的語法規(guī)則。B.定義虛擬機規(guī)范,該規(guī)范包括非公開的虛擬機專有指令集和虛擬機文件格式。C.實現(xiàn)高級程序設計語言HCPL到虛擬機專有指令集的編譯器。該編譯器為可變目標編譯器,即對于不同軟件,該可變目標編譯器的后端是不同的,但其它部分相同。D.實現(xiàn)以解釋器作為執(zhí)行引擎的虛擬機。一個典型的虛擬機是由裝載器、執(zhí)行引擎、存儲管理等組件構成的。本發(fā)明中的虛擬機采用解釋器作為執(zhí)行引擎,該解釋器用來解釋執(zhí)行隱藏組件的代碼。由于虛擬機的執(zhí)行引擎采用解釋器,故虛擬機可以很容易地被移植到不同的處理器和操作系統(tǒng)平臺上。但是,解釋器的一個固有問題就是其解釋執(zhí)行代碼的速度要比直接執(zhí)行本地代碼的速度慢很多。所以本發(fā)明的解釋器采用了基于交換線代碼(SwitchThreadedCode)技術的高效解釋器,該高效解釋器采用C語言的switch語句構造了一個高效的跳轉表。而且由于只有隱藏組件是通過解釋器來執(zhí)行的,所以通過合理分割軟件,使隱藏組件代碼的運行時間只占軟件總體運行時間的一小部分,就可以有效地提升代碼執(zhí)行速度。E.將軟件分割為公開組件和隱藏組件兩部分。其中,隱藏組件只占整個軟件的一小部分,其主要包括軟件的重要代碼,如軟件主要模塊中的若干核心算法和關鍵代碼。公開組件離開了隱藏組件,是不能單獨運行計算的。F.在公開組件中添加提取用戶計算機硬件ID信息模塊,以用于在安裝軟件、運行該模塊后提取用戶計算機硬件ID信息而生成用戶可識別的注冊碼。該提取用戶計算機硬件ID信息模塊可以設置在公開組件的窗口中,如設置為一個幫助菜單下的選項。G.將步驟D得到的虛擬機和步驟F得到的公開組件的源代碼編譯為可執(zhí)行文件。H.將軟件分割后,使用高級程序設計語言HCPL重新實現(xiàn)隱藏組件,并將重新實現(xiàn)的隱藏組件使用上述可變目標編譯器編譯為虛擬機代碼,而作為一單獨的隱藏組件文件。由于本發(fā)明不采用即時編譯技術,所以隱藏組件的代碼永遠不會被編譯成本地代碼,這樣便可防止攻擊者通過公開指令集的反匯編工具來分析隱藏組件的代碼。并且,用HCPL高級程序設計語言編寫隱藏組件和將隱藏組件編譯為虛擬機代碼的目的是若攻擊者得到隱藏組件,攻擊者無法分析、理解隱藏組件的代碼。虛擬機是一個復雜的系統(tǒng),在沒有源代碼和相關文檔資料的條件下,通過逆向工程的手段去分析一個虛擬機是一個工程難題。本發(fā)明中的虛擬機是安全運行環(huán)境的一個核心模塊,為了使其更好地防止軟件盜版,在本發(fā)明中,向其插入了數(shù)目眾多的用于其自身完整性校驗的代碼段,眾多校驗點構成一個網(wǎng)絡,各個校驗點間形成多重相互保護,以使虛擬機具有很強的防非法篡改功能,可給試圖篡改軟件的攻擊者造成極大困難。具體實現(xiàn)過程如下1、定義一校驗器模板,該校驗器模板為一段代碼,該段代碼負責校驗一個校驗區(qū)間的完整性,但未定義被校驗區(qū)間的起始結束位置,并且在該校驗器模板中含有配平代碼(即校驗器所在校驗區(qū)間的配平值)。2、將校驗器模板以匯編語言的形式植入虛擬機的源代碼中。在這里,校驗器模板是以匯編語言的形式植入虛擬機的源代碼中的,而不是直接植入可執(zhí)行文件中。這樣,便可在植入階段避免對目標文件(即可執(zhí)行文件)的直接操作,從而避免了對于二進制目標文件中跳轉指令偏移量的調整、寄存器的重新分配等繁瑣的處理,同時也避免了跨平臺時對于不同目標文件格式繁瑣的支持。3、在校驗器模板中設定校驗器和構造校驗區(qū)間設防篡改區(qū)間為/[s,e]。取位于區(qū)間/中的校驗器n個,按照其地址由小到大分別記為C,,C2,...,C。取位于區(qū)間/外的高地址區(qū)域的校驗器W-l個,按照其地址由小到大分別記為Cn^Cw,...,^,,。構造"+;-2個校驗區(qū)間/,[■,,e,],<formula>formulaseeoriginaldocumentpage8</formula>,對于<formula>formulaseeoriginaldocumentpage8</formula>,隨機選擇&,e,,并使得<formula>formulaseeoriginaldocumentpage8</formula>,對于<formula>formulaseeoriginaldocumentpage8</formula>,隨機選擇A,e,.,并使得<formula>formulaseeoriginaldocumentpage8</formula>例如,如圖2所示,防篡改區(qū)間內設有5個校驗器,高地址區(qū)域內設有3個校驗器,整個區(qū)間內共設有7個校驗區(qū)間。按照上述方法構造校驗區(qū)間的好處是由于上述方法中保證了每個校驗區(qū)間都被一個校驗器所校驗,所以區(qū)間/中每個位置至少被m-2個校驗區(qū)間所包含,即區(qū)間/中每個位置都會被多次校驗,這樣,區(qū)間/中每個位置都會受到多個校驗器的多重保護。4、為校驗器選擇校驗區(qū)間構造自然數(shù)1到"+m—2的一個任意排列,記為fl,,fl2,…,a肝w—2,則校驗器C。,用來校驗區(qū)間乙,校驗器C。用來校驗區(qū)間/。,以此類推,直至校驗器C。用來校驗區(qū)間、。為校驗器選擇校驗區(qū)間后,各個校驗器間便存在一定的校驗關系,為此,定義一校驗關系圖,以清楚明了各校驗器間的校驗次序。定義校驗關系圖是一個有向圖,圖中每一個節(jié)點代表一個校驗器,圖中存在從節(jié)點i到節(jié)點j的有向邊,當且僅當校驗器j所在區(qū)間被校驗器i所校驗。按照校驗關系圖的定義,由步驟3和4可得到一個校驗關系圖,且該校驗關系圖是強連通的。這就意味著,如果所有的校驗器都在虛擬機運行中被有效執(zhí)行,那么,即使對防篡改區(qū)間內的代碼做一字節(jié)的修改,也需要使所有的校驗器全部失效,才能逃避抗篡改機制的檢測,而這在實際工程中是很難做到的。例如,如圖3所示,為圖2中的校驗器選擇校驗區(qū)間。取自然數(shù)1到7的一個任意排列4,7,2,5,3,6,1,則形成的校驗關系圖中存在一個包括C一、1,2,...,7全部頂點的環(huán)(見圖3中的粗有向線),故該校驗關系圖是強連通的。5、為每一校驗區(qū)間計算配平值對于校驗區(qū)間/,,選取校驗器C,中的配平位置存放配平值。按照校驗區(qū)間結束地址由低到高的順序,逐個計算每個校驗區(qū)間的配平值。配平是若干字節(jié)的不可達代碼。因為不可達,所以配平值可以更改為任意值,以便達到使其所在校驗區(qū)間的校驗和為零的目的,從而達到校驗目的。另外,對于校驗器模板、配平值、校驗器中的校驗函數(shù)以及校驗器的響應機制,可以進行多樣性處理,以防止攻擊者破解一個保護點后,通過模式匹配發(fā)現(xiàn)其它保護點。實際應用中,步驟3至5是在虛擬機與公開組件形成的可執(zhí)行文件上操作的,其可作為可執(zhí)行文件的補丁來發(fā)布。綜上所述,整個軟件被分割為了兩個部分,一個是公開組件,另一個是隱藏組件。公開組件與虛擬機結合而生成一個可執(zhí)行文件,該可執(zhí)行文件將要處于的環(huán)境被看作一個不可信環(huán)境。隱藏組件作為一個單獨的數(shù)據(jù)文件存在,軟件開發(fā)商可在隱藏組件上設置數(shù)字簽名,該隱藏組件可被存儲在任何可讀存儲介質中。軟件進行以上分割處理后,軟件開發(fā)商便可發(fā)布可執(zhí)行文件和補丁了(也可直接發(fā)布打過補丁的可執(zhí)行文件),而隱藏組件文件是在用戶提供軟件注冊碼后反饋給用戶的,且反饋的隱藏組件文件中添加了代表用戶使用的計算機硬件ID信息的許可證(即許可碼)。如圖4所示,若用戶購買了軟件開發(fā)商發(fā)布的軟件(這里指打過補丁的可執(zhí)行文件),則可通過以下步驟來使用軟件-a.在計算機中安裝可執(zhí)行文件。b.打開公開組件,運行其中的提取用戶計算機硬件ID信息模塊,該模塊將提取的計算機硬件ID信息轉換為軟件注冊碼。c.用戶將得到的注冊碼提供給軟件開發(fā)商,如email發(fā)送給開發(fā)商。d.若該注冊碼合法,則軟件開發(fā)商將用戶提供的注冊碼生成為軟件使用許可證,該許可證包含了該用戶的計算機硬件ID信息,軟件開發(fā)商將該許可證添加到隱藏組件文件中,然后將該隱藏組件文件反饋給用戶,進行下一步驟。若該注冊碼非法,則軟件開發(fā)商不進行隱藏組件文件的反饋,步驟中斷。e.用戶在計算機中裝入軟件開發(fā)商反饋的隱藏組件文件。f.裝載器將隱藏組件文件中的隱藏組件代碼裝載到虛擬機中。若軟件開發(fā)商在隱藏組件文件中設置了數(shù)字簽名,則在裝載隱藏組件代碼的同時,對該隱藏組件的代碼進行軟件開發(fā)商的數(shù)字簽名驗證,若通過驗證,則成功裝載該隱藏組件,進行下一步驟,若沒有通過驗證,則不能裝載該隱藏組件,無法使用軟件,步驟中斷。g.用戶開始使用軟件在使用軟件的過程中,公開組件向虛擬機發(fā)出調用隱藏組件的指令,然后裝載到虛擬機上的隱藏組件代碼運行,將由隱藏組件代碼獲取的實際計算機硬件ID信息與許可證中授權運行軟件的計算機硬件ID信息進行比較,以防止軟件被非法拷貝。若相一致,則隱藏組件向公開組件提供正確的服務;若不一致,則隱藏組件向公開組件提供錯誤的服務。通過本發(fā)明的軟件保護方法分割處理軟件,可以有效防止軟件盜版。例如,圖5所示的軟件為正版軟件,其擁有合法的軟件使用許可證,故該軟件可以正常運行。而圖6所示的軟件為盜版軟件,其沒有合法的軟件使用許可證,故該軟件不能正常運行(見圖6彈出的錯誤對話框)。在實際使用本發(fā)明時,保護不同的軟件產(chǎn)品,只需要改變本發(fā)明中的編譯器后端、虛擬機的裝載器和解釋器等幾個重要模塊即可。另外,對于不同軟件的保護,HCPL、編譯器、虛擬機等可以使用完全不同的指令集和編碼,這樣,攻擊者即使花費極大努力破解了某個指令集的含義,其工作成果也無法推廣到其它軟件中去。下面,將本發(fā)明構造基于虛擬機的隱藏組件安全運行環(huán)境與公知的軟件鎖和Internet服務器構造的安全運行環(huán)境進行比較,以評價本發(fā)明的安全運行環(huán)境的性能。其中含有安全智能卡芯片的軟件鎖選取目前某主流軟件加密鎖作為比較對象。該軟件加密鎖內部采用通過EAL5+認證的PhilipsSmartMXTM系列安全智能卡芯片,有著優(yōu)良的抗物理攻擊特性。其和同類芯片相比,SmartMXTM系列芯片有著優(yōu)良的計算性能,其處理器主頻16MHz,總線寬度16位,用戶可用RAM大于2K字節(jié),使用250字節(jié)的獨立通信緩沖區(qū),采用864K字節(jié)的EEPROM存儲用戶算法及數(shù)據(jù),片上集成USBl.l接口。Internet服務器選取教育網(wǎng)內的兩臺計算機做模擬實驗,公開組件和隱藏組件間采用同步調用方式,由于Internet網(wǎng)絡的傳輸波動性比較大,實驗記錄10組數(shù)據(jù),最后選取時間最大值和平均值作比較。而本發(fā)明的安全運行環(huán)境如下AMDAthlonXP2500+處理器,主頻1.84GHz,512MDDRRAM。在三種安全運行環(huán)境中,各種類型數(shù)據(jù)運算所需的時間如下表所示<table>tableseeoriginaldocumentpage11</column></row><table>從上表可以看到,基于虛擬機的隱藏組件安全運行環(huán)境與軟件加密鎖相比,在性能上有兩個數(shù)量級的提高。造成這種現(xiàn)象的原因是當前PC處理器的運算速度遠遠高于智能卡芯片處理器。而且,軟件加密鎖的低速1/0,也是造成其運算性能低下的重要原因,即使不作任何運算,對軟件加密鎖的一次調用也需要19ms,若傳遞大量參數(shù),則性能更是急劇惡化。而對于Internet服務器,由于其評測程序計算量小,在服務器上的實際計算時間很少,調用的完成時間基本由當時的網(wǎng)絡延遲所決定,故而有很大的隨機性。如上表所示,在寬帶網(wǎng)絡下的測試結果尚表現(xiàn)不佳,那么在低速網(wǎng)絡下,其性能更無法保證。從上表的數(shù)據(jù)可以得到在性能上,基于虛擬機的隱藏組件安全運行環(huán)境比傳統(tǒng)技術構造的隱藏組件安全運行環(huán)境有了大幅地提高。對于交互式應用,這種提高更為明顯。公開組件與隱藏組件間的響應延遲會因虛擬機的采用而明顯降低,極大地改善和提升了用戶體驗。性能的改善也使得可以在隱藏組件中使用更復雜的算法,從而降低了受黑盒子攻擊的風險,提高了安全性。權利要求1、一種基于虛擬機的軟件保護方法,其特征在于它包括如下步驟A.定義一用于編寫隱藏組件的高級程序設計語言HCPL;B.定義虛擬機規(guī)范,該規(guī)范包括非公開的虛擬機專有指令集和虛擬機文件格式;C.實現(xiàn)高級程序設計語言HCPL到虛擬機專有指令集的編譯器;D.實現(xiàn)以解釋器作為執(zhí)行引擎的虛擬機;E.將軟件分割為公開組件和隱藏組件兩部分;F.在公開組件中添加提取用戶計算機硬件ID信息模塊,以用于在安裝軟件、運行該模塊后提取用戶計算機硬件ID信息而生成用戶可識別的注冊碼;G.將步驟D得到的虛擬機和步驟F得到的公開組件的源代碼編譯為可執(zhí)行文件;H.使用高級程序設計語言HCPL重新實現(xiàn)隱藏組件,將重新實現(xiàn)的隱藏組件使用編譯器編譯為虛擬機代碼,而作為一單獨的隱藏組件文件。2、根據(jù)權利要求1所述的基于虛擬機的軟件保護方法,其特征在于所述步驟D中,將校驗器模板以匯編語言的形式植入所述虛擬機的源代碼中,以使所述虛擬機具有防非法篡改功能。3、根據(jù)權利要求2所述的基于虛擬機的軟件保護方法,其特征在于植入所述校驗器模板后,還包括步驟1)設定校驗器和構造校驗區(qū)間;2)為校驗器選擇校驗區(qū)間;3)為每一校驗區(qū)間計算配平值。4、根據(jù)權利要求3所述的基于虛擬機的軟件保護方法,其特征在于所述步驟l)中,設定校驗器和構造校驗區(qū)間具體為設防篡改區(qū)間為I[s,e],取位于區(qū)間/中的校驗器n個,按照其地址由小到大分別記為c,,C2,…,c;,取位于區(qū)間/外的高地址區(qū)域的校驗器m-l個,按照其地址由小到大分別記為Cn+1,Cn+2,...,Cn+Mm-1,構造n+m—2個校驗區(qū)間I1,[s1,e1],I≤i≤n+m—2,對于I≤I≤m-1,隨豐幾選擇s,,e,,并使得尋s,.<s,C,<e,<C,+1,對于I≤i≤m-1,隨機選擇si,e1,并使得C,_m+1,<si<C,—m+2,C,<ei<C,+1。5、根據(jù)權利要求3所述的基于虛擬機的軟件保護方法,其特征在于所述步驟2)中,為所述校驗器選擇校驗區(qū)間具體為構造自然數(shù)1到"+m-2的一個任意排列,記為ai,a2,...,an+m-2,則校驗器Cai,用來校驗區(qū)間Iai,,校驗器Ca2,用來校驗區(qū)間Iai,以此類推,直至校驗器Can+m-2用來校驗Iai.6、根據(jù)權利要求l所述的基于虛擬機的軟件保護方法,其特征在于所述步驟D中,所述解釋器為高效解釋器,該高效解釋器采用C語言的switch語句構造了一個高效的跳轉表。7、根據(jù)權利要求l所述的基于虛擬機的軟件保護方法,其特征在于之后還包括步驟a.在計算機中安裝所述可執(zhí)行文件;b.運行所述公開組件中的提取用戶計算機硬件ID信息模塊,該模塊將提取的計算機硬件ID信息轉換為軟件注冊碼;C.用戶將該注冊碼提供給軟件開發(fā)商;d.若該注冊碼合法,則軟件開發(fā)商將用戶提供的注冊碼生成為軟件使用許可證,將該許可證添加到所述隱藏組件文件中,然后將該隱藏組件文件反饋給用戶,進行下一步驟,若該注冊碼非法,則軟件開發(fā)商不進行隱藏組件文件的反饋,步驟中斷;e.在計算機中裝入軟件開發(fā)商反饋的隱藏組件文件;f.所述虛擬機的裝載器將隱藏組件的代碼從隱藏組件文件中裝載到所述虛擬機中;g.用戶開始使用軟件。8、根據(jù)權利要求7所述的基于虛擬機的軟件保護方法,其特征在于在所述步驟f中,裝載隱藏組件文件的同時,對該隱藏組件的代碼進行軟件開發(fā)商的數(shù)字簽名驗證,若通過驗證,則成功裝載該隱藏組件,進行下一步驟,若沒有通過驗證,則不能裝載該隱藏組件,無法使用軟件,步驟中斷。9、根據(jù)權利要求7所述的基于虛擬機的軟件保護方法,其特征在于所述步驟g具體為所述公開組件向所述虛擬機發(fā)出調用隱藏組件的指令;運行裝載到所述虛擬機上的隱藏組件代碼,將由隱藏組件代碼獲取的實際計算機硬件ID信息與許可證中授權運行軟件的計算機硬件ID信息進行比較,若相一致,則隱藏組件向公開組件提供正確的服務,若不一致,則隱藏組件向公開組件提供錯誤的服務。全文摘要本發(fā)明公開了一種基于虛擬機的軟件保護方法,包括步驟定義用于編寫隱藏組件的高級程序設計語言;定義虛擬機規(guī)范;實現(xiàn)高級程序設計語言到虛擬機專有指令集的編譯器;實現(xiàn)以解釋器作為執(zhí)行引擎的虛擬機;將軟件分割為公開組件和隱藏組件;在公開組件中添加提取用戶計算機硬件ID信息模塊;將上述步驟得到的虛擬機和公開組件的源代碼編譯為可執(zhí)行文件;用高級程序設計語言重新實現(xiàn)隱藏組件,并將其編譯為虛擬機代碼,作為單獨的隱藏組件文件。本發(fā)明構造的安全運行環(huán)境的性能高,公開與隱藏組件間的響應延遲小,極大改善了用戶體驗。本發(fā)明為軟件開發(fā)商提供了一條有效防止軟件盜版的途徑,使在線發(fā)布軟件成為現(xiàn)實,軟件成本極大降低。文檔編號G06F21/00GK101201883SQ200710121950公開日2008年6月18日申請日期2007年9月18日優(yōu)先權日2007年9月18日發(fā)明者劉志成,周伯生,孫奎英申請人:北京賽柏科技有限責任公司