專(zhuān)利名稱(chēng):一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明屬于信息安全領(lǐng)域,尤其涉及一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net 虛擬機(jī)的系統(tǒng)和方法。
背景技術(shù):
.Net是微軟的新一代技術(shù)平臺(tái),是全新的基于互聯(lián)網(wǎng)的跨語(yǔ)言軟件開(kāi)發(fā)平 臺(tái),順應(yīng)了當(dāng)今軟件工業(yè)分布式計(jì)算、面向組件、企業(yè)級(jí)應(yīng)用、軟件服務(wù)化和以 Web為中心等大趨勢(shì)。.Net并非開(kāi)發(fā)語(yǔ)言,但是在.Net開(kāi)發(fā)平臺(tái)上可以支持多門(mén) 開(kāi)發(fā)語(yǔ)言。.Net最突出的一個(gè)特點(diǎn)是它能夠使用戶通過(guò)Web與眾多智能設(shè)備相 交互,同時(shí)確保用戶而不是應(yīng)用程序控制這個(gè)交互。這就使得微軟.Net體驗(yàn)是極 具個(gè)性化、綜合化的體驗(yàn),這種體驗(yàn)通過(guò)與XMLWeb服務(wù)相連的智能設(shè)備來(lái)實(shí) 現(xiàn)。這些智能設(shè)備是一種具有Web功能的工具,如個(gè)人電腦、掌上電腦、智能 電話,在這些設(shè)備中配上軟件,這些軟件使得它們?cè)谂c用戶、網(wǎng)絡(luò)、信息及其它 設(shè)備和服務(wù)的交互過(guò)程中更加智能化。
.Net語(yǔ)言的編譯分為兩個(gè)階段,首先高級(jí)語(yǔ)言被編譯成一種稱(chēng)作IL (中間 代碼)的中間語(yǔ)言,與高級(jí)語(yǔ)言相比,IL更像是機(jī)器語(yǔ)言,然而,IL卻包含一 些抽象概念(比如類(lèi)、異常),這也是這種語(yǔ)言被稱(chēng)為中間語(yǔ)言的原因。高級(jí)語(yǔ) 言在初次被編譯時(shí),編譯器做兩件事首先把編譯得到的IL存儲(chǔ)在DLL或EXE 中,然后為類(lèi)的每個(gè)方法創(chuàng)建一個(gè)stub函數(shù),此函數(shù)會(huì)調(diào)用即時(shí)編譯器,并將 自身的地址作為參數(shù)傳給編譯器。即時(shí)編譯器則從DLL或EXE中獲取相應(yīng)的IL, 編譯成機(jī)器語(yǔ)言,并將內(nèi)存中的原零時(shí)調(diào)用函數(shù)替換成機(jī)器語(yǔ)言。stub函數(shù)再調(diào) 用編譯器,將自身編譯為本地機(jī)器語(yǔ)言。JIT是一個(gè)典型的即時(shí)編譯器,JIT編 譯器在每段代碼執(zhí)行前進(jìn)行編譯,編譯的結(jié)果為本地靜態(tài)機(jī)器碼,如x86指令程 序的運(yùn)行環(huán)境下的機(jī)器碼。
.NET Framework沒(méi)有限制應(yīng)用程序的類(lèi)型,它可以實(shí)現(xiàn)開(kāi)發(fā)的應(yīng)用程序包 括Windows應(yīng)用程序、Web應(yīng)用程序、Web服務(wù)和其他各種類(lèi)型的應(yīng)用程序。由此.NET Framework的設(shè)計(jì)方式保證它可以用于各種語(yǔ)言比如C弁語(yǔ)言、C++、 Visual Basic、 JScript,甚至一些舊的語(yǔ)言,如COBOL。 .NET Framework功能實(shí) 現(xiàn)主要在于它包含一個(gè)非常大的代碼庫(kù)和.NET公共語(yǔ)言運(yùn)行庫(kù)(Common Language Runtime, CLR),代碼庫(kù)使得客戶可以在客戶語(yǔ)言(如C弁)中通過(guò)面向?qū)?象編程技術(shù)(OOP)來(lái)使用這些代碼,而.NET公共語(yǔ)言運(yùn)行庫(kù)負(fù)責(zé)管理用.NET庫(kù) 開(kāi)發(fā)的所有應(yīng)用程序的執(zhí)行。所以,使用.NET Framework編寫(xiě)應(yīng)用程序,實(shí)質(zhì) 就是使用.NET代碼庫(kù)編寫(xiě)代碼,編程語(yǔ)言被目標(biāo)操作系統(tǒng)能夠理解,需要編譯 代碼,將.NET Framework代碼庫(kù)中的代碼變譯成Microsoft的中間語(yǔ)言。
所謂虛擬機(jī),可以把它想象成一臺(tái)用軟件來(lái)模擬的機(jī)器,在這臺(tái)機(jī)器里有處 理器、內(nèi)存、寄存器等各種硬件,模擬執(zhí)行各種指令,在這臺(tái)機(jī)器上運(yùn)行的軟件 對(duì)運(yùn)行環(huán)境沒(méi)有特殊要求,所以虛擬機(jī)對(duì)在它上運(yùn)行的程序是透明的。例如,x86 虛擬機(jī)模擬的是x86指令程序的運(yùn)行環(huán)境,c51虛擬機(jī)模擬的是c51指令程序的 運(yùn)行環(huán)境
軟件保護(hù)裝置是一種通過(guò)標(biāo)準(zhǔn)的個(gè)人計(jì)算機(jī)接口提供信息加密處理的便攜 式設(shè)備。它內(nèi)置單片機(jī)或智能卡芯片,可以存儲(chǔ)密鑰或數(shù)字證書(shū),利用軟件保護(hù) 裝置內(nèi)置的密碼算法實(shí)現(xiàn)對(duì)信息的加密功能。軟件保護(hù)裝置能夠很好地保護(hù)軟件 版權(quán),防止盜版。加密鎖(又稱(chēng)加密狗或軟件狗)是一種常見(jiàn)的軟件保護(hù)裝置。
在現(xiàn)有技術(shù)中,虛擬機(jī)一般是用于PC機(jī)的。對(duì)于軟件保護(hù)裝置,由于存儲(chǔ) 空間、內(nèi)存有限,在其中安裝虛擬機(jī)有一定的難度。而且,即使在其中實(shí)現(xiàn)了虛 擬機(jī),也難以用其來(lái)運(yùn)行代碼。
發(fā)明內(nèi)容
為解決現(xiàn)有技術(shù)中,軟件保護(hù)裝置存儲(chǔ)空間和內(nèi)存有限,虛擬機(jī)難以在軟件 保護(hù)裝置中實(shí)現(xiàn)的問(wèn)題,本發(fā)明提供了一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬
機(jī)的系統(tǒng)和方法。
一方面,本發(fā)明提供了一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的系統(tǒng), 具體包括內(nèi)存管理模塊、指令解析模塊、加載模塊、系統(tǒng)庫(kù)模塊和接口庫(kù)模塊; 所述內(nèi)存管理模塊連接于所述加載模塊,用于管理內(nèi)存的分配、回收及復(fù)用; 所述指令解析模塊連接于所述加載模塊、系統(tǒng)庫(kù)模塊及接口庫(kù)模塊,用于在 軟件保護(hù)裝置中寫(xiě)入的代碼在軟件保護(hù)裝置中運(yùn)行時(shí),將代碼運(yùn)行時(shí)的中間指令(IL指令)解析成虛擬機(jī)所能運(yùn)行的指令;
所述加載模塊連接于所述指令解析模塊,用于寫(xiě)入軟件保護(hù)裝置中的代碼在 軟件保護(hù)裝置中運(yùn)行時(shí),根據(jù)所述指令解析模塊的需要將指定的內(nèi)容加載到內(nèi)存 中;
所述系統(tǒng)庫(kù)模塊連接于所述指令解析模塊,用于在軟件保護(hù)裝置中模擬主機(jī) 上的系統(tǒng)庫(kù);
所述接口庫(kù)模塊連接于所述指令解析模塊,用于實(shí)現(xiàn)主機(jī)和軟件保護(hù)裝置及 軟件保護(hù)裝置內(nèi)各部分之間的通信。 所述軟件保護(hù)裝置為加密鎖。
所述內(nèi)存管理模塊通過(guò)引用計(jì)數(shù)(reference count)和/或垃圾回收(garbage collection)機(jī)制來(lái)管理內(nèi)存。
本發(fā)明還提供了一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的方法,具體如
下
1) 、實(shí)現(xiàn)內(nèi)存管理
由于系統(tǒng)內(nèi)存很小,采用多種內(nèi)存分配策略以達(dá)到最優(yōu)使用內(nèi)存;內(nèi)存根據(jù) 需要分為兩個(gè)池,分別為固定大小內(nèi)存池,可變內(nèi)存池;通過(guò)引用計(jì)數(shù)(reference count)禾口/或垃圾回收(garbage collection)機(jī)制來(lái)管理內(nèi)存;
2) 、實(shí)現(xiàn)可加載核心代碼的加載器
在解析運(yùn)行代碼時(shí),根據(jù)需要在被執(zhí)行的文件中尋找相應(yīng)的內(nèi)容加載到內(nèi)存 中供指令解析使用;
3) 、實(shí)現(xiàn)核心代碼解析的指令解析器 實(shí)現(xiàn)用于控制整個(gè)執(zhí)行流程的指令解析器;
4) 、實(shí)現(xiàn)系統(tǒng)庫(kù) 實(shí)現(xiàn)相應(yīng)的系統(tǒng)調(diào)用及功能;
5) 、實(shí)現(xiàn)接口庫(kù)
實(shí)現(xiàn)主機(jī)和軟件保護(hù)裝置以及軟件保護(hù)裝置內(nèi)各部分之間的通信。 所述一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的方法,還可以包括核心代
碼簡(jiǎn)化優(yōu)化的步驟。
所述核心代碼簡(jiǎn)化優(yōu)化的方法可以但不限于哈希算法、函數(shù)數(shù)組等。所述實(shí)現(xiàn)內(nèi)存管理是指實(shí)現(xiàn)內(nèi)存的分配、回收及復(fù)用。
所述步驟2中,在軟件保護(hù)裝置中實(shí)現(xiàn)加載器,是為了將寫(xiě)入軟件保護(hù)裝置 的代碼分段加載到軟件保護(hù)裝置的內(nèi)存。
所述步驟3,在軟件保護(hù)裝置中實(shí)現(xiàn)(植入)的系統(tǒng)庫(kù)與主機(jī)中的系統(tǒng)庫(kù)相 對(duì)應(yīng)。
有益效果本發(fā)明通過(guò)在軟件保護(hù)裝置中實(shí)現(xiàn)內(nèi)存管理裝置、加載裝置、指
令解析裝置、系統(tǒng)庫(kù)裝置和接口庫(kù)裝置,從而在軟件保護(hù)裝置中實(shí)現(xiàn)了.Net虛 擬機(jī),允許用戶根據(jù)需要選擇不同的.Net開(kāi)發(fā)語(yǔ)言,將其植入軟件保護(hù)裝置,解 決了軟件保護(hù)裝置內(nèi)存有限的問(wèn)題。
圖1是本發(fā)明實(shí)施例一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的系統(tǒng)的結(jié) 構(gòu)示意圖。
圖2是本發(fā)明實(shí)施例一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的方法的流程圖。
具體實(shí)施例
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí) 施方式作進(jìn)一步地詳細(xì)描述。
如圖1所示,本發(fā)明提供了一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn)的.Net虛擬機(jī)的 一個(gè)優(yōu)選實(shí)施例。在本實(shí)施例中,軟件保護(hù)裝置具體為加密鎖。本實(shí)施例中用戶 使用VS2005微軟最新的IDE環(huán)境,以托管代碼中任一代碼類(lèi)型開(kāi)發(fā)其所需軟件, 并將該軟件中核心代碼植入到加密鎖。如圖中所示,該加密鎖中實(shí)現(xiàn).Net虛擬機(jī) 的系統(tǒng)包括內(nèi)存管理模塊101、加載模塊102、指令解析模塊103、系統(tǒng)庫(kù)模塊 104和接口庫(kù)模塊105;
內(nèi)存管理模塊101連接于加載模塊102,用于管理內(nèi)存的分配、回收及復(fù)用; 由于系統(tǒng)內(nèi)存很小,采用多種內(nèi)存分配策略以達(dá)到最優(yōu)使用內(nèi)存;內(nèi)存根據(jù)需要 分為兩個(gè)池,分別為固定大小內(nèi)存池,可變內(nèi)存池;通過(guò)引用計(jì)數(shù)(reference count) 和/或垃圾回收(garbage collection)機(jī)制來(lái)管理內(nèi)存;
加載模塊102連接于內(nèi)存管理模塊101和指令解析模塊103,用于在被保護(hù)
7核心代碼在加密鎖中運(yùn)行時(shí),根據(jù)指令解析模塊103的需要將被保護(hù)核心代碼加 載到內(nèi)存中;
指令解析模塊103連接于加載模塊102、系統(tǒng)庫(kù)模塊104、接口庫(kù)模塊105, 用于被保護(hù)核心代碼在軟件保護(hù)裝置中運(yùn)行時(shí),實(shí)現(xiàn)用軟件保護(hù)裝置所能運(yùn)行的 指令模擬被保護(hù)核心代碼運(yùn)行后得到的中間指令;
系統(tǒng)庫(kù)模塊104連接于指令解析模塊103,用于在加密鎖內(nèi)實(shí)現(xiàn)系統(tǒng)庫(kù),實(shí) 現(xiàn)核心代碼在加密鎖內(nèi)運(yùn)行需要調(diào)用系統(tǒng)庫(kù)時(shí),直接在鎖內(nèi)調(diào)用;
接口庫(kù)模塊105連接于指令解析模塊103,用于在加密鎖內(nèi)實(shí)現(xiàn)接口庫(kù),完 成主機(jī)、加密鎖及加密鎖內(nèi)部各組成部分的通信。
如圖2所示,本發(fā)明還提供了一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的 方法,軟件保護(hù)裝置連接于主機(jī),軟件保護(hù)裝置中己寫(xiě)入核心代碼,軟件保護(hù)裝 置具體為加密鎖,具體如下
201、 實(shí)現(xiàn)內(nèi)存管理
由于系統(tǒng)內(nèi)存很小,采用多種內(nèi)存分配策略以達(dá)到最優(yōu)使用內(nèi)存;內(nèi)存根據(jù) 需要分為兩個(gè)池,分別為固定大小內(nèi)存池,可變內(nèi)存池;通過(guò)引用計(jì)數(shù)(reference count)禾口/或垃圾回收(garbage collection)機(jī)制來(lái)管理內(nèi)存。
202、 在加密鎖中實(shí)現(xiàn)可加載核心代碼的加載器
本實(shí)施例中,加密鎖的內(nèi)存有限,實(shí)現(xiàn)核心代碼加載就是分段把核心代碼加 載到加密鎖內(nèi)存,進(jìn)而需要在加密鎖內(nèi)植入加載器,加載器其實(shí)就是虛擬機(jī)在運(yùn) 行過(guò)程中定位文件中的數(shù)據(jù),譬如要想知道入口點(diǎn),加載器根據(jù)文件結(jié)構(gòu)獲取入 口點(diǎn)然后返回,如果還想知道入口點(diǎn)函數(shù)的IL代碼,加載器則返回給虛擬機(jī)入 口點(diǎn)函數(shù)代碼在文件中的偏移。
本實(shí)施例獲取.Net程序入口點(diǎn)的步驟和代碼,具體如下 .Net程序都有IMAGE—COR20—HEADER結(jié)構(gòu),獲取 IMAGE—COR20—HEADER結(jié)構(gòu)后,IMAGE—COR20—HEADER.EntryPointToken 是入口點(diǎn)TOKEN
PIMAGE—DOS—HEADER m_pDosHeader; PIMAGE—NT—HEADERS m_pNtHeader;PIMAGE一FILE—HEADER m_pFileHeader;
PIMAGE—OPTIONAL—HEADER m_pOptionalHeader;
PIMAGE—SECTION—HEADER m_pSectionHeader;
PIMAGE—DATA—DIRECTORY m_pDataDirectory; PIMAGE一CO詣一HEADER一X m_pCor20x;
〃m—lpBase為內(nèi)存PE的映像 m_pDosHeadei=(PIMAGE—DOS—HEADER)m一lpBase;
m_pNtHeader=(PIMAGE_NT—HEADERS) ((BYTE *)m_pDosHeader+m_pDosHeader->e—lfanew);
m_pFileHeader=(PIMAGE—FILE—HEADER) ((BYTE *)m_pDosHeader+m_pDosHeader->e—lfanew+4);
m_pOptionalHeader=(PIMAGE—OPTIONAL—HEADER) ((BYTE *)m_pNtHeader+4+sizeof(IMAGE—FILE—HEADER));
m_pCor20x=Rva2Ra\v—x (m_pOptionalHeader->DataDirectory [IMAGE一DIRECTORY一ENTRY—COM一DESCRIPTOR].VirtualAddress);
Token Entry Token: m_pCor20x. EntryPointToken; 203、在加密鎖中實(shí)現(xiàn)可實(shí)現(xiàn)核心代碼解析的指令解析器 實(shí)際應(yīng)用中,用戶開(kāi)發(fā)被保護(hù)軟件所用的任一類(lèi)型托管代碼在主機(jī)上運(yùn)行 時(shí),先運(yùn)行得到IL中間語(yǔ)言,然后,微軟虛擬機(jī)在運(yùn)行IL中間語(yǔ)言時(shí)將其編譯 成機(jī)器語(yǔ)言,實(shí)現(xiàn)被保護(hù)軟件的功能;本實(shí)施例中,核心代碼在加密鎖內(nèi)運(yùn)行時(shí), 是通過(guò)指令解析完成核心代碼的運(yùn)行,從而實(shí)現(xiàn)核心代碼的功能,返回主機(jī)所需 核心代碼運(yùn)行結(jié)果。核心代碼簡(jiǎn)化優(yōu)化的方法為哈希算法或函數(shù)數(shù)組。
譬如主機(jī)中,被保護(hù)軟件運(yùn)行得到的IL中間語(yǔ)言中有個(gè)add,具體運(yùn)行過(guò)程如下-
static void add(int a, ing b)
return a+b;
這個(gè)函數(shù)編譯后的IL是 .method private hidebysig static int32
'add' (int32 a,
int32 b) cil managed
〃 SIG: 00 02 08 08 08
〃方法在RVA 0x2109處開(kāi)始
〃代碼大小 4 (0x4) .m ixstack 8
IL一0000: /* 02 | */
IL—0001: /* 03 I */
IL—0002: /* 58 | */
IL—0003: /* 2A | */ ret
ldarg. 0 ldaxg. 1 add
在加密鎖內(nèi),核心代碼運(yùn)行得到的IL中間語(yǔ)言有個(gè)add,加密鎖內(nèi)應(yīng)用相 應(yīng)的c語(yǔ)言實(shí)現(xiàn)add的功能,具體為首先獲取傳入?yún)?shù)的值,然后把兩個(gè)參數(shù) 入棧,遇到add時(shí)把棧頂?shù)膬蓚€(gè)元素出棧然后相加,再把結(jié)果入棧,最后返回
PushStack(arg.O) 〃把0號(hào)參數(shù)即第一個(gè)參數(shù)的值入棧
PushStackOrg.1)〃把1號(hào)參數(shù)即第二個(gè)參數(shù)的值入棧
PushStack(PopStack(l)+PopStack(1)) 〃把棧頂兩個(gè)數(shù)據(jù)出棧相加后把結(jié)果壓棧 Return 〃返回
然后用C編譯器編譯成及其語(yǔ)言既可完成相同的功能。 204、在加密鎖中實(shí)現(xiàn)系統(tǒng)庫(kù)
實(shí)際應(yīng)用中,程序在主機(jī)運(yùn)行過(guò)程中要調(diào)用系統(tǒng)庫(kù),例如 C#:
static string String一ToUpper(string a)
string c = a-ToUpper(); return c;IL:
.method private hidebysig static string String—ToUpper(string a) cil managed 〃 SIG: 00 01 0E 0E
而在加密鎖中是不存在系統(tǒng)庫(kù)的,程序運(yùn)行到需要調(diào)用系統(tǒng)庫(kù)時(shí),加密鎖以 自身虛擬機(jī)中模擬的系統(tǒng)庫(kù)完成程序?qū)ο到y(tǒng)庫(kù)的調(diào)用,例如代碼
在上面的IL里面調(diào)用了一個(gè)[mscorlib]System.String::ToUpper函數(shù),這個(gè)是 系統(tǒng)庫(kù)里面的函數(shù),虛擬機(jī)中重新實(shí)現(xiàn)了這個(gè)函數(shù)(string_ToUpper())
PushStack(arg.O) 〃把0號(hào)參數(shù)即第一個(gè)參數(shù)的值入棧
string一ToUpper() 〃現(xiàn)在調(diào)用的是重新實(shí)現(xiàn)的把字符串全部變成大寫(xiě)的函數(shù) loc.O = PopStack(l) 〃把棧頂數(shù)據(jù)即轉(zhuǎn)換后的字符串賦給第一個(gè)局部變量 PushStack(loc.O) 〃把第一個(gè)局部變量的值入棧(返回值) Return 〃返回
最終實(shí)現(xiàn)的系統(tǒng)庫(kù)與主機(jī)中的系統(tǒng)庫(kù)相對(duì)應(yīng)。 205、在加密鎖中實(shí)現(xiàn)接口庫(kù)
本實(shí)施例中,接口庫(kù)的實(shí)現(xiàn)和上面實(shí)現(xiàn)系統(tǒng)庫(kù)一樣,這里有一個(gè)我們提供 的.net動(dòng)態(tài)庫(kù),封裝了調(diào)用加密鎖的一些接口,譬如RSA加解密,DES、 ECC 等等,虛擬機(jī)里面也要實(shí)現(xiàn)前面被封裝的那些接口函數(shù)。下面的例子是一個(gè)調(diào)用 RSA加密的示例
〃方法在RVA 0x210c處開(kāi)始 〃代碼大小 9 (0x9)
.腿xstack 1
.locals init (string V—0)
IL—0000: /* 02 | */ ldarg. 0
IL一0001: /* 6F | (OA)000018 */ callvirSystem. String::ToUpper()
IL一0006: /* OA | */ stloc.0
IL—0007: /* 06 | */ ldloc. 0
IL一0008: /* 2A | */ ret
} 〃 end of method RsaTest::String一ToUpper
ret = rsa. Encrypt (tData, ref rLength);
IL—0052: 07
*/ ldloc. 1IL一0053: A 12 i 00 */ ldloca. s V一O
IL—0055: /* 6F | (OA)000014 */ callvirtinstance uint8Feitian. Rockey7. RSA: :Encrypt (uint8口,
int32&) VM:
在上面的IL里面調(diào)用了一個(gè)[Feitian. Rockey7]Feitian. Rockey7, RSA::Encrypt 函數(shù),這個(gè)是接口庫(kù)里面的函數(shù),虛擬機(jī)中重新實(shí)現(xiàn)了這個(gè)函數(shù)(RSA一Encrypt())
PushStack(k)c.1)〃把1號(hào)局部變量即第二個(gè)局部變量的值入棧 PushStack(GetAddress(loc.O)) 〃把0號(hào)局部變量即第一個(gè)局部變量的地址入棧 RSA—Encrypt () 〃調(diào)用重新實(shí)現(xiàn)的RSA加密
從而,可以實(shí)現(xiàn)主機(jī)和加密鎖以及加密鎖內(nèi)各部分之間的通信。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù) 范圍之內(nèi)。
1權(quán)利要求
1.一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的系統(tǒng),其特征在于,所述系統(tǒng)包括內(nèi)存管理模塊、指令解析模塊、加載模塊、系統(tǒng)庫(kù)模塊和接口庫(kù)模塊;所述內(nèi)存管理模塊連接于所述加載模塊,用于管理內(nèi)存的分配、回收及復(fù)用;所述指令解析模塊連接于所述加載模塊、系統(tǒng)庫(kù)模塊和接口庫(kù)模塊,用于在軟件保護(hù)裝置中寫(xiě)入的代碼在軟件保護(hù)裝置中運(yùn)行時(shí),將代碼運(yùn)行時(shí)的中間指令解析成虛擬機(jī)所能運(yùn)行的指令;所述加載模塊連接于所述指令解析模塊,用于寫(xiě)入軟件保護(hù)裝置中的代碼在軟件保護(hù)裝置中運(yùn)行時(shí),根據(jù)所述指令解析模塊的需要將指定的內(nèi)容加載到內(nèi)存中;所述系統(tǒng)庫(kù)模塊連接于所述指令解析模塊,用于在軟件保護(hù)裝置中模擬主機(jī)上的系統(tǒng)庫(kù);所述接口庫(kù)模塊連接于所述指令解析模塊,用于實(shí)現(xiàn)主機(jī)和軟件保護(hù)裝置及軟件保護(hù)裝置內(nèi)各部分之間的通信。
2. 根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述軟件保護(hù)裝置為加密鎖。
3. 根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述內(nèi)存管理模塊通過(guò)引用 計(jì)數(shù)和/或垃圾回收機(jī)制來(lái)管理內(nèi)存。
4. 一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的方法,其特征在于,所述 方法包括如下步驟1) 、實(shí)現(xiàn)內(nèi)存管理由于系統(tǒng)內(nèi)存很小,采用多種內(nèi)存分配策略以達(dá)到最優(yōu)使用內(nèi)存;內(nèi)存根據(jù) 需要分為兩個(gè)池,分別為固定大小內(nèi)存池,可變內(nèi)存池;通過(guò)引用計(jì)數(shù)和/或垃 圾回收機(jī)制來(lái)管理內(nèi)存;2) 、實(shí)現(xiàn)可加載核心代碼的加載器在解析運(yùn)行代碼時(shí),根據(jù)需要在被執(zhí)行的文件中尋找相應(yīng)的內(nèi)容加載到內(nèi)存中供指令解析使用;3) 、實(shí)現(xiàn)核心代碼解析的指令解析器 實(shí)現(xiàn)用于控制整個(gè)執(zhí)行流程的指令解析器;4) 、實(shí)現(xiàn)系統(tǒng)庫(kù) 實(shí)現(xiàn)相應(yīng)的系統(tǒng)調(diào)用及功能;5) 、實(shí)現(xiàn)接口庫(kù)實(shí)現(xiàn)主機(jī)和軟件保護(hù)裝置以及軟件保護(hù)裝置內(nèi)各部分之間的通信。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述方法還包括核心代碼簡(jiǎn) 化優(yōu)化的步驟。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述核心代碼簡(jiǎn)化優(yōu)化的方 法為哈希算法或函數(shù)數(shù)組。
7. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述實(shí)現(xiàn)內(nèi)存管理是指實(shí)現(xiàn) 內(nèi)存的分配、回收及復(fù)用。
8. 根據(jù)權(quán)利要求4所述的方法,其特征在于,實(shí)現(xiàn)的系統(tǒng)庫(kù)與主機(jī)中的系 統(tǒng)庫(kù)相對(duì)應(yīng)。
全文摘要
本發(fā)明提供了一種在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的系統(tǒng)和方法,屬于信息安全領(lǐng)域。所述在軟件保護(hù)裝置中簡(jiǎn)化實(shí)現(xiàn).Net虛擬機(jī)的系統(tǒng)包括內(nèi)存管理模塊、指令解析模塊、加載模塊、系統(tǒng)庫(kù)模塊和接口庫(kù)模塊。所述方法包括如下步驟實(shí)現(xiàn)內(nèi)存管理;實(shí)現(xiàn)可加載核心代碼的加載器;實(shí)現(xiàn)核心代碼解析的指令解析器;實(shí)現(xiàn)系統(tǒng)庫(kù);以及實(shí)現(xiàn)接口庫(kù)。本發(fā)明通過(guò)在軟件保護(hù)裝置中實(shí)現(xiàn)內(nèi)存管理裝置、指令解析裝置、加載裝置、系統(tǒng)庫(kù)裝置和接口庫(kù)裝置,從而實(shí)現(xiàn)了.Net虛擬機(jī),允許用戶根據(jù)自己的需要選擇不同的.Net開(kāi)發(fā)語(yǔ)言,將其植入軟件保護(hù)裝置,解決了軟件保護(hù)裝置內(nèi)存有限的問(wèn)題。
文檔編號(hào)G06F21/00GK101593258SQ20081011314
公開(kāi)日2009年12月2日 申請(qǐng)日期2008年5月28日 優(yōu)先權(quán)日2008年5月28日
發(fā)明者于華章, 舟 陸 申請(qǐng)人:北京飛天誠(chéng)信科技有限公司