欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

.Net程序保護方法及裝置的制作方法

文檔序號:6613863閱讀:229來源:國知局
專利名稱:.Net程序保護方法及裝置的制作方法
技術領域
本發(fā)明涉及軟件保護領域,特別涉及一種.Net程序保護方法及裝置。
技術背景.Net是微軟的新一代技術平臺,是全新的基于互聯網的跨語言軟件開發(fā)平臺,順應了當 今軟件工業(yè)分布式計算、面向組件、企業(yè)級應用、軟件服務化和以Web為中心等大趨勢。.Net 并非開發(fā)語言,但是在.Net開發(fā)平臺上可以支持多門開發(fā)語言。.Net最突出的一個特點是它 能夠使用戶通過Web與眾多智能設備相交互,同時確保用戶而不是應用程序控制這個交互。 這就使得微軟.Net體驗是極具個性化、綜合化的體驗,這種體驗通過與XML Web服務相連 的智能設備來實現。這些智能設備是一種具有Web功能的工具,如個人電腦、掌上電腦、智 能電話,在這些設備中配上軟件,這些軟件使得它們在與用戶、網絡、信息及其它設備和服 務的交互過程中更加智能化。.Net語言的編譯分為兩個階段,首先高級語言被編譯成一種稱作IL (中間代碼)的中間語 言,與高級語言相比,IL更像是機器語言,然而,IL卻包含一些抽象概念(比如類、異常), 這也是這種語言被稱為中間語言的原因。高級語言在初次被編譯時,編譯器做兩件事首先 把編譯得到的IL存儲在DLL或EXE中,然后為類的每個方法創(chuàng)建一個stub函數,此函數會調用 即時編譯器,并將自身的地址作為參數傳給編譯器。即時編譯器則從DLL或EXE中獲取相應 的IL,編譯成機器語言,并將內存中的原零時調用函數替換成機器語言。stub函數再調用編譯 器,將自身編譯為本地機器語言。JIT是一個典型的即時編譯器,JIT編譯器在每段代碼執(zhí)行 前進行編譯,編譯的結果為本地靜態(tài)機器碼,如x86指令程序的運行環(huán)境下的機器碼。所謂虛擬機,可以把它想象成一臺用軟件來模擬的機器,在這臺機器里有處理器、內存、 寄存器等各種硬件,模擬執(zhí)行各種指令,在這臺機器上運行的軟件對運行環(huán)境沒有特殊要求, 所以虛擬機對在它上運行的程序是透明的。例如,x86虛擬機模擬的是x86指令程序的運行 環(huán)境,c51虛擬機模擬的是c51指令程序的運行環(huán)境。編譯過程是指將某高級語言編寫的源程序翻譯成與之等價的低級語言(匯編語言或機器 語言)的目標程序的過程。反編譯可以看成是編譯的逆過程,即將以機器語言形式存在的目標
代碼翻譯成與其功能等價的匯編語言形式或髙級語言形式的代碼的過程。指令變換是指將一 種平臺的目標指令根據程序執(zhí)行的邏輯轉換成另一種平臺的目標指令的過程。.Net上最突出的架構特性在提供了超乎尋常的便利的同時,也帶來了一個非常敏感的缺點 一.Net程序集可被非常容易地反編譯。針對易反編譯這一缺點,現有技術中有很多.Net中間 代碼的解決方案,但效果并不理想。因為這些解決方案除了降低反編譯后代碼的可閱讀性外, 并沒有達到真正反編譯效果。混淆過的源代碼仍然可以被輕易反編譯后完全暴露在有不良企 圖的攻擊者面前。即使開發(fā)商采用非常強大的加密算法,但是由于最終運行時還是會將其解 密后在計算機內存中運行,所以很容易被解密者獲取。目前針對.Net程序的純軟件保護方法,整個過程都在計算機內完成,具體實現步驟如下1) 將.Net程序經過反編譯生成IL文本文件;2) 開發(fā)商改寫IL文本文件,在需要保護的內容之外加入解密函數;3) 將改寫后的IL文本經過編譯生成可以在.Net平臺上執(zhí)行的二進制指令;4) 通過軟件對二進制指令文件中需要保護的部分進行加密;5) 運行時通過事先寫入的解密函數對加密的二進制指令進行解密,從而實現對該.Net 程序的保護。所謂"外殼"就是給可執(zhí)行的文件加上一個外殼。用戶執(zhí)行的實際上是這個外殼的程序, 而這個外殼程序負責把用戶原來的程序在內存中解開壓縮,并把控制權交還給解開后的真正 的程序,由于一切工作都是在內存中運行,用戶根本不知道也不需要知道其運行過程,并且 對執(zhí)行速度沒有什么影響。如果在外殼程序中加入對軟件鎖或鑰匙盤的驗證部分,它就是我 們所說的外殼加密了。外殼對程序進行壓縮或根本不壓縮,外殼主要特點在于反跟蹤、加密 代碼和數據、保護程序數據的完整性,確保程序代碼不被黑客修改或者被人跟蹤調試?,F有技術中,常利用硬件設備來實現.Net程序的保護方法,即從.Net程序文件中提取部 分代碼至加密裝置中,通過.Net程序文件中的代碼分解為兩部分, 一部分代碼在加密裝置中 運行,其余部分代碼在計算機中運行,以實現.Net程序保護的目的。目前,比較高端的加密 裝置是可編程的,利用其實現程序保護包含兩部分內容, 一部分是將被保護的程序中的關鍵 代碼存儲到加密裝置內,另一部分是實現計算機內的被保護的程序與信息安全設備之間的通 信。這就要求編寫外殼程序調用指令,被保護的程序通過調用API (ApplicationProgramming Interface,應用程序編程接n)實現與加密裝置的通信,其中API就是系統(tǒng)不同組成部分銜 接的約定,是應用程序用來與硬件系統(tǒng)交換信息和命令的程序接口。加密裝置生產商會在較 高端的硬件設備中實現某種虛擬機功能,那么便可以在加密裝置中直接運行與實現的虛擬機 相對應格式的代碼。然而用硬件實現軟件程序的保護方法,其弊端在于保護范圍小,保護強度及可控性低, 每次運行的程序代碼受到限制,使得通過硬件加密來實現程序保護變得較為煩瑣。另一方面,傳統(tǒng)技術中,基于軟件方式來實現.Net的代碼保護中,由于受保護的.Net程序會在計算機的 內存中重現,使得.Net程序在內存中容易被破解,這就在一定程度上給.Net程序的保護帶來 了風險。發(fā)明內容為了解決通過硬件加密來實現.Net程序保護的繁瑣性,以及通過軟件方式實現.Net程序 保護在內存中容易被破解的問題,本發(fā)明提供了一種.Net程序保護方法,所述方法包括步驟A:從編譯好的.Net程序選取包含.Net中間語言指令的二進制代碼段;步驟B:對所述二進制代碼段進行變換,并從所述.Net程序中刪除所述二進制代碼段;步驟C:將經過變換后的二進制代碼段寫入所述.Net程序的外殼程序中,并將外殼程序 調用指令寫入所述.Net程序中;步驟D:運行所述.Net程序,當所述.Net程序運行到所述外殼程序調用指令時,所述外 殼程序調用.Net虛擬機,所述.Net虛擬機運行經過變換后的二進制代碼段。所述步驟A具體為計算機根據編譯好的.Net程序中二進制代碼段的重要性自動選取包 含.Net中間語言指令的二進制代碼段,或者人工從編譯好的.Net程序中選取包含,Net中間語 言指令的二進制代碼段。所述步驟B中對所述二進制代碼段進行變換的步驟具體為對所述二進制代碼段進行邏 輯變換,并對經過邏輯變換的二進制代碼段進行加密或壓縮。所述步驟B中對所述二進制代碼段進行變換的步驟具體為對所述二進制代碼段進行邏 輯變換,或者對所述二進制代碼段進行加密或壓縮。所述邏輯變換包括代碼段的指令互換、指令亂序或重新編碼。所述步驟C中將外殼程序調用指令寫入所述.Net程序中的步驟具體為將外殼程序調用 指令寫入所述二進制代碼段在所述.Net程序中對應的位置。 所述步驟D具體包括步驟D1:運行所述.Net程序,當所述.Net程序運行到所述外殼程序調用指令時,所述外 殼程序調用指令調用所述外殼程序;步驟D2:所述外殼程序調用.Net虛擬機; 步驟D3:所述.Net虛擬機根據預先約定,利用與所述變換對應的解析指令運行經過變換 后的二進制代碼段;步驟D4:所述.Net虛擬機輸出正確的運行結果。 所述步驟D3具體包括-步驟D3-1:所述.Net虛擬機根據預先約定,將所述二進制代碼段即時編譯成本地代碼; 步驟D3-2:所述.Net虛擬機利用與所述變換對應的解析指令運行所述本地代碼。 所述變換是與所述.Net程序的外殼程序中的.Net虛擬機預先約定好的,是對源代碼在原始指令格式的基礎上進行的變換。所述外殼程序調用指令用于調用所述外殼程序,當所述外殼程序被加載運行時,自動調用所述.Net虛擬機。本發(fā)明還提供了一種.Net程序保護裝置,所述裝置包括選取模塊,用于從編譯好的.Net程序選取包含.Net中間語言指令的二進制代碼段,并發(fā) 送所述二進制代碼段;變換刪除模塊,用于接收所述選取模塊發(fā)送的二進制代碼段,并對所述二進制代碼段進 行變換,以及從.Net程序中刪除所述二進制代碼段,發(fā)送經過變換后的二進制代碼段;寫入模塊,用于接收所述變換刪除模塊發(fā)送的經過變換后的二進制代碼段,并將經過變 換后的二進制代碼段寫入.Net程序的外殼程序中,以及將外殼程序調用指令寫入.Net程序中;運行模塊,用于當.Net程序運行到外殼程序調用指令時,運行經過變換后的二進制代碼段。所述運行模塊包括.Net虛擬機調用單元,用于當.Net程序運行到外殼程序調用指令時,調用.Net虛擬機; 虛擬機單元,用于根據.Net虛擬機的預先約定,利用與變換對應的解析指令運行經過變 換后的二進制代碼段。或者,所述運行模塊包括.Net虛擬機調用單元,用于當.Net程序運行到外殼程序調用指令時,調用.Net虛擬機;即時編譯單元,用于根據.Net虛擬機的預先約定,將經過變換后的二進制代碼段即時編 譯成本地代碼,并發(fā)送所述本地代碼;虛擬機單元,用于接收所述即時編譯單元發(fā)送的本地代碼,并根據.Net虛擬機的預先約 定,利用與變換對應的解析指令運行所述本地代碼。本發(fā)明提供的技術方案的有益效果是本發(fā)明通過對.Net程序中的二進制代碼段進行變
換,以及通過.Net虛擬機運行變換后的二進制代碼段,實現了對.Net程序的有效保護,從而 不受限制地保護.Net程序,使運行在.Net平臺上的程序只需進行簡單的轉換,即可實現程序 保護;另外,由于虛擬機是自己開發(fā)的,所以這個變換是按照規(guī)定的方式,把受保護的指令 按照一定的或可變的規(guī)則進行變換,使得反編譯出來的代碼是雜亂的,從而極大地提高了軟 件保護的安全性;更進一步地,即使非法分子通過查看計算機內存截獲到經過變換的源代碼, 由于無法得知變換的規(guī)律,即使直接運行該源代碼,也只能得到錯誤的結果,因此,本發(fā)明 大大地增強了破譯源代碼的難度。


