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

一種對.net可執(zhí)行程序進行保護的方法和系統(tǒng)的制作方法

文檔序號:6542990閱讀:186來源:國知局
一種對.net可執(zhí)行程序進行保護的方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種對.NET程序進行保護的方法及系統(tǒng)。該方法首先采用元數(shù)據(jù)API來分析.NET程序的結構,分析出程序中引用程序集、程序集、類和類中的方法,以及類中的方法的參數(shù)、返回值、IL指令等信息。其次由用戶選擇需要保護的方法,保護系統(tǒng)生成需要保護的方法的代理類,保護系統(tǒng)對需要保護的方法的IL指令進行加密。再次,保護系統(tǒng)創(chuàng)建保護后的方法,將加密后的IL指令以局部變量的形式存儲在保護后的方法中,保護后的方法主要功能是創(chuàng)建動態(tài)方法、解密IL指令、設置動態(tài)方法的IL指令、創(chuàng)建動態(tài)方法的代理類、通過代理類調(diào)用動態(tài)方法,最后,將引用程序集、程序集、代理類及保護后的方法等信息注入到保護后的程序中。
【專利說明】一種對.NET可執(zhí)行程序進行保護的方法和系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及信息安全【技術領域】,特別涉及一種對.NET可執(zhí)行程序進行保護的方法和系統(tǒng)。
【背景技術】
[0002].NET是微軟公司用來實現(xiàn)XML、Web Services、SOA (面向服務的體系結構service-oriented architecture)和敏捷性的技術。技術人員一般將微軟看成一個平臺廠商。微軟搭建技術平臺,而技術人員在這個技術平臺之上創(chuàng)建應用系統(tǒng)。從這個角度,.NET也可以如下來定義:.NET是微軟的新一代技術平臺,為敏捷商務構建互聯(lián)互通的應用系統(tǒng),這些系統(tǒng)是基于標準的、聯(lián)通的、適應變化的、穩(wěn)定的和高性能的。從技術的角度,一個.NET應用是一個運行于.NET Framework之上的應用程序。更精確的說,一個.NET應用是一個使用.NET Framework類庫來編寫,并運行于公共語言運行時Common LanguageRuntime之上的應用程序。如果一個應用程序跟.NET Framework無關,它就不能叫做.NET程序。比如,僅僅使用了 XML并不就是.NET應用,僅僅使用SOAP SDK調(diào)用一個Web Service也不是.NET應用。.NET是基于Windows操作系統(tǒng)運行的操作平臺,應用于互聯(lián)網(wǎng)的分布式。
[0003]在信息安全領域中,軟件作為一種寶貴的財富,軟件的安全性越來越受到單位、企業(yè)和個人的關注。.NET是作為微軟的新一代技術平臺,.NET統(tǒng)一了編程語言,無論程序使用C#,還是C++、VB編寫,程序最終都會編譯為.NET中間語言MSIL (MicrosoftIntermediate Language)。MSIL是將.NET代碼轉化為機器語言的一個中間過程,它是一種介于高級語言和基于Intel的匯編語言的偽匯編語言。當用戶編譯一個.NET程序時,編譯器將源代碼翻譯成Microsoft中間語言(MSIL),它是一組可以有效地轉換為本機代碼且獨立于CPU的指令。當執(zhí)行這些指令時,實時(JIT)編譯器將它們轉化為CPU特定的代碼。由于公共語言運行庫支持多種實時編譯器,因此同一段MSIL代碼可以被不同的編譯器實時編譯并運行在不同的結構上。從理論上來說,MSIL將消除多年以來業(yè)界中不同語言之間的紛爭。在.NET的世界中可能出現(xiàn)下面的情況,一部分代碼可以用EFFIL實現(xiàn),另一部分代碼使用C#或VB.NET完成,但是最后這些代碼都將被轉換為中間語言。這給程序員提供了極大的靈活性,程序員可以選擇自己熟悉的語言,并且再也不用為學習不斷推出的新語言而煩惱了。
[0004]編譯為托管代碼時,編譯器將源代碼翻譯為Microsoft中間語言(MSIL),這是一組可以有效地轉換為本機代碼且獨立于CPU的指令。MSIL包括用于加載、存儲和初始化對象以及對對象調(diào)用方法的指令,還包括用于算術和邏輯運算、控制流、直接內(nèi)存訪問、異常處理和其他操作的指令。要使代碼可運行,必須先將MSIL轉換為特定于CPU的代碼,這通常是通過實時(JIT)編譯器來完成的。由于公共語言運行庫為它支持的每種計算機結構都提供了一種或多種JIT編譯器,因此同一組MSIL可以在所支持的任何結構JIT上編譯和運行。編譯后的.NET運行時,由虛擬機執(zhí)行引擎把中間語言代碼轉換為機器代碼。
[0005]雖然.NET提供了便利,但.NET編譯后的程序集非常容易被反編譯,比如利用Reflector工具幾乎可以生成.NET程序的源代碼。Reflector是由微軟員工Lutz Roeder編寫的免費程序。Reflector的出現(xiàn)使.NET程序員眼前豁然開朗,因為這個免費工具可以將.NET程序集中的中間語言反編譯成C#或者Visual Basic代碼。除了能將IL(Intermediate Language,中間語言)轉換為 C# 或 Visual Basic 以外,Reflector 還能夠提供程序集中類及其成員的概要信息、提供查看程序集中IL的能力以及提供對第三方插件的支持。
[0006]目前對于.NET程序集的保護主要是基于純軟件的保護技術,常見的.NET保護軟件有.NET Reactor、Dotfuscator等?;诩冘浖谋Wo方法抗分析性較差。.Net自帶工具Dotfuscator是領先的.NET模糊處理程序、壓縮程序和水印處理程序,它有助于保護程序,使之免遭反向工程處理,同時使程序更小巧且更高效。Dotfuscator ProfessionalEdition 4.9旨在阻止各種反編譯器生成有用的輸出,即便是那些最好的反編譯器也不例夕卜。它提供了全面、高效的.NET代碼開發(fā)和部署過程。
[0007]元數(shù)據(jù)API是微軟提供的一套非托管API,它的功能是可以讀寫程序集中的元數(shù)據(jù),可操作的對象囊括了元數(shù)據(jù)的各個方面,比如可以是邏輯結構上的程序集、類、方法等。利用元數(shù)據(jù)API可以很方便的對.NET程序集進行分析和修改。元數(shù)據(jù)用于描述公共語言運行庫(CLR)在JIT編譯Microsoft中間語言(MSIL)、加載類、執(zhí)行代碼以及與COM傳統(tǒng)型或本機領域進行交互時使用的運行庫類型(類、接口和值類型)、字段、方法以及內(nèi)部實現(xiàn)和布局信息。元數(shù)據(jù)包括在每個CLR組件中,并可供運行庫、工具和服務使用。對元數(shù)據(jù)的所有操作都通過元數(shù)據(jù)API執(zhí)行,這些API將客戶端(工具和服務)與基礎數(shù)據(jù)結構隔離,實現(xiàn)了一種可插入的持久性格式體系結構,這種體系結構允許運行庫的二進制表示形式、COM傳統(tǒng)型類型庫和其他格式以透明方式出入內(nèi)存。元數(shù)據(jù)API包括發(fā)出(即生成)和導入元數(shù)據(jù)的接口??蛻舳丝赏ㄟ^下列方式發(fā)出或導入元數(shù)據(jù):編譯器和工具通過調(diào)用“發(fā)出”API發(fā)出元數(shù)據(jù)。元數(shù)據(jù)在編譯和鏈接過程中發(fā)出。在生成組件或應用程序的過程中,RAD (Rapid Application Develop,快速應用開發(fā))工具將發(fā)出元數(shù)據(jù)。API向內(nèi)存中數(shù)據(jù)結構寫入數(shù)據(jù)并從中讀取數(shù)據(jù)。在保存時,這些內(nèi)存中結構將被壓縮并以二進制格式保存到目標編譯單元(.0bj文件)、可執(zhí)行文件(.exe文件)或獨立元數(shù)據(jù)二進制文件中。在通過鏈接多個編譯單元來形成EXE或DLL文件時,“發(fā)出”API將提供相應的方法,用于將每個編譯單元中的元數(shù)據(jù)合并為一個集成的元數(shù)據(jù)二進制文件。在導入元數(shù)據(jù)時,加載程序及其他運行庫工具和服務將調(diào)用“導入”API來獲取有關組件的信息,以便可以完成加載和激活等任務。
[0008]基于硬件的.NET保護方法,主要是從.NET程序文件中提取部分代碼到軟件保護裝置(下文也稱為“保護裝置”)中,這樣一部分代碼在計算機中執(zhí)行,另外一部分在保護裝置中模擬執(zhí)行?;谟布谋Wo方法可以移植的代碼指令有限,受限于硬件的保護裝置的空間限制,移植的代碼的數(shù)量也有限。而軟件保護裝置是一種通過計算機接口(包括但不限于并口或者USB接口)連接到計算機主機上的硬件設備。該設備內(nèi)部具有非易失性存儲空間可供讀寫,通常還具有單片機或者微處理控制芯片等計算處理單元。軟件開發(fā)者可以通過接口函數(shù)和軟件保護裝置進行數(shù)據(jù)交換(即對軟件保護裝置進行讀寫),來檢查軟件保護裝置是否插在接口上;或者直接用軟件保護裝置附帶的工具進行加密。這樣,軟件開發(fā)者可以在軟件中設置多處軟件鎖,利用軟件保護裝置作為鑰匙來打開這些鎖;如果沒插軟件保護裝置或軟件保護裝置不對應,軟件將不能正常執(zhí)行。
[0009]此外,軟件保護裝置內(nèi)部包含特定的功能,例如一部分存儲空間、一些密碼算法或者一些用戶自定義的算法或者功能。在軟件發(fā)行之前,軟件開發(fā)者修改自己的軟件代碼,使得軟件在運行過程中需要使用到軟件保護裝置內(nèi)部的一些功能,這樣軟件離開軟件保護裝置之后就會無法運行,而軟件保護裝置作為一種硬件設備復制的難度較大,從而起到防止盜版軟件非法傳播的作用。
[0010]當前市場上主要的軟件保護裝置包括:美國SafeNet公司的Sentinel Superpro>以色列Aladdin公司的Hasp HL、中國北京深思洛克軟件股份有限公司的精銳系列、德國W1-Bu公司的WIBU-Key等。所有這些軟件保護裝置都提供了內(nèi)置的存儲空間、私有或公開的密碼算法,在軟件運行過程中可以調(diào)用這些功能來檢驗是否屬于正版。這些軟件保護裝置采用了智能卡芯片作為硬件的基礎,而且支持用戶將自己定義的功能寫入到軟件保護裝置內(nèi)部,甚至可以直接將軟件的部分功能移植到軟件保護裝置內(nèi)部完成,從而大大提高了軟件被盜版的難度,通常稱這種將自己定義的功能或者軟件的部分功能移植到軟件保護裝置內(nèi)部的技術為代碼移植。本發(fā)明人現(xiàn)在對應網(wǎng)站為http://www.sense, com.cn/,其中詳細公開了本發(fā)明人開發(fā)的軟件保護裝置的具體參數(shù)性能和工作原理。

