專利名稱:.Net程序保護(hù)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息安全技術(shù)領(lǐng)域,特別涉及一種.Net程序保護(hù)的方法和系統(tǒng)。
背景技術(shù):
目前,隨著計(jì)算機(jī)技術(shù)的發(fā)展,基于互聯(lián)網(wǎng)的相關(guān)技術(shù)也越來越受到關(guān)注。其中,Microsoft公司的.Net框架是全新的跨語言軟件開發(fā)平臺,順應(yīng)了當(dāng)今軟件工業(yè)分布式計(jì)算、面向組件、企業(yè)級應(yīng)用、軟件服務(wù)化和以Web為中心等大趨勢。
信息安全設(shè)備是一種帶有處理器和存儲器的小型硬件裝置,可通過計(jì)算機(jī)的數(shù)據(jù)通訊接口與計(jì)算機(jī)連接,一般通過USB接口與計(jì)算機(jī)相連,通常被稱為USB KEY或USB Token。
利用信息安全設(shè)備保護(hù)軟件時(shí),可以通過將程序的一部分寫入到信息安全設(shè)備中,而不必在主機(jī)上保留這一部分程序的副本,程序運(yùn)行時(shí),這部分程序也不會在計(jì)算機(jī)的內(nèi)存中出現(xiàn)。寫到信息安全設(shè)備中的程序稱為外置程序,一個(gè)信息安全設(shè)備中可以寫入多個(gè)外置程序。很明顯,安裝在計(jì)算機(jī)上的軟件離開了信息安全設(shè)備就不可能正常的工作,從而實(shí)現(xiàn)對軟件的保護(hù)。
目前,比較高端的信息安全設(shè)備是可編程的,利用其實(shí)現(xiàn)程序保護(hù)包含兩部分內(nèi)容,一部分是將被保護(hù)的程序中的關(guān)鍵代碼存儲到信息安全設(shè)備內(nèi),另一部分是實(shí)現(xiàn)計(jì)算機(jī)內(nèi)的被保護(hù)的程序與信息安全設(shè)備之間的通訊。這就要求編寫通訊指令,被保護(hù)的程序通過調(diào)用API(Application Programming Interface,應(yīng)用程序編程接口)實(shí)現(xiàn)與信息安全設(shè)備的通訊,其中API就是系統(tǒng)不同組成部分銜接的約定,是應(yīng)用程序用來與硬件系統(tǒng)交換信息和命令的程序接口。
編譯過程是指將某高級語言編寫的源程序翻譯成與之等價(jià)的低級語言(匯編語言或機(jī)器語言)的目標(biāo)程序的過程,其過程比較復(fù)雜,一般會包括6個(gè)階段1)詞法分析階段,詞法分析所依據(jù)的是語言的詞法規(guī)則,即描述單詞結(jié)構(gòu)的規(guī)則;2)語法分析階段是在詞法分析的基礎(chǔ)上將單詞序列分解成各類語法單位,語法分析所依據(jù)的是語言的語法規(guī)則,即描述程序結(jié)構(gòu)的規(guī)則。
3)語義分析階段,是指審查源程序有無語義錯誤,為代碼生成階段收集類型信息。例如語義分析的一個(gè)工作是進(jìn)行類型審查,審查每個(gè)算符是否具有語言規(guī)范允許的運(yùn)算對象。
4)中間代碼生成階段,在進(jìn)行完上述的語法分析和語義分析階段工作之后,有的編譯程序?qū)⒃闯绦蜃兂梢环N內(nèi)部表示形式,這種內(nèi)部表示形式叫做中間語言或中間代碼。所謂“中間代碼”是一種簡單、含義明確的記號系統(tǒng)。
5)代碼優(yōu)化階段,是對前階段產(chǎn)生的中間代碼進(jìn)行變換或進(jìn)行改造,目的是使生成的目標(biāo)代碼更為高級,即省時(shí)間和省空間。
6)目標(biāo)代碼生成階段,是把中間代碼變換成特定機(jī)器上的絕對指令代碼或可重定位的指令代碼或匯編指令代碼,這是編譯的最后階段,它的工作與硬件系統(tǒng)的結(jié)構(gòu)和指令的含義有關(guān)。
其中,詞法分析和語法分析本質(zhì)上都是對源程序的結(jié)構(gòu)進(jìn)行分析;語義分析和中間代碼生成所依據(jù)的是語言的語義規(guī)則。
編譯過程的6個(gè)階段的任務(wù),與表格管理和出錯處理等工作分別由下面幾個(gè)模塊或程序完成詞法分析程序、語法分析程序、語義分析程序、中間代碼生成程序、代碼優(yōu)化程序、目標(biāo)代碼生成程序、表格管理程序和出錯處理程序。
語法分析程序通常也被稱為語法分析器,利用語法分析器可以實(shí)現(xiàn)將一種語言編寫的程序轉(zhuǎn)變成另一種語言編寫的程序,例如目前可以實(shí)現(xiàn)利用語法分析器將C#語言編寫的程序代碼轉(zhuǎn)變成用C語言編寫的程序代碼等。
反編譯可以看成是編譯的逆過程,即將以機(jī)器語言形式存在的目標(biāo)代碼翻譯成與其功能等價(jià)的匯編語言形式或高級語言形式的代碼的過程。
指令變換是指將一種平臺的目標(biāo)指令根據(jù)程序執(zhí)行的邏輯轉(zhuǎn)換成另一種平臺的目標(biāo)指令的過程。
在基于對象的程序設(shè)計(jì)方法中,通常通過一組數(shù)據(jù)抽象來建立問題模型,這些數(shù)據(jù)抽象被稱為類(class)。
基于.Net架構(gòu)編寫的程序(簡稱.Net程序),例如,C++.net、C#、J#、VB.net等都可以基于.Net架構(gòu)編寫程序。.Net程序首先會經(jīng)過一次編譯,產(chǎn)生比源程序更易執(zhí)行的中間指令文件,稱為IL指令文本,然后再在.Net平臺上運(yùn)行該中間指令,正是因?yàn)檫@種特性,使得將基于.Net的應(yīng)用程序反編譯即可得到90%以上源代碼,所以.Net程序的安全性已經(jīng)成為非常重要的問題。一旦被解密者獲取,便會給軟件開發(fā)商(簡稱開發(fā)商)造成很大損失。
所謂虛擬機(jī),可以把它想象成一臺用軟件來模擬的機(jī)器,在這臺機(jī)器里有處理器、內(nèi)存、寄存器等各種硬件,模擬執(zhí)行各種指令,在這臺機(jī)器上運(yùn)行的軟件對運(yùn)行環(huán)境沒有特殊要求,所以虛擬機(jī)對在它上運(yùn)行的程序是透明的。例如,x86虛擬機(jī)模擬的是x86指令程序的運(yùn)行環(huán)境,c51虛擬機(jī)模擬的是c51指令程序的運(yùn)行環(huán)境。
目前,信息安全設(shè)備生產(chǎn)商(簡稱生產(chǎn)商)會在較高端的硬件設(shè)備中實(shí)現(xiàn)某種虛擬機(jī)功能,那么便可以在信息安全設(shè)備中直接運(yùn)行與實(shí)現(xiàn)的虛擬機(jī)相對應(yīng)格式的代碼,例如,硬件生產(chǎn)商在信息安全設(shè)備中實(shí)現(xiàn)了c51虛擬機(jī),目前的應(yīng)用方式就是將C語言通過KEIL編譯成c51代碼,存入信息安全設(shè)備中運(yùn)行。
目前針對.Net程序的保護(hù)主要采用以下方法利用純軟件的方法進(jìn)行保護(hù),整個(gè)過程都在計(jì)算機(jī)內(nèi)完成,具體實(shí)現(xiàn)步驟如下1)將.Net程序經(jīng)過反編譯生成IL文本文件;2)開發(fā)商改寫IL文本文件,在需要保護(hù)的內(nèi)容之外加入解密函數(shù);3)將改寫后的IL文本經(jīng)過編譯生成可以在.Net平臺上執(zhí)行的二進(jìn)制指令;4)通過軟件對二進(jìn)制指令文件中需要保護(hù)的部分進(jìn)行加密;5)運(yùn)行時(shí)通過事先寫入的解密函數(shù)對加密的二進(jìn)制指令進(jìn)行解密,從而實(shí)現(xiàn)對該.Net程序的保護(hù)。
這種現(xiàn)有技術(shù)的缺點(diǎn)是需要程序員手工參與改寫程序、工作量大、繁瑣,而且開發(fā)周期長、開發(fā)成本高;另外,即使開發(fā)商采用非常強(qiáng)大的加密算法,但是由于最終運(yùn)行時(shí)還是會將其解密后在計(jì)算機(jī)內(nèi)存中運(yùn)行,所以很容易被解密者獲取。
目前雖然也有利用信息安全設(shè)備實(shí)現(xiàn)對.Net程序進(jìn)行保護(hù)的方法,在安全性上較純軟件方法有所提高,但是卻需要程序員手工參與改寫程序,而且還要編寫與信息安全設(shè)備的通訊指令,工作量大、繁瑣;而且開發(fā)周期長、開發(fā)成本高;另外,程序員是通過對.Net程序的源代碼做改寫,而通常來說,源代碼比較容易丟失,因?yàn)橐话愣紩A艟幾g后的代碼,這也給開發(fā)工作帶來很多的不便利。
因此目前對于.Net程序的保護(hù)策略中,對于開發(fā)商而言,普遍存在開發(fā)過程復(fù)雜,效率低下,花費(fèi)時(shí)間較長,開發(fā)成本高的問題。
發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)中.Net程序保護(hù)需要程序員手工參與改寫程序、工作量大、繁瑣和開發(fā)周期長、成本高等問題,本發(fā)明提供了一種.Net程序保護(hù)的方法,所述方法具體包括利用程序保護(hù)工具自動將編譯好的.Net程序中的部分程序分離出來,所述程序保護(hù)工具對分離出來的程序進(jìn)行變換后,將其存儲到信息安全設(shè)備中;所述程序保護(hù)工具將通訊指令寫入分離后的.Net程序中;執(zhí)行分離后的.Net程序,通過所述通訊指令與所述信息安全設(shè)備建立通訊,所述分離出來的程序在所述信息安全設(shè)備內(nèi)部執(zhí)行,并返回執(zhí)行結(jié)果給所述分離后的.Net程序,所述分離后的.Net程序繼續(xù)執(zhí)行。
所述程序保護(hù)工具由信息安全設(shè)備生產(chǎn)商預(yù)先編寫。
所述分離出來的程序?yàn)槔贸绦虮Wo(hù)工具自動根據(jù)類或函數(shù)名分離出來的符合條件的程序段,或者為用戶指定的程序段。
所述信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)或x86虛擬機(jī)功能,所述變換具體為將所述分離出來的程序轉(zhuǎn)換成高級語言,再編譯成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
所述轉(zhuǎn)換包括反編譯和語法分析。
所述高級語言包括C、Pascal、Basic、Fortran、Foxpro或用戶自定義的編程語言。
所述信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)或x86虛擬機(jī)功能,所述變換具體為將所述分離出來的程序反編譯成IL匯編語言,經(jīng)過語法分析生成c51匯編語言或x86匯編語言,再編譯生成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
所述信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)或x86虛擬機(jī)功能,所述變換具體為將所述分離出來的程序反編譯成IL匯編語言,再經(jīng)過編譯后生成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
所述信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)或x86虛擬機(jī)功能,所述變換具體為將所述分離出來的程序進(jìn)行指令變換,生成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
與所述信息安全設(shè)備建立通訊之后還包括所述分離后的.Net程序調(diào)用API,將所述被分離出來的程序需要的參數(shù)和/或全局變量發(fā)送給所述信息安全設(shè)備。
所述返回的結(jié)果包括所述被分離出來的程序中的函數(shù)返回值和/或全局變量。
所述通訊指令由所述信息安全設(shè)備的生產(chǎn)商預(yù)先編寫。
所述信息安全設(shè)備通過USB接口與所述計(jì)算機(jī)連接。
本發(fā)明還提供了一種.Net程序保護(hù)系統(tǒng),所述系統(tǒng)包括自動分離存儲模塊,用于將編譯好的.Net程序其中部分程序分離出來,對分離出來的程序進(jìn)行變換后存儲到信息安全設(shè)備中;并將通訊指令寫入分離后的.Net程序中;
執(zhí)行模塊,用于執(zhí)行分離后的.Net程序,通過所述通訊指令與所述信息安全設(shè)備建立通訊,所述分離出來的程序在所述信息安全設(shè)備內(nèi)部執(zhí)行,并返回執(zhí)行結(jié)果給所述分離后的.Net程序,所述分離后的.Net程序繼續(xù)執(zhí)行。
所述自動分離存儲模塊包括變換單元,用于將所述分離出來的程序反變換成高級語言,再編譯成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
本發(fā)明的有益效果主要表現(xiàn)在由于避免了手工改寫程序的過程,所以與以往的保護(hù)方法相比,大大簡化了開發(fā)流程,提高了開發(fā)效率,縮短了開發(fā)周期,降低了開發(fā)成本。
圖1是本發(fā)明實(shí)施例一.Net程序保護(hù)的方法的流程圖;圖2是本發(fā)明實(shí)施例二.Net程序保護(hù)的方法的流程圖;圖3是本發(fā)明實(shí)施例三.Net程序保護(hù)的方法的流程圖;圖4是本發(fā)明實(shí)施例四.Net程序保護(hù)的方法的流程圖;圖5是本發(fā)明實(shí)施例五.Net程序保護(hù)的方法的流程圖;圖6是本發(fā)明實(shí)施例六.Net程序保護(hù)的系統(tǒng)的結(jié)構(gòu)圖。
具體實(shí)施例方式
下面結(jié)合附圖和具體實(shí)施例對本發(fā)明作進(jìn)一步說明,但本發(fā)明不局限于下面的實(shí)施例。
本發(fā)明中的通訊指令由信息安全設(shè)備生產(chǎn)商預(yù)先編寫好,用于使被保護(hù)的.Net程序與信息安全設(shè)備之間進(jìn)行通訊;信息安全設(shè)備通過USB接口與計(jì)算機(jī)連接。
實(shí)施例一在本實(shí)施例中信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)功能,參見圖1,本發(fā)明提供了一種.Net程序保護(hù)的方法,首先執(zhí)行以下步驟步驟101利用程序保護(hù)工具自動將編譯好的被保護(hù).Net程序中的一部分程序分離出來;所述分離是指根據(jù)類或函數(shù)名自動查找并分離符合條件的程序段,分離出來的程序段是編譯好的.Net程序(其中包含IL指令文本)中的一部分;也可以是由用戶選擇符合條件的程序段;步驟102程序保護(hù)工具將分離出來的程序反編譯成C#程序,也可以反編譯成其它基于.Net架構(gòu)的程序,如C++.net、J#、VB.net等;
步驟103程序保護(hù)工具利用語法分析器將C#程序轉(zhuǎn)換成高級語言C程序;步驟104程序保護(hù)工具利用keil c51編譯器將C程序編譯成含有c51指令的二進(jìn)制文件,該格式的文件可以在信息安全設(shè)備上執(zhí)行;步驟105程序保護(hù)工具將含有c51指令的二進(jìn)制文件存儲在信息安全設(shè)備中;步驟106程序保護(hù)工具將通訊指令寫入分離后的被保護(hù)的.Net程序中。
在用戶從開發(fā)商得到信息安全設(shè)備后,執(zhí)行以下步驟步驟107將信息安全設(shè)備與計(jì)算機(jī)連接;步驟108在計(jì)算機(jī)中執(zhí)行分離后的被保護(hù)的.Net程序,該程序是在計(jì)算機(jī)的內(nèi)存中運(yùn)行的;步驟109當(dāng)執(zhí)行到通訊指令時(shí),分離后的被保護(hù)的.Net程序與信息安全設(shè)備建立通訊;然后分離后的被保護(hù)的.Net程序調(diào)用API,將被分離出來的程序需要的參數(shù)和/或全局變量發(fā)送給信息安全設(shè)備;步驟110信息安全設(shè)備執(zhí)行被分離出來的程序,此過程始終都在信息安全設(shè)備內(nèi)運(yùn)行,運(yùn)行完畢后,將運(yùn)行結(jié)果返回給分離后的被保護(hù)的.Net程序;該結(jié)果包括被分離出來的程序中的函數(shù)的返回值和/或全局變量;步驟111通訊指令將運(yùn)行的結(jié)果取出,分離后的被保護(hù)的.Net程序在計(jì)算機(jī)的內(nèi)存中繼續(xù)執(zhí)行。
上述程序保護(hù)工具由信息安全設(shè)備生產(chǎn)商預(yù)先編寫好。
下面舉例說明如何用信息安全設(shè)備實(shí)現(xiàn)對一段用C#語言編寫的.Net程序的保護(hù),假設(shè)信息安全設(shè)備中已經(jīng)實(shí)現(xiàn)c51虛擬機(jī)功能信息安全設(shè)備生產(chǎn)廠家會預(yù)先編寫好一套專用于.Net程序保護(hù)的工具,隨信息安全設(shè)備一起提供給軟件開發(fā)商或用戶,此時(shí)軟件開發(fā)商或用戶就可以直接將要保護(hù)的.Net程序利用此套專用于.Net程序保護(hù)的工具完成程序分離、變換以及存儲到設(shè)備中的過程,實(shí)現(xiàn)對其的保護(hù),從而避免了軟件開發(fā)商或用戶手工參與程序改寫的步驟,大大降低了工作的繁瑣程度,并且縮短了開發(fā)周期,使信息安全設(shè)備更加便利的應(yīng)用于.Net程序的保護(hù)領(lǐng)域。
首先,專用于.Net程序保護(hù)的工具將要進(jìn)行保護(hù)的用C#語言編寫的.Net程序進(jìn)行分離,可以根據(jù)類或函數(shù)名自動分離出符合條件的程序段,也可以由軟件開發(fā)商或用戶指定要分離的程序段。本例中分離出兩段程序段,因?yàn)?Net程序是個(gè)目標(biāo)文件,需要反編譯才能得到源代碼,利用上述專用于.Net程序保護(hù)的工具將其經(jīng)反編譯后,得到C#語言程序,分別表示如下
從被保護(hù)的程序中分離出來的程序段一class a{public int g_Var;public a(int initVar){g_Var=initVar;}public int add(int a,int b){return a+b;}}從被保護(hù)的程序中分離出來的程序段二a var=new a();a.add(1,2);上述程序段一在運(yùn)行時(shí)會被程序段二調(diào)用。
然后,專用于.Net程序保護(hù)的工具利用語法分析的方法將上述兩段C#程序轉(zhuǎn)換成C語言程序,分別如下inta_g_Var;a_add(int a,int b){return a+b+a_g_Var;}和a_g_Var=initVar;a_add(1,2);其中參數(shù)a、b和全局變量g_Var是上述兩段程序段在運(yùn)行時(shí)需要的數(shù)值。
然后專用于.Net程序保護(hù)的工具會將其轉(zhuǎn)換成可以在信息安全設(shè)備中執(zhí)行的格式,由于信息安全設(shè)備中實(shí)現(xiàn)的是c51虛擬機(jī)功能,所以專用于.Net程序保護(hù)的工具會將上述兩段C程序段通過keil c51編譯器編譯成含有c51指令的二進(jìn)制文件格式,分別如下MOVA,R7ADDA,R5MOVR7,AMOVA,R6ADDC A,R4MOVR6,AMOVDPTR,#0x000 1MOVX A,@DPTRADDA,R7MOVR7,AMOVDPTR,#a_g_Var(0x0000)MOVx A,@DPTRADDC A,R6MOVR6,ARET和MOVDPTR,#a_g_Var(0x0000)CLRAMOVX @DPTR,AA3 INC DPTRMOVA,#0x0AMOVX @DPTR,AMOVR5,#0x02MOVR4,#a_g_Var(0x00)MOVR7,#0x01MOVR6,#a_g_Var(0x00)LJMP a_add(C0017)此時(shí)專用于.Net程序保護(hù)的工具便會將上述編譯后的兩段含c51指令的二進(jìn)制程序段直接存儲到信息安全設(shè)備中,同時(shí)將通訊指令寫入到被保護(hù)的.Net程序中,完成對.Net程序的保護(hù),即只有在該信息安全設(shè)備的共同參與下才能正常執(zhí)行所述被保護(hù)的.Net程序。
經(jīng)過上述處理后,在信息安全設(shè)備的共同參與下,執(zhí)行被保護(hù)的.Net程序的過程如下將信息安全設(shè)備與計(jì)算機(jī)通過USB接口連接后,在計(jì)算機(jī)中運(yùn)行上述被保護(hù)的.Net程序。被保護(hù)的.Net程序在計(jì)算機(jī)內(nèi)存中運(yùn)行,當(dāng)遇到通訊指令時(shí),通過調(diào)用API,將設(shè)備內(nèi)存儲的兩段程序運(yùn)行時(shí)所需的入口參數(shù)a和b的值傳給信息安全設(shè)備,同時(shí)還會把全局變量g_Var的值也一起傳給信息安全設(shè)備。
當(dāng)預(yù)先存儲在信息安全設(shè)備中的程序段接收到參數(shù)a和b的值,以及全局變量g_Var的值后,在信息安全設(shè)備的c51虛擬機(jī)環(huán)境下執(zhí)行該程序段。執(zhí)行完畢后,將其返回值和全局變量的值返回給計(jì)算機(jī)內(nèi)的被保護(hù)的.Net程序,其中全局變量的值在信息安全設(shè)備內(nèi)的執(zhí)行過程中有可能改變,也有可能不改變,如果改變了則要將結(jié)果返回給計(jì)算機(jī),如果沒有改變,則結(jié)果可以不返回。本例中全局變量g_Var的值在信息安全設(shè)備內(nèi)的執(zhí)行過程中沒有改變,所以在上述兩段程序段執(zhí)行完畢后,只需將運(yùn)行結(jié)果返回計(jì)算機(jī)內(nèi)的被保護(hù)的.Net程序即可。被保護(hù)的.Net程序在計(jì)算機(jī)的內(nèi)存中更新返回的參數(shù)值,然后繼續(xù)執(zhí)行,從而實(shí)現(xiàn)了利用信息安全設(shè)備對.Net程序的保護(hù)。
實(shí)施例二在本實(shí)施例中信息安全設(shè)備能夠?qū)崿F(xiàn)x86虛擬機(jī)功能,參見圖2,本發(fā)明還提供了一種.Net程序保護(hù)的方法,首先執(zhí)行以下步驟步驟201利用程序保護(hù)工具自動將編譯好的被保護(hù)的.Net程序中的一部分程序分離出來;所述分離是指根據(jù)類或函數(shù)名自動查找并分離符合條件的程序段,分離出來的程序段是編譯好的.Net程序(其中包含IL指令文本)中的一部分;也可以是由用戶選擇符合條件的程序段;步驟202程序保護(hù)工具將分離出來的程序反編譯成C#程序,也可以反編譯成其它基于.Net架構(gòu)的程序,如C++.net、J#、VB.net等;步驟203程序保護(hù)工具利用語法分析器將C#程序轉(zhuǎn)換成高級語言C程序;步驟204程序保護(hù)工具將C程序編譯成含有x86指令的二進(jìn)制文件,該格式的文件可以在信息安全設(shè)備上執(zhí)行;步驟205程序保護(hù)工具將含有x86指令的二進(jìn)制文件存儲在信息安全設(shè)備中;步驟206程序保護(hù)工具將通訊指令寫入分離后的被保護(hù)的.Net程序中。
在用戶從開發(fā)商得到信息安全設(shè)備后,執(zhí)行以下步驟
步驟207將信息安全設(shè)備與計(jì)算機(jī)連接;步驟208在計(jì)算機(jī)中執(zhí)行分離后的被保護(hù)的.Net程序,該程序是在計(jì)算機(jī)的內(nèi)存中運(yùn)行的;步驟209當(dāng)執(zhí)行到通訊指令時(shí),分離后的被保護(hù)的.Net程序與信息安全設(shè)備建立通訊;然后分離后的被保護(hù)的.Net程序調(diào)用API,將被分離出來的程序需要的參數(shù)和/或全局變量發(fā)送給信息安全設(shè)備;步驟210信息安全設(shè)備執(zhí)行被分離出來的程序,此過程始終都在信息安全設(shè)備內(nèi)運(yùn)行,運(yùn)行完畢后,將運(yùn)行結(jié)果返回給分離后的被保護(hù)的.Net程序;該結(jié)果包括被分離出來的程序中的函數(shù)的返回值和/或全局變量;步驟211通訊指令將運(yùn)行的結(jié)果取出,分離后的被保護(hù)的.Net程序在計(jì)算機(jī)的內(nèi)存中繼續(xù)執(zhí)行。
上述程序保護(hù)工具由信息安全設(shè)備生產(chǎn)商預(yù)先編寫好。
實(shí)施例一中的步驟103與實(shí)施例二中的步驟203中將C#程序轉(zhuǎn)換成C程序,實(shí)際應(yīng)用中也可以將C#程序轉(zhuǎn)換成其它高級語言,如Pascal、Basic、Fortran、Foxpro或用戶自定義的編程語言。
實(shí)施例三在本實(shí)施例中信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)功能,參見圖3,本發(fā)明還提供了一種.Net程序保護(hù)的方法,首先執(zhí)行以下步驟步驟301利用程序保護(hù)工具自動將編譯好的被保護(hù).Net程序中的一部分程序分離出來;所述分離是指根據(jù)類或函數(shù)名自動查找并分離符合條件的程序段,分離出來的程序段是編譯好的.Net程序(其中包含IL指令文本)中的一部分;也可以是由用戶選擇符合條件的程序段;步驟302程序保護(hù)工具將分離出來的程序反編譯成IL匯編指令文件;步驟303程序保護(hù)工具利用語法分析器將IL匯編指令文件轉(zhuǎn)換成c51匯編指令文件;步驟304程序保護(hù)工具利用keil c51編譯器將c51匯編指令文件編譯成含有c51指令的二進(jìn)制文件,該格式的文件可以在信息安全設(shè)備上執(zhí)行;步驟305程序保護(hù)工具將含有c51指令的二進(jìn)制文件存儲在信息安全設(shè)備中;步驟306程序保護(hù)工具將通訊指令寫入分離后的被保護(hù)的.Net程序中。
在用戶從開發(fā)商得到信息安全設(shè)備后,執(zhí)行以下步驟步驟307將信息安全設(shè)備與計(jì)算機(jī)連接;
步驟308在計(jì)算機(jī)中執(zhí)行分離后的被保護(hù)的.Net程序,該程序是在計(jì)算機(jī)的內(nèi)存中運(yùn)行的;步驟309當(dāng)執(zhí)行到通訊指令時(shí),分離后的被保護(hù)的.Net程序與信息安全設(shè)備建立通訊;然后分離后的被保護(hù)的.Net程序調(diào)用API,將被分離出來的程序需要的參數(shù)和/或全局變量發(fā)送給信息安全設(shè)備;步驟310信息安全設(shè)備執(zhí)行被分離出來的程序,此過程始終都在信息安全設(shè)備內(nèi)運(yùn)行,運(yùn)行完畢后,將運(yùn)行結(jié)果返回給分離后的被保護(hù)的.Net程序;該結(jié)果包括被分離出來的程序中的函數(shù)的返回值和/或全局變量;步驟311通訊指令將運(yùn)行的結(jié)果取出,分離后的被保護(hù)的.Net程序在計(jì)算機(jī)的內(nèi)存中繼續(xù)執(zhí)行。
上述程序保護(hù)工具由信息安全設(shè)備生產(chǎn)商預(yù)先編寫好。
如果信息安全設(shè)備能夠?qū)崿F(xiàn)x86虛擬機(jī)功能,則步驟303至305可以由下面的步驟來替換程序保護(hù)工具利用語法分析器將IL匯編指令文件轉(zhuǎn)換成x86匯編指令文件;程序保護(hù)工具編譯x86匯編指令文件為含有x86指令的二進(jìn)制文件,該格式的文件可以在信息安全設(shè)備上執(zhí)行;程序保護(hù)工具將含有x86指令的二進(jìn)制文件存儲在信息安全設(shè)備中。
實(shí)施例四在本實(shí)施例中信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)功能,參見圖4,本發(fā)明還提供了一種.Net程序保護(hù)的方法,首先執(zhí)行以下步驟步驟401利用程序保護(hù)工具自動將編譯好的被保護(hù).Net程序中的一部分程序分離出來;所述分離是指根據(jù)類或函數(shù)名自動查找并分離符合條件的程序段,分離出來的程序段是編譯好的.Net程序(其中包含IL指令文本)中的一部分;也可以是由用戶選擇符合條件的程序段;步驟402程序保護(hù)工具將分離出來的程序反編譯成IL匯編指令文件;步驟403程序保護(hù)工具編譯IL匯編指令文件生成含有c51指令的二進(jìn)制文件,該格式的文件可以在信息安全設(shè)備上執(zhí)行;步驟404程序保護(hù)工具將含有c51指令的二進(jìn)制文件存儲在信息安全設(shè)備中;步驟405程序保護(hù)工具將通訊指令寫入分離后的被保護(hù)的.Net程序中。
在用戶從開發(fā)商得到信息安全設(shè)備后,執(zhí)行以下步驟
步驟406將信息安全設(shè)備與計(jì)算機(jī)連接;步驟407在計(jì)算機(jī)中執(zhí)行分離后的被保護(hù)的.Net程序,該程序是在計(jì)算機(jī)的內(nèi)存中運(yùn)行的;步驟408當(dāng)執(zhí)行到通訊指令時(shí),分離后的被保護(hù)的.Net程序與信息安全設(shè)備建立通訊;然后分離后的被保護(hù)的.Net程序調(diào)用API,將被分離出來的程序需要的參數(shù)和/或全局變量發(fā)送給信息安全設(shè)備;步驟409信息安全設(shè)備執(zhí)行被分離出來的程序,此過程始終都在信息安全設(shè)備內(nèi)運(yùn)行,運(yùn)行完畢后,將運(yùn)行結(jié)果返回給分離后的被保護(hù)的.Net程序;該結(jié)果包括被分離出來的程序中的函數(shù)的返回值和/或全局變量;步驟410通訊指令將運(yùn)行的結(jié)果取出,分離后的被保護(hù)的.Net程序在計(jì)算機(jī)的內(nèi)存中繼續(xù)執(zhí)行。
上述程序保護(hù)工具由信息安全設(shè)備生產(chǎn)商預(yù)先編寫好。
如果信息安全設(shè)備能夠?qū)崿F(xiàn)x86虛擬機(jī)功能,則步驟403和步驟404可以由下面的步驟來替換程序保護(hù)工具編譯IL匯編指令文件生成含有x86指令的二進(jìn)制文件,該格式的文件可以在信息安全設(shè)備上執(zhí)行;程序保護(hù)工具將含有x86指令的二進(jìn)制文件存儲在信息安全設(shè)備中。
實(shí)施例五在本實(shí)施例中信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)功能,參見圖5,本發(fā)明還提供了一種.Net程序保護(hù)的方法,首先執(zhí)行以下步驟步驟501利用程序保護(hù)工具自動將編譯好的被保護(hù).Net程序中的一部分程序分離出來;所述分離是指根據(jù)類或函數(shù)名自動查找并分離符合條件的程序段,分離出來的程序段是編譯好的.Net程序(其中包含IL指令文本)中的一部分;也可以是由用戶選擇符合條件的程序段;步驟502程序保護(hù)工具將分離出來的程序經(jīng)過指令變換生成含有c51指令的二進(jìn)制文件,該格式的文件可以在信息安全設(shè)備上執(zhí)行;步驟503程序保護(hù)工具將含有c51指令的二進(jìn)制文件存儲在信息安全設(shè)備中;步驟504程序保護(hù)工具將通訊指令寫入分離后的被保護(hù)的.Net程序中。
在用戶從開發(fā)商得到信息安全設(shè)備后,執(zhí)行以下步驟步驟505將信息安全設(shè)備與計(jì)算機(jī)連接;
步驟506在計(jì)算機(jī)中執(zhí)行分離后的被保護(hù)的.Net程序,該程序是在計(jì)算機(jī)的內(nèi)存中運(yùn)行的;步驟507當(dāng)執(zhí)行到通訊指令時(shí),分離后的被保護(hù)的.Net程序與信息安全設(shè)備建立通訊;然后分離后的被保護(hù)的.Net程序調(diào)用API,將被分離出來的程序需要的參數(shù)和/或全局變量發(fā)送給信息安全設(shè)備;步驟508信息安全設(shè)備執(zhí)行被分離出來的程序,此過程始終都在信息安全設(shè)備內(nèi)運(yùn)行,運(yùn)行完畢后,將運(yùn)行結(jié)果返回給分離后的被保護(hù)的.Net程序;該結(jié)果包括被分離出來的程序中的函數(shù)的返回值和/或全局變量;步驟509通訊指令將運(yùn)行的結(jié)果取出,分離后的被保護(hù)的.Net程序在計(jì)算機(jī)的內(nèi)存中繼續(xù)執(zhí)行。
上述程序保護(hù)工具由信息安全設(shè)備生產(chǎn)商預(yù)先編寫好。
如果信息安全設(shè)備能夠?qū)崿F(xiàn)x86虛擬機(jī)功能,則步驟502和步驟503可以由下面的步驟來替換程序保護(hù)工具將分離出來的程序經(jīng)過指令變換生成含有x86指令的二進(jìn)制文件,該格式的文件可以在信息安全設(shè)備上執(zhí)行;程序保護(hù)工具將含有x86指令的二進(jìn)制文件存儲在信息安全設(shè)備中。
實(shí)施例六參見圖6,本發(fā)明還提供了一種.Net程序保護(hù)的系統(tǒng),在信息安全設(shè)備的配合下實(shí)現(xiàn).Net程序的保護(hù),包括1)自動分離存儲模塊,用于將編譯好的.Net程序其中部分程序分離出來,對分離出來的程序進(jìn)行變換后存儲到信息安全設(shè)備中;并將通訊指令寫入分離后的.Net程序中;2)執(zhí)行模塊,用于執(zhí)行分離后的.Net程序,通過通訊指令與信息安全設(shè)備建立通訊,分離出來的程序在信息安全設(shè)備內(nèi)部執(zhí)行,并返回執(zhí)行結(jié)果給分離后的.Net程序,分離后的.Net程序繼續(xù)執(zhí)行。
上述自動分離存儲模塊包括變換單元,用于將分離出來的程序反變換成高級語言,再編譯成信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
信息安全設(shè)備中可以存儲多個(gè)程序段,以更安全地保護(hù).Net程序。
以上所述的實(shí)施例,只是本發(fā)明較優(yōu)選的具體實(shí)施方式
的幾種,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進(jìn)行的通常變化和替換都應(yīng)包含在本發(fā)明的保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種.Net程序保護(hù)的方法,其特征在于,所述方法具體包括利用程序保護(hù)工具自動將編譯好的.Net程序中的部分程序分離出來,所述程序保護(hù)工具對分離出來的程序進(jìn)行變換后,將其存儲到信息安全設(shè)備中;所述程序保護(hù)工具將通訊指令寫入分離后的.Net程序中;執(zhí)行分離后的.Net程序,通過所述通訊指令與所述信息安全設(shè)備建立通訊,所述分離出來的程序在所述信息安全設(shè)備內(nèi)部執(zhí)行,并返回執(zhí)行結(jié)果給所述分離后的.Net程序,所述分離后的.Net程序繼續(xù)執(zhí)行。
2.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述程序保護(hù)工具由信息安全設(shè)備生產(chǎn)商預(yù)先編寫。
3.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述分離出來的程序?yàn)槔贸绦虮Wo(hù)工具自動根據(jù)類或函數(shù)名分離出來的符合條件的程序段,或者為用戶指定的程序段。
4.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)或x86虛擬機(jī)功能,所述變換具體為將所述分離出來的程序轉(zhuǎn)換成高級語言,再編譯成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
5.根據(jù)權(quán)利要求4所述的.Net程序保護(hù)的方法,其特征在于,所述轉(zhuǎn)換包括反編譯和語法分析。
6.根據(jù)權(quán)利要求4所述的.Net程序保護(hù)的方法,其特征在于,所述高級語言包括C、Pascal、Basic、Fortran、Foxpro或用戶自定義的編程語言。
7.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)或x86虛擬機(jī)功能,所述變換具體為將所述分離出來的程序反編譯成IL匯編語言,經(jīng)過語法分析生成c51匯編語言或x86匯編語言,再編譯生成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
8.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)或x86虛擬機(jī)功能,所述變換具體為將所述分離出來的程序反編譯成IL匯編語言,再經(jīng)過編譯后生成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
9.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述信息安全設(shè)備能夠?qū)崿F(xiàn)c51虛擬機(jī)或x86虛擬機(jī)功能,所述變換具體為將所述分離出來的程序進(jìn)行指令變換,生成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
10.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,與所述信息安全設(shè)備建立通訊之后還包括所述分離后的.Net程序調(diào)用API,將所述被分離出來的程序需要的參數(shù)和/或全局變量發(fā)送給所述信息安全設(shè)備。
11.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述返回的結(jié)果包括所述被分離出來的程序中的函數(shù)返回值和/或全局變量。
12.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述通訊指令由所述信息安全設(shè)備的生產(chǎn)商預(yù)先編寫。
13.根據(jù)權(quán)利要求1所述的.Net程序保護(hù)的方法,其特征在于,所述信息安全設(shè)備通過USB接口與所述計(jì)算機(jī)連接。
14.一種.Net程序保護(hù)系統(tǒng),其特征在于,所述系統(tǒng)包括自動分離存儲模塊,用于將編譯好的.Net程序其中部分程序分離出來,對分離出來的程序進(jìn)行變換后存儲到信息安全設(shè)備中;并將通訊指令寫入分離后的.Net程序中;執(zhí)行模塊,用于執(zhí)行分離后的.Net程序,通過所述通訊指令與所述信息安全設(shè)備建立通訊,所述分離出來的程序在所述信息安全設(shè)備內(nèi)部執(zhí)行,并返回執(zhí)行結(jié)果給所述分離后的.Net程序,所述分離后的.Net程序繼續(xù)執(zhí)行。
15.根據(jù)權(quán)利要求14所述的.Net程序保護(hù)的系統(tǒng),其特征在于,所述自動分離存儲模塊包括變換單元,用于將所述分離出來的程序反變換成高級語言,再編譯成所述信息安全設(shè)備中能夠?qū)崿F(xiàn)的虛擬機(jī)所支持的指令格式。
全文摘要
本發(fā)明提供了一種.Net程序保護(hù)的方法和系統(tǒng),屬于信息安全技術(shù)領(lǐng)域。為了解決現(xiàn)有技術(shù)中.Net程序保護(hù)需要程序員手工改寫、工作量大、繁瑣和開發(fā)周期長、成本高等問題,本發(fā)明提供了一種.Net程序保護(hù)的方法,包括利用程序保護(hù)工具將編譯好的.Net程序中的一部分程序分離出來,變換后存儲到信息安全設(shè)備中,并將通訊指令寫入分離后的.Net程序中;執(zhí)行分離后的.Net程序。本發(fā)明還提供了一種.Net程序保護(hù)的系統(tǒng),包括自動分離存儲模塊和執(zhí)行模塊。本發(fā)明由于避免了手工改寫程序的過程,大大簡化了開發(fā)流程,提高了開發(fā)效率,降低了開發(fā)成本。
文檔編號G06F21/22GK1996336SQ200610169760
公開日2007年7月11日 申請日期2006年12月28日 優(yōu)先權(quán)日2006年12月28日
發(fā)明者陸舟, 于華章 申請人:北京飛天誠信科技有限公司