圖1是本發(fā)明提供的.Net程序保護方法的流程圖; 圖2是本發(fā)明提供的.Net程序保護裝置的結構示意圖。
具體實施方式
為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明實施方式作進 一步地詳細描述。本發(fā)明提供了一種利用純軟件的方式實現.Net程序的保護方法,其實現原理是從編譯 好的.Net程序選取包含.Net中間語言指令的二進制代碼段;對該二進制代碼段進行變換,并 從.Net程序中刪除該二進制代碼段;將經過變換后的二進制代碼段寫入.Net程序的外殼程序 中,并將外殼程序調用指令寫入.Net程序中;運行.Net程序,當.Net程序運行到外殼程序調 用指令時,外殼程序調用.Net虛擬機,.Net虛擬機運行經過變換后的二進制代碼段。在本發(fā)明提供的技術方案中,對二進制代碼段進行的變換是與.Net程序的外殼程序中 的.Net虛擬機預先約定好的,是對源代碼在原始指令格式的基礎上進行的變換,其具體的實 現方式具體包括對二進制代碼段進行邏輯變換;或者對二進制代碼段進行加密或壓縮;或 者先對二進制代碼段進行邏輯變換,再對經過邏輯變換后的二進制代碼段進行加密或壓縮。 其中,邏輯變換包括代碼段的指令互換、指令亂序或重新編碼等。下面以對二進制代碼段進 行指令互換為例,來闡述本發(fā)明提供的技術方案。實施例1參見圖l,本發(fā)明提供了一種.Net程序保護方法,具體包括以下步驟 步驟101:將待保護的.Net程序編譯成.Net二進制代碼段; 為了方便說明,本實施例給出一個具體的.Net程序,具體如下Class testInt Add(int a,int b)Return a+b;Static int main(String args[]) Add(l,3);根據如下歩驟加載并驗證可執(zhí)行文件,然后取得原數據表 〃開始加載PE文件if(VM—READFILE(0,sizeof(g一Dosx.e—magic),(char *)&g—Dosx.e—magic) == -1 ) return 0;if(VMREADFILE(0x3C,sizeof(g—Dosx.e—lfanew),(char *)&g—Dosx.e—lfanew)==陽l)return 0; if(g—Dosx.e_magic!=0x5a4d)return 0; 〃File Header Offset m—Off=g—Dosx.e—lfanew+4;if( VM—READFILE(m—Off,sizeof(g—Filex.Machine)+sizeof(g一Filex.NumberOfSections),(char *)&g_Filex.Machine) == -1 ) return 0; 〃Option Header Offset m—Off+=sizeof(IMAGE—FILE—HEADER); m—Off+=0x60;m—Off+=(IMAGEDIRECTORY_ENTRY_COM—DESCRIPTOR sizeof(IMAGEDATA—DIRECTORY一X));
〃獲取Com—Directoryif( VM_READFILE(m—Off,sizeof(g—ComDirx),(char *)&gComDirx) == -1 )return 0; 〃獲取Section一Header的偏移g_SectionOff=g_Dosx.e—lfanew+4+sizeof(IMAGE—FILE—HEADER)+sizeof(IMAGEOPTI0 NALHEADER);〃獲取—Cor20m—Off=Rva2Raw—x(g一ComDirx.VirtualAddress);if( VM_READFILE(m—Off,sizeof(g—Cor20x),(char *)&g—Cor20x) == -1 )return 0; 〃獲取PE—EXTEND的偏移g—PeExtendOff=Rva2Raw—x(g—Cor20x.MetaData.VirtualAddress);〃獲取Pe—Extend GetPeExtendHeader一x();〃獲取Meta—Header GetMetaHeader—x();〃獲取所有元數據表的個數和大小m—lndex=0;while (m—Index <二 43)g—RowOfTables[m_Index]=GetRowsOfTables—x(m—Index); m—Index++;m—lndex=0;while (m—Index <= 43)g—SizeOfTables[m—Index]二GetSizeOfTables—x(m—Index); m—Index++;利用機器匯編語言,將上述.Net程序編譯成.Net二進制代碼段; 步驟102:從編譯好的.Net程序中選取包含.Net中間語言指令的二進制代碼段; .Net中間語言指令具體包括IL指令,本實施例以IL指令為例來加以說明;為了看起來 方便,將選取出的包含IL指令的二進制代碼段以IL匯編語言的形式給出,具體如下 locals init ([O] int32 CS$1$0000)IL—■0:nop■ 1:ldarg. 1IL__0002:ldarg.2IL——0003:addIL一0004:stloc.O工一0005:br.sIL——0007:ldloc.OIL——0008:ret上述IL匯編語言對應于.Net程序中的源代碼段為 Int Add(int a,int b)Return a+b;本實施例中,選取出的包含IL指令的二進制代碼段是已經編譯好的可執(zhí)行文件的形式, 是使用.Net平臺上支持的開發(fā)語言編寫的程序在計算機上運行得到的.Net 二進制代碼段;可 執(zhí)行文件具體是.exe形式的文件,由于計算機已經實現了.Net虛擬機,因此,在一般的計算 機上運行的.exe形式的可執(zhí)行文件,可以在.Net虛擬機中運行;實際應用屮,為了實現對.Net程序的有效保護,需要從編譯好的.Net程序中選取出比較 重要的包含.Net中間語言指令的二進制代碼段,其具休的選取方式可以由軟件開發(fā)者人工從 編譯好的.Net程序中選取出比較重要的包含.Net中間語言指令的二進制代碼段,或者依據一 定的標準由計算機自動從編譯好的.Net程序中選取出比較重要的包含.Net中間語言指令的二進制代碼段;步驟103:在計算機內存中,對選取出的包含IL指令的二進制代碼段進行指令互換,并 從.Net程序中刪除該二進制代碼段;本實施例中,將包含IL指令的二進制代碼段進行指令互換具體是指改變該二進制代碼段 的指令,即將該二進制代碼段中的ADD指令換成MUL指令,為了直觀說明,將經過指令互 換后的二進制代碼段以IL匯編語言的形式給出,具體如下locals ink ([O] int32 CS$1$0000)IL—0000:nopIL—0001:ldarg. 1IL—0002:ldarg.2IL—0003:mulIL_0004:stloc,OIL一0005:br.sIL-0007:ldloc.OIL_0008:ret步驟104:將經過指令互換后的二進制代碼段寫入.Net程序的外殼程序中,并將外殼程 序調用指令寫入二進制代碼段在.Net程序中對應的位置;外殼程序調用指令用于實現對外殼程序的調用;當.Net程序運行到外殼程序調用指令時, 會跳轉至外殼程序;步驟105:運行.Net程序;步驟106:當.Net程序運行到外殼程序調用指令時,跳轉到外殼程序; 當外殼程序被加載運行時,自動調用外殼程序中的.Net虛擬機;步驟107:外殼程序調用.Net虛擬機,.Net虛擬機根據預先約定,通過JIT即時編譯器將 經過指令互換后的二進制代碼段即時編譯成本地代碼;步驟108: .Net虛擬機通過JIT即時編譯器,利用與指令互換對應的解析指令運行本地代碼;本實施例中,JIT即時編譯器利用與指令互換對應的解析指令運行本地代碼具體為JIT 即時編譯器將二進制代碼段中的MUL指令翻譯成本地ADD指令; 步驟109: .Net虛擬機對二進制代碼段輸出正確的運行結果。另外,在實際應用中,還可以先對待保護的.Net程序進行反編譯,生成中間代碼文本文
件,然后再對中間代碼文本文件進行編譯,生成.Net二進制代碼段,這樣步驟101變?yōu)闅i驟101':對待保護的.Net程序進行反編譯,生成中間代碼文本文件,并將中間代碼 文本文件編譯成.Net 二進制代碼段。實施例2參見圖2,本發(fā)明還提供了一種.Net程序保護裝置,該裝置包括-選取模塊,用于從編譯好的.Net程序選取包含.Net中間語言指令的二進制代碼段,并發(fā) 送二進制代碼段;為了實現對.Net程序的有效保護,需要從編譯好的.Net程序中選取出比較 重要的包含.Net中間語言指令的二進制代碼段,其具體的選取方式可以由軟件開發(fā)者人工從 編譯好的.Net程序中選取出比較重要的包含.Net中間語言指令的二進制代碼段,或者依據一 定的標準由計算機自動從編譯好的.Net程序中選取出比較重要的包含.Net中間語言指令的二 進制代碼段;選取出的包含.Net中間語言指令的二進制代碼段是己經編譯好的可執(zhí)行文件的 形式;'變換刪除模塊,用于接收選取模塊發(fā)送的二進制代碼段,并對二進制代碼段進行變換, 以及從.Net程序中刪除二進制代碼段,發(fā)送經過變換后的二進制代碼段;寫入模塊,用于接收變換刪除模塊發(fā)送的經過變換后的二進制代碼段,并將經過變換后 的二進制代碼段寫入.Net程序的外殼程序中,以及將外殼程序調用指令寫入.Net程序中;外 殼程序調用指令寫入二進制代碼段在.Net程序中對應的位置;外殼程序調用指令是預先編寫 好的,其中的數據部分需要根據具體情況進行變化。運行模塊,用于當.Net程序運行到外殼程序調用指令時,運行經過變換后的二進制代碼段。運行模塊包括.Net虛擬機調用單元,用于當.Net程序運行到外殼程序調用指令時,調用.Net虛擬機; 虛擬機單元,用于根據.Net虛擬機的預先約定,利用與變換對應的解析指令運行經過變 換后的二進制代碼段。或者,運行模塊包括.-.Net虛擬機調用單元,用于當.Net程序運行到外殼程序調用指令時,調用.Net虛擬機; 即時編譯單元,用于根據.Net虛擬機的預先約定,將經過變換后的二進制代碼段即時編 譯成本地代碼,并發(fā)送本地代碼;虛擬機單元,用于接收即時編譯單元發(fā)送的本地代碼,并根據.Net虛擬機的預先約定,
利用與變換對應的解析指令運行本地代碼。運行模塊的運行過程主要是外殼程序調用.Net虛擬機,運行寫入外殼程序中的.Net 二進 制代碼段;在運行.Net程序的過程中,當程序運行到選取出的二進制代碼段的位置時,通過 外殼程序調用指令跳轉至外殼程序,并由外殼程序調用.Net虛擬機運行寫入外殼程序中的.Net 二進制代碼段。本發(fā)明提供的技術方案的有益效果是本發(fā)明通過對.Net程序中的二進制代碼段進行變 換,以及通過.Net虛擬機運行變換后的二進制代碼段,實現了對.Net程序的有效保護,從而 不受限制地保護.Net程序,使運行在.Net平臺上的程序只需進行簡單的轉換,即可實現程序 保護;另外,由于虛擬機是fi己開發(fā)的,所以這個變換是按照規(guī)定的方式,把受保護的指令 按照一定的或可變的規(guī)則進行變換,使得反編譯出來的代碼是雜亂的,從而極大地提高了軟 件保護的安全性;更進一步地,即使非法分子通過査看計算機內存截獲到經過變換的源代碼, 由于無法得知變換的規(guī)律,即使直接運行該源代碼,也只能得到錯誤的結果,因此,本發(fā)明 大大地增強了破譯源代碼的難度。以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之 內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
權利要求
1.一種.Net程序保護方法,其特征在于,所述方法包括步驟A從編譯好的.Net程序選取包含.Net中間語言指令的二進制代碼段;步驟B對所述二進制代碼段進行變換,并從所述.Net程序中刪除所述二進制代碼段;步驟C將經過變換后的二進制代碼段寫入所述.Net程序的外殼程序中,并將外殼程序調用指令寫入所述.Net程序中;步驟D運行所述.Net程序,當所述.Net程序運行到所述外殼程序調用指令時,所述外殼程序調用.Net虛擬機,所述.Net虛擬機運行經過變換后的二進制代碼段。
2. 如權利要求1所述的.Net程序保護方法,其特征在于,所述步驟A具體為計算機 根據編譯好的.Net程序中二進制代碼段的重要性自動選取包含.Net中間語言指令的一進制代 碼段,或者人工從編譯好的.Net程序中選取包含.Net中間語言指令的二進制代碼段。
3. 如權利要求l所述的.Net程序保護方法,其特征在于,所述步驟B中對所述二進制代 碼段進行變換的步驟具體為對所述二進制代碼段進行邏輯變換,并對經過邏輯變換的二進 制代碼段進行加密或壓縮。
4. 如權利要求l所述的.Net程序保護方法,其特征在于,所述步驟B中對所述二進制代 碼段進行變換的步驟具體為對所述二進制代碼段進行邏輯變換,或者對所述二進制代碼段 進行加密或壓縮。
5. 如權利要求3或4所述的.Net程序保護方法,其特征在于,所述邏輯變換包括代碼段 的指令互換、指令亂序或重新編碼。
6. 如權利要求l所述的.Net程序保護方法,其特征在于,所述步驟C中將外殼程序調用 指令寫入所述.Net程序中的步驟具體為將外殼程序調用指令寫入所述二進制代碼段在所 述.Net程序中對應的位置。
7. 如權利要求1所述的.Net程序保護方法,其特征在于,所述步驟D具體包括步驟D1:運行所述.Net程序,當所述.Net程序運行到所述外殼程序調用指令時,所述外 殼程序調用指令調用所述外殼程序;步驟D2:所述外殼程序調用.Net虛擬機;步驟D3:所述.Net虛擬機根據預先約定,利用與所述變換對應的解析指令運行經過變換 后的二進制代碼段;步驟D4:所述.Net虛擬機輸出正確的運行結果。
8. 如權利要求7所述的.Net程序保護方法,其特征在于,所述步驟D3具體包括 步驟D3-1:所述.Net虛擬機根據預先約定,將所述二進制代碼段即時編譯成本地代碼; 步驟D3-2:所述.Net虛擬機利用與所述變換對應的解析指令運行所述本地代碼。
9. 如權利要求l所述的.Net程序保護方法,其特征在于,所述變換是與所述.Net程序的 外殼程序中的.Net虛擬機預先約定好的,是對源代碼在原始指令格式的基礎上進行的變換。
10. 如權利要求1所述的.Net程序保護方法,其特征在于,所述外殼程序調用指令用于 調用所述外殼程序,當所述外殼程序被加載運行時,自動調用所述.Net虛擬機。
11. 一種.Net程序保護裝置,其特征在于,所述裝置包括選取模塊,用于從編譯好的.Net程序選取包含.Net中間語言指令的二進制代碼段,并發(fā) 送所述二進制代碼段;變換刪除模塊,用于接收所述選取模塊發(fā)送的二進制代碼段,并對所述二進制代碼段進 行變換,以及從.Net程序中刪除所述二進制代碼段,發(fā)送經過變換后的二進制代碼段;寫入模塊,用于接收所述變換刪除模塊發(fā)送的經過變換后的二進制代碼段,并將經過變 換后的二進制代碼段寫入.Net程序的外殼程序中,以及將外殼程序調用指令寫入.Net程序中;運行模塊,用于當.Net程序運行到外殼程序調用指令時,運行經過變換后的二進制代碼段。
12. 如權利要求ll所述的.Net程序保護裝置,其特征在于,所述運行模塊包括 .Net虛擬機調用單元,用于當.Net程序運行到外殼程序調用指令時,調用.Net虛擬機; 虛擬機單元,用于根據.Net虛擬機的預先約定,利用與變換對應的解析指令運行經過變換后的二進制代碼段。
13.如權利要求ll所述的.Net程序保護裝置,其特征在于,所述運行模塊包括 .Net虛擬機調用單元,用于當.Net程序運行到外殼程序調用指令時,調用.Net虛擬機; 即時編譯單元,用于根據.Net虛擬機的預先約定,將經過變換后的二進制代碼段即時編譯成本地代碼,并發(fā)送所述本地代碼;虛擬機單元,用于接收所述即時編譯單元發(fā)送的本地代碼,并根據.Net虛擬機的預先約定,利用與變換對應的解析指令運行所述本地代碼。
全文摘要
本發(fā)明公開了一種.Net程序保護方法及裝置,屬于軟件保護領域。所述方法包括從編譯好的.Net程序選取包含.Net中間語言指令的二進制代碼段;對該二進制代碼段進行變換,并從.Net程序中刪除該二進制代碼段;將經過變換后的二進制代碼段寫入.Net程序的外殼程序中,并將外殼程序調用指令寫入.Net程序中;運行.Net程序,當.Net程序運行到外殼程序調用指令時,外殼程序調用.Net虛擬機,.Net虛擬機運行經過變換后的二進制代碼段。所述裝置包括選取模塊、變換刪除模塊、寫入模塊和運行模塊。本發(fā)明可以不受限制地保護.Net程序,使運行在.Net平臺上的程序只需進行簡單的變換就可以實現.Net程序保護。
文檔編號G06F9/45GK101158911SQ20071017793
公開日2008年4月9日 申請日期2007年11月22日 優(yōu)先權日2007年11月22日
發(fā)明者于華章, 舟 陸 申請人:北京飛天誠信科技有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
石城县| 文昌市| 灵寿县| 电白县| 松原市| 平山县| 夹江县| 调兵山市| 凤凰县| 沧州市| 岳阳市| 吴堡县| 穆棱市| 怀仁县| 西昌市| 湟中县| 湘潭县| 兴隆县| 巫溪县| 长治市| 蓬溪县| 上犹县| 大冶市| 七台河市| 大渡口区| 浮梁县| 洛宁县| 大理市| 靖远县| 湟中县| 宣城市| 玉田县| 台中县| 香格里拉县| 昌邑市| 汝城县| 连城县| 莲花县| 嘉善县| 陈巴尔虎旗| 惠安县|