【發(fā)明內(nèi)容】

[0011]有鑒于此,本發(fā)明對.NET程序實現(xiàn)了方法級的保護,只有插上合法的保護裝置保護后的程序才能運行,保護后的程序運行時,保護后的方法動態(tài)生成保護前的方法并進行調(diào)用,動態(tài)生成的方法很難進行調(diào)試,可以對程序中的所有方法進行保護,從而達到了保護方法的目的。
[0012]本發(fā)明提供了一種.NET程序的保護方法及系統(tǒng),以解決.NET程序的安全問題。
[0013]一種對.NET程序進行保護的方法,該方法具體步驟包括:
分析.NET程序中引用程序集信息、程序集信息、類及類中的方法,分析類中的方法中的返回值、參數(shù)、IL指令等信息;
用戶選擇需要保護的方法;
根據(jù)需要保護的方法的參數(shù)、返回值,生成保護后方法的代理類;
根據(jù)需要保護的方法的IL指令,對IL指令采用保護裝置進行加密;
對需要保護的方法進行保護,具體包括:根據(jù)方法的參數(shù)、返回值創(chuàng)建一個動態(tài)方法對象,將加密后的IL指令作為一個數(shù)組存儲在保護后的方法中,調(diào)用保護裝置對加密后的IL指令進行解密,設置動態(tài)方法的IL指令,創(chuàng)建動態(tài)方法的代理類,通過代理類調(diào)用動態(tài)方法。
[0014]將程序中的引用程序集信息、程序集信息、類信息、保護后方法的代理類、保護后的方法等信息注入到保護后的.NET程序中。
[0015]本發(fā)明還提供了一種對.NET程序進行保護的系統(tǒng),所述系統(tǒng)包括:保護裝置、分析模塊、保護模塊、注入模塊。保護裝置可以是加密鎖,分析模塊、保護模塊、注入模塊可在計算機主機中。[0016]所述保護裝置為具有智能卡芯片的信息安全設備,提供軟件、數(shù)據(jù)保護功能。根據(jù)一個【具體實施方式】,所述保護裝置包括但不限于加密鎖。
[0017]所述分析模塊,利用微軟提供的元數(shù)據(jù)接口中的GetAssemblyRefProps函數(shù)分析.NET程序中的引用程序集信息,利用元數(shù)據(jù)接口中的GetAssemblyProps函數(shù)分析.NET程序中的程序集信息,利用元數(shù)據(jù)接口中的GetTypeDefProps函數(shù)分析.NET程序中的類,利用元數(shù)據(jù)接口的函數(shù)EnumMethods函數(shù)分析類中的方法,利用元數(shù)據(jù)接口中的GetMethodProps函數(shù)分析類中的方法的簽名信息及IL指令所在的地址,得到方法的簽名信息后,根據(jù)微軟的方法簽名的格式分析方法的參數(shù)、返回值,方法的簽名的格式為調(diào)用約定、參數(shù)個數(shù)、返回值類型、參數(shù)信息;根據(jù)方法的IL指令所在的地址得到IL指令的詳細信肩、O
[0018]所述保護模塊,對需要保護的方法的IL指令利用保護裝置進行加密,加密算法可以采用對稱算法或者非對稱算法,加密的密鑰由保護裝置生成;生成保護后方法的簽名信息,根據(jù)保護前方法的簽名信息(調(diào)用約定、參數(shù)、返回值等),設置保護后的方法的簽名信息,使保護前后方法的簽名信息保持一致;設置保護后方法的局部變量信息,局部變量主要有保護前的方法的參數(shù)類型數(shù)組變量、返回值類型變量、動態(tài)方法對象變量、方法的代理類變量、存儲加密后的IL指令的數(shù)組變量等變量;設置保護后方法的IL指令,保護后方法的IL指令主要功能為:獲取保護前的方法的參數(shù)的類型信息,并保存到參數(shù)類型數(shù)組中,獲取保護前方法的返回值類型信息,并保存到返回值類型信息方法中,根據(jù)保護前方法的參數(shù)類型信息、返回值類型信息創(chuàng)建一個動態(tài)方法對象,將創(chuàng)建的動態(tài)方法對象保存到動態(tài)方法對象變量中,將加密后的IL指令依次存儲到加密后的IL指令數(shù)組變量中,調(diào)用保護裝置對加密后的IL指令進行解密,設置動態(tài)方法的IL指令,創(chuàng)建動態(tài)方法的代理類,并將代理類信息保存到代理類變量中,通過代理類調(diào)用動態(tài)方法,達到執(zhí)行原方法邏輯的目的。
[0019]所述注入模塊,利用分析模塊中分析的引用程序集信息、程序集信息、類信息、類中沒有保護的方法以及保護模塊生成的代理類信息、保護后的方法,將它們都注入到保護后的.NET程序中。所謂注入指構建保護后.NET程序的過程,保護后的.NET程序保留了保護前.NET程序的大部分信息,比如引用程序集信息、程序集信息,類信息,保護后的.NET程序只是修改了需要保護的方法,增加了保護后方法需要使用的代理類。注入過程使用的具體方法為利用IMeataDataAssemblyEmit接口中的DefineAssemblyRef定義引用程序集信息,DefineAssembly方法定義程序集信息,利用IMetaDataEmit接口中的DefineTypeDef函數(shù)定義類型信息,利用DefineMethod定義方法。最后可以利用ICeeFileGen接口中的函數(shù)GenerateCeeFile創(chuàng)建一個.NET可執(zhí)行程序。
【專利附圖】

【附圖說明】
[0020]圖1為按照本發(fā)明的一優(yōu)選實施例的對.NET程序保護過程的流程示意圖。
[0021]圖2為按照本發(fā)明的一優(yōu)選實施例中的.NET程序保護系統(tǒng)的示意圖。
【具體實施方式】
[0022]為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。[0023]根據(jù)本發(fā)明的一個實施方式,提供.NET程序的保護方法,具體包括:
1.分析.NET程序中引用程序集信息、程序集信息、類及類中的方法,類中方法中的返回值、參數(shù)、IL指令等信息;
2.用戶選擇需要保護的方法;
3.根據(jù)需要保護的方法的參數(shù)、返回值,生成保護后方法的代理類;
4.分析需要保護的方法的IL指令,對IL指令采用保護裝置進行加密;
5.對需要保護的方法進行保護,具體包括,根據(jù)需要保護的方法的參數(shù)、返回值創(chuàng)建一個動態(tài)方法對象,將加密后的IL指令作為一個數(shù)組存儲在保護后的方法中,調(diào)用保護裝置對加密后的IL指令進行解密,設置動態(tài)方法的IL指令,創(chuàng)建動態(tài)方法的代理類,通過代理類調(diào)用動態(tài)方法;
6.將程序中的引用程序集信息、程序集信息、類信息、方法的代理類、保護后的方法等信息注入到保護后的.NET程序中。
[0024]根據(jù)本發(fā)明的一個實施方式,本發(fā)明還提供了一種對.NET程序進行保護的系統(tǒng),所述系統(tǒng)包括:
保護裝置、分析模塊、保護模塊、注入模塊。
[0025]所述保護裝置為具有智能卡芯片的信息安全設備,提供軟件、數(shù)據(jù)保護功能。根據(jù)一個【具體實施方式】,所述保護裝置包括但不限于加密鎖。
[0026]所述分析模塊,利用微軟提供的元數(shù)據(jù)接口中的GetAssemblyRefProps函數(shù)分析.NET程序中的引用程序集信息,利用元數(shù)據(jù)接口中的GetAssemblyProps函數(shù)分析.NET程序中的程序集信息,利用元數(shù)據(jù)接口中的GetTypeDefProps函數(shù)分析.NET程序中的類,利用元數(shù)據(jù)接口的函數(shù)EnumMethods函數(shù)分析類中的方法,利用元數(shù)據(jù)接口分析中的GetMethodProps函數(shù)分析類中的方法的簽名信息及IL指令所在的地址,得到方法的簽名信息后,根據(jù)微軟的方法簽名的格式分析方法的參數(shù)、返回值,方法的簽名的格式為調(diào)用約定、參數(shù)個數(shù)、返回值類型、參數(shù)信息;根據(jù)方法的IL指令所在的地址得到IL指令的詳細信肩、O
[0027]所述保護模塊,對需要保護的方法的IL指令利用保護裝置進行加密,加密算法可以采用對稱算法或者非對稱算法,加密的密鑰由保護裝置生成;生成保護后方法的簽名信息,根據(jù)保護前方法的簽名信息(調(diào)用約定、參數(shù)、返回值等),設置保護后的方法的簽名信息,使保護前后方法的簽名信息保持一致;設置保護后方法的局部變量信息,局部變量主要有保護前的方法的參數(shù)類型數(shù)組變量、返回值類型變量、動態(tài)方法對象變量、方法的代理類變量、存儲加密后的IL指令的數(shù)組變量等變量;設置保護后方法的IL指令,保護后方法的IL指令主要功能為獲取保護前的方法的參數(shù)的類型信息,并保存到參數(shù)類型數(shù)組中,獲取保護前方法的返回值類型信息,并保存到返回值類型信息方法中,根據(jù)保護前方法的參數(shù)類型信息、返回值類型信息創(chuàng)建一個動態(tài)方法對象,將創(chuàng)建的動態(tài)方法對象保存到動態(tài)方法對象變量中,將加密后的IL指令依次存儲到加密后的IL指令數(shù)組變量中,調(diào)用保護裝置對加密后的IL指令進行解密,設置動態(tài)方法的IL指令,創(chuàng)建動態(tài)方法的代理類,并將代理類信息保存到代理類變量中,通過代理類調(diào)用動態(tài)方法,達到執(zhí)行原方法邏輯的目的。
[0028]所述注入模塊,利用分析模塊中分析的引用程序集信息、程序集信息、類信息、類中沒有保護的方法以及保護模塊生成的代理類信息、保護后的方法,將它們都注入到保護后的.NET程序中。所謂注入指構建保護后.NET程序的過程,保護后的.NET程序保留了保護前.NET程序的大部分信息,比如引用程序集信息、程序集信息,類信息,保護后的.NET程序只是修改了需要保護的方法,增加了保護后方法需要使用的代理類。注入過程使用的具體方法為利用IMeataDataAssemblyEmit接口中的DefineAssemblyRef定義引用程序集信息,Def ineAssembly方法定義程序集信息,利用IMetaDataEmit接口中的DefineTypeDef函數(shù)定義類型信息,利用DefineMethod定義方法。最后可以利用ICeeFileGen接口中的函數(shù)GenerateCeeFile創(chuàng)建一個.NET可執(zhí)行程序。
[0029]根據(jù)本發(fā)明的一個實施方式,下面給出一個實施例來說明本發(fā)明。
[0030]實施例1
該實施例以保護安裝有微軟Windows XP 32位操作系統(tǒng)的系統(tǒng)環(huán)境為例,描述根據(jù)本發(fā)明一個具體實施例實現(xiàn).NET程序保護的具體過程。
[0031]為了方便說明,本實施例給出了一個具體的.NET程序,具體如下: using System;
class Program// 聲明一個 Program 的類
{
/*
聲明一個成員方法test,test方法有三個整型參數(shù)a、b、c,該方法完成的功能為對前兩個參數(shù)a和b進行相加,將相加的結果和c相乘,最后將相乘的結果返回*/
static int test (int a, int b, int c)
{
return (a+b)氺c;
}
/*
Main方法為程序的入口方法,該方法中聲明了一個變量整型變量d,d的值為函數(shù)test傳入?yún)?shù)1,2,3的執(zhí)行后的結果。
[0032]調(diào)用Console.WriteLine將d的值輸出在屏幕上。
[0033]*/
public static void Main()
{
int d = test (I, 2, 3);
Console.WriteLine ("d = {0} ",d);
}
}
將上述C#代碼保存在Classl.cs文件中,并采用C#編譯器進行編譯,生成的可執(zhí)行文件為 classl.exe.保護裝置為加密鎖,為IL代碼提供加密方法。
[0034]如圖1所示,對.NET程序進行保護的詳細步驟為:
1.插入保護裝置,保護裝置例如選用精銳IV加密鎖;2.分析.NET可執(zhí)行程序中引用程序集信息、程序集信息、類及類中的方法,類中的方法中的返回值、參數(shù)、IL指令;
對于本例來說,可執(zhí)行程序中的程序集為Classl,引用程序集為mscorlib,
對于本例來說,可執(zhí)行程序中包含Program類,Pr ο gram中包含.ctor、Main和test三個方法。.ctor方法為類Program的構造方法,該方法的作用是構造類的實例的實例化對象;test方法有三個整型參數(shù)a、b、C,該方法完成的功能為對前兩個參數(shù)a和b進行相加,將相加的結果和c相乘,將結果返回;Main方法為程序的入口方法,該方法中聲明了一個變量整型變量d,d的值為函數(shù)test傳入?yún)?shù)1,2,3的執(zhí)行后的結果。其中.ctor方法和Main方法中的返回值為void類型,兩者參數(shù)個數(shù)為0,test方法包含3個int類型的參數(shù),返回值也為int類型。分析的IL指令此處只列舉test方法的IL指令,指令如下。
[0035]
【權利要求】
1.一種對.NET程序進行保護的方法,該方法的步驟包括: 分析.NET程序中引用程序集信息、程序集信息、類及類中的方法,分析類中的方法中的返回值、參數(shù)、IL指令等信息; 用戶選擇需要保護的方法; 根據(jù)需要保護的方法的參數(shù)、返回值,生成保護后方法的代理類; 根據(jù)需要保護的方法的IL指令,對IL指令采用保護裝置進行加密; 對需要保護的方法進行保護; 將程序中的引用程序集信息、程序集信息、方法的代理類、保護后的方法等信息注入到保護后的.NET程序中。
2.如權利要求1所述的方法,其中,對需要保護的方法進行保護具體包括:根據(jù)方法的參數(shù)、返回值創(chuàng)建一個動態(tài)方法對象,將加密后的IL指令作為一個數(shù)組存儲在保護后的方法中,調(diào)用保護裝置對加密后的IL指令進行解密,設置動態(tài)方法的IL指令,創(chuàng)建動態(tài)方法的代理類,通過代理類調(diào)用動態(tài)方法。
3.—種對.NET程序進行保護的系統(tǒng),所述系統(tǒng)包括:保護裝置、分析模塊、保護模塊、注入模塊;其中: 保護裝置,提供軟件、數(shù)據(jù)保護功能; 分析模塊,對.NET程序進行分析; 保護模塊,對需要保護的方法的IL指令利用保護裝置進行加密,生成保護后方法的簽名信息,設置保護后方法的局部變量信息和保護后方法的IL指令; 注入模塊,將分析模塊和保護模塊得到的內(nèi)容注入到保護后的.NET程序中。
4.如權利要求3所述的系統(tǒng),其中所述保護裝置為具有智能卡芯片的信息安全設備,提供軟件、數(shù)據(jù)保護功能。
5.如權利要求3或4所述的系統(tǒng),其中所述保護裝置為加密鎖。
6.如權利要求3-5之一所述的系統(tǒng),其中分析模塊、保護模塊、注入模塊設置在計算機主機中。
7.如權利要求3-6之一所述的系統(tǒng),其中所述分析模塊,利用微軟提供的元數(shù)據(jù)接口中的GetAssemblyRefProps函數(shù)分析.NET程序中的引用程序集信息,利用元數(shù)據(jù)接口中的GetAssemblyProps函數(shù)分析.NET程序中的程序集信息,利用元數(shù)據(jù)接口中的GetTypeDefProps函數(shù)分析.NET程序中的類,利用元數(shù)據(jù)接口的函數(shù)EnumMethods函數(shù)分析類中的方法,利用元數(shù)據(jù)接口中的GetMethodProps函數(shù)分析類中的方法的簽名信息及IL指令所在的地址,得到方法的簽名信息后,根據(jù)微軟的方法簽名的格式分析方法的參數(shù)、返回值;根據(jù)方法的IL指令所在的地址得到IL指令的詳細信息。
8.如權利要求7所述的系統(tǒng),其中方法的簽名的格式為:調(diào)用約定、參數(shù)個數(shù)、返回值類型、參數(shù)信息。
9.如權利要求3-8之一所述的系統(tǒng),其中所述保護模塊,對需要保護的方法的IL指令利用保護裝置進行加密;生成保護后方法的簽名信息,根據(jù)保護前方法的簽名信息,設置保護后的方法的簽名信息,使保護前后方法的簽名信息保持一致;設置保護后方法的局部變量信息;設置保護后方法的IL指令,保護后方法的IL指令主要功能為:獲取保護前的方法的參數(shù)的類型信息,并保存到參數(shù)類型數(shù)組中,獲取保護前方法的返回值類型信息,并保存到返回值類型信息方法中,根據(jù)保護前方法的參數(shù)類型信息、返回值類型信息創(chuàng)建一個動態(tài)方法對象,將創(chuàng)建的動態(tài)方法對象保存到動態(tài)方法對象變量中,將加密后的IL指令依次存儲到加密后的IL指令數(shù)組變量中,調(diào)用保護裝置對加密后的IL指令進行解密,設置動態(tài)方法的IL指令,創(chuàng)建動態(tài)方法的代理類,并將代理類信息保存到代理變量中,通過代理類調(diào)用動態(tài)方法,達到執(zhí)行原方法邏輯的目的。
10.如權利要求9所述的系統(tǒng),其中對需要保護的方法的IL指令進行加密時,加密算法采用對稱算法或者非對稱算法,加密的密鑰由保護裝置生成。
11.如權利要求9或10所述的系統(tǒng),其中保護前方法的簽名信息包括調(diào)用約定、參數(shù)、返回值等。
12.如權利要求9-11之一所述的系統(tǒng),其中局部變量主要有保護前的方法的參數(shù)類型數(shù)組變量、返回值類型變量、動態(tài)方法對象變量、方法的代理類變量、存儲加密后的IL指令的數(shù)組變量等變量。
13.如權利要求9-12之一所述的系統(tǒng),其中所述注入模塊,利用分析模塊中分析的引用程序集信息、程序集信息、類信息、類中沒有保護的方法以及保護模塊生成的代理類信息、保護后的方法,將它們都注入到保護后的.NET程序中。
14.如權利要求13所述的系統(tǒng),其中注入的方式采用微軟提供的元數(shù)據(jù)API來實現(xiàn)。
15.如權利要求13或14所述的系統(tǒng),其中注入過程使用的方法為利用IMeataDataAssemblyEmit 接口中的 DefineAssemblyRef 定義引用程序集信息,DefineAssembly方法定義程序集信息,利用IMetaDataEmit接口中的DefineTypeDef函數(shù)定義類型信息,利用DefineMethod定義方法;最后可以利用ICeeFileGen接口中的函數(shù)GenerateCeeFile創(chuàng)建一個.NET可執(zhí)行程序。
【文檔編號】G06F21/12GK103955635SQ201410135281
【公開日】2014年7月30日 申請日期:2014年4月4日 優(yōu)先權日:2014年4月4日
【發(fā)明者】孫吉平, 韓勇 申請人:北京深思數(shù)盾科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
阿克陶县| 大洼县| 沙田区| 高安市| 长岭县| 苏州市| 扶余县| 鄂州市| 岗巴县| 民乐县| 鄂托克前旗| 县级市| 桃园县| 名山县| 桦甸市| 鄂尔多斯市| 宜宾县| 惠水县| 武安市| 平谷区| 鸡泽县| 新和县| 纳雍县| 乌拉特中旗| 论坛| 密山市| 和硕县| 宜昌市| 共和县| 内丘县| 沁阳市| 南昌市| 巴青县| 东乌珠穆沁旗| 廉江市| 濮阳市| 阳春市| 白城市| 宁乡县| 特克斯县| 突泉县|