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

一種Java程序的運行方法及電子終端的制作方法

文檔序號:6331321閱讀:168來源:國知局
專利名稱:一種Java程序的運行方法及電子終端的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及電子通信領(lǐng)域,尤其涉及一種Java程序的運行方法及電子終端。
背景技術(shù)
隨著Java語言的普及和應(yīng)用,越來越多的軟件使用Java進行實現(xiàn)。由于Java語 言的動態(tài)性和靈活性,對其源代碼的保護變得十分困難?,F(xiàn)有技術(shù)中,借助于反編譯可以很容易地將源代碼從其二進制類文件中提取出 來,因此,任何一個惡意用戶都可以利用反編譯工具,如Jad (應(yīng)用程序開發(fā)聯(lián)系會議)等工 具對軟件進行逆向工程攻擊,可以破解商業(yè)軟件中授權(quán)保護的程序段進而隨意分發(fā)未經(jīng)授 權(quán)的拷貝。而對于經(jīng)驗豐富的攻擊者而言,甚至不用反編譯而直接修改二進制的字節(jié)碼來 進行攻擊,獲取源代碼。如何更好地保護軟件的知識產(chǎn)權(quán),保護軟件的源代碼不被攻擊而泄露成為一個亟 需解決的問題。

發(fā)明內(nèi)容
本發(fā)明實施例所要解決的技術(shù)問題在于,提供一種Java程序的運行方法及電子 終端。從二進制級別上確保Java字節(jié)碼的安全,實現(xiàn)了更好地保護軟件核心算法和商業(yè)機 密不被竊取。為了解決上述技術(shù)問題,本發(fā)明實施例提供了一種Java程序的運行方法,包括啟動當(dāng)前Java虛擬機(JavaVM,Java Virtual Machine),加載基于Java虛擬機 工具接口的動態(tài)鏈接庫文件;根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識信息;當(dāng)識別結(jié)果為是時,正常啟動所述Java虛擬機運行Java程序;當(dāng)識別結(jié)果為否 時,退出啟動程序。其中,所述啟動當(dāng)前Java虛擬機的步驟之前還包括初始化Java虛擬機;所述初始化Java虛擬機的步驟包括啟動預(yù)設(shè)的Java啟動器,設(shè)置Java虛擬機的 標識信息。其中,所述啟動當(dāng)前Java虛擬機的步驟之前還包括基于高級力口密標準 AES (AES,Advanced Encryption Standard)加密算法,對 Java 程序的class文件進行加密。其中,所述正常啟動所述Java虛擬機運行Java程序的步驟包括所述Java虛擬機檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征信息;當(dāng)檢測結(jié)果為是時,根據(jù)所述動態(tài)鏈接庫文件處理class文件;當(dāng)檢測結(jié)果為否 時,退出運行程序。其中,含有預(yù)設(shè)的標識特征信息的動態(tài)鏈接庫文件設(shè)有對所述class文件進行解 密的解密密鑰;
所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件處理class文件的步驟包括所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件的解密密鑰,調(diào)用AES算法對所述 class文件進行解密,并根據(jù)解密后的class文件執(zhí)行指令。對應(yīng)地,本發(fā)明實施例還提供了一種電子終端,包括Java虛擬機啟動模塊,用于啟動當(dāng)前Java虛擬機;加載模塊,用于加載基于Java虛擬機工具接口的動態(tài)鏈接庫文件;標識識別模塊,用于根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有預(yù) 設(shè)的標識信息;識別處理模塊,用于當(dāng)所述標識識別模塊的識別結(jié)果為是時,正常啟動所述Java 虛擬機運行Java程序;當(dāng)所述標識識別模塊的識別結(jié)果為否時,退出啟動程序。其中,所述電子終端還包括虛擬機初始化模塊,用于初始化Java虛擬機;所述虛擬機初始化模塊啟動電子終端預(yù)設(shè)的Java啟動器,設(shè)置Java虛擬機的標 識fe息。其中,所述電子終端還包括加密模塊,用于基于高級加密標準AES加密算法,對Java程序的class文件進行 加密。其中,所述識別處理模塊包括觸發(fā)檢測單元,用于當(dāng)所述標識識別模塊的識別結(jié)果為是時,觸發(fā)所述Java虛擬 機檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征信息;當(dāng)所述檢測結(jié)果為是時,所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件處理class文 件;當(dāng)所述檢測結(jié)果為否時,所述Java虛擬機退出運行程序。其中,含有預(yù)設(shè)的標識特征信息的動態(tài)鏈接庫文件設(shè)有對所述class文件進行解 密的解密密鑰;當(dāng)所述檢測結(jié)果為是時,所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件的解密密鑰, 調(diào)用AES算法對所述class文件進行解密,并根據(jù)解密后的class文件執(zhí)行指令。實施本發(fā)明實施例,具有如下有益效果通過識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識信息,當(dāng)識別出當(dāng)前的Java虛擬 機含有預(yù)設(shè)的標識信息時才正常啟動所述Java虛擬機運行Java程序,且該Java虛擬機還 檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征信息,當(dāng)檢測到該動態(tài)鏈接庫文件含有 預(yù)設(shè)的標識特征信息時才根據(jù)所述動態(tài)鏈接庫文件處理class文件,否則退出運行程序, 實現(xiàn)了從二進制級別上確保Java字節(jié)碼的安全,讓攻擊者無法取得字節(jié)碼,從而從根本 上保護商業(yè)軟件的源代碼不被竊取,更加安全的保護了商業(yè)軟件的核心算法和商業(yè)機密; 采用本發(fā)明的技術(shù)方案不會損失任何Java的特性,可以實現(xiàn)跨平臺Java字節(jié)碼的保護; 采用運行期面向切面編程(AOP,Aspect Oriented Programming)外掛方式裝載,對現(xiàn)有 的Java軟件系統(tǒng)沒有任何侵入影響;由于控制在Java虛擬機級別上,對java平臺標準版 (JavaSE)與java平臺企業(yè)版(JavaEE)環(huán)境都是通用的,并且部署簡單,成本低。


為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明Java程序的運行方法的第一實施例流程示意圖;圖2是本發(fā)明Java程序的運行方法的第二實施例流程示意圖;圖3是本發(fā)明電子終端的第一實施例的結(jié)構(gòu)示意圖;圖4是本發(fā)明電子終端的第二實施例的結(jié)構(gòu)示意圖;圖5是本發(fā)明電子終端的第三實施例的結(jié)構(gòu)示意圖;圖6是本發(fā)明電子終端的第四實施例的結(jié)構(gòu)示意圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。如圖1示出的本發(fā)明Java程序的運行方法的第一實施例流程示意圖,包括步驟SlOl 啟動當(dāng)前Java虛擬機,加載基于Java虛擬機工具接口的動態(tài)鏈接庫 文件;具體地,用戶需要運行Java程序,向電子終端發(fā)送運行Java程序的指令,電子終 端接收到該指令后,啟動當(dāng)前Java虛擬機,并加載基于Java虛擬機工具接口(JVMTI,Java Virtual Machine Tool Interface)的動態(tài)鏈接庫文件;該Java虛擬機可以為用戶安裝 的Java虛擬機,也可以電子終端本身自帶的Java虛擬機;該動態(tài)鏈接庫文件可以為基于 windows平臺的DLL組件(如Agent, dll),也可以為基于Linux平臺的SO組件等等。步驟S102 根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識 fn息;具體地,當(dāng)識別結(jié)果為是時,則執(zhí)行步驟S103 ;當(dāng)識別結(jié)果為否時,則退出啟動程
序,結(jié)束流程。步驟S103 正常啟動所述Java虛擬機運行Java程序。需要說明的是,本發(fā)明實施例還包括,技術(shù)人員編寫完畢Java程序后,首先初始 化Java虛擬機,預(yù)先設(shè)置Java虛擬機的標識信息,具體地技術(shù)人員定制Java啟動器,采 用C語言修改Java, c源文件,以通過啟動該定制的Java啟動器,在首次初始化Java虛擬 機的過程中給Java虛擬機預(yù)先設(shè)置標識信息,下面列舉一個初始化Java虛擬機,設(shè)置Java 虛擬機的標識信息的例子,但不限于如下的形式/*^Initializes the Java Virtual Machine. Also frees options array when^finished.*/
static jboolean InitializeJVM(JavaVM**pvm, JNIEnv**penv,InvocationFunctions氺ifn){JavaVMInitArgs args ;jint r ;memset(&args,0, sizeof(args));args. version = JNI_VERSI0N_1_2 ;args. ηOptions = numOptions ;args. options = options ;args. ignoreUnrecognized = JNI_FALSE ;if (_launcher_debug) {int i = O ;printf(" JavaVM args:\n ");printf (" version 0x% 081x, " , (long)args. version);printf (" ignoreUnrecognized is% s,",args. ignoreUnrecognized ? “ JNI_TRUE" “ JNI_FALSE");printf (" η Options is% ld\n〃 , (long) args. nOptions);for(i = 0 ;i < numOptions ;i++)printf (" option2d] = ' % s' \n〃 , i,args. options[i]. optionString);}//設(shè)置JavaVM的標識信息,該標識信息包括但不限于一個為“ 123456”的序列號
寸寸pvm- > reservedO = " 123456〃 ;r = ifn- > CreateJavaVM(pvm, (void**) penv, &args);JLI_MemFree(options);return r == JNI_0K ;}那么在步驟S102中,電子終端根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是
否含有預(yù)設(shè)的標識信息(123456的序列號),若識別出當(dāng)前Java虛擬機沒有含有該序列號, 表明當(dāng)前Java虛擬機沒有權(quán)利運行Java程序,為非法操作,退出啟動程序,結(jié)束流程;若識 別出當(dāng)前Java虛擬機含有該序列號,表明當(dāng)前Java虛擬機為用戶授權(quán)的Java虛擬機,有 權(quán)利運行Java程序,則執(zhí)行步驟S103,正常啟動所述Java虛擬機運行Java程序。具體地, 技術(shù)人員預(yù)先定制所述動態(tài)鏈接庫文件(如Agent, dll),采用C語言按JVMTI規(guī)范編寫的 dll文件,以識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識信息,下面列舉一個根據(jù)按JVMTI規(guī) 范編寫的dll文件識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識信息的例子,但不限于如下的 形式/*Agent_0nLoad :This is called immediately after the shared library is氺 loaded. This is the first code executed.*/JNIEXPORT jint JNICALL
Agent_0nLoad(JavaVM^vm, char氺options,void氺reserved) {//檢測JavaVM的序列號,如果不一致就直接返回if (strcmp((*vm)- > reservedO, “ 123456〃 ) ! = 0){return JNI_0K ;}//如果一致,則執(zhí)行步驟S103正常啟動所述Java虛擬機運行Java程序現(xiàn)有技術(shù)中,由于任何平臺上的Java虛擬機呈現(xiàn)的總是相同的指令,而Java的指
令系統(tǒng)就注定了反編譯的可行性以及容易性。當(dāng)前流行的源碼攻擊與字節(jié)碼攻擊技術(shù),這 些攻擊手段都有一個共同的前提首先能通過Java虛擬機獲取到字節(jié)碼,然后反編譯成源 碼進行攻擊或直接攻擊字節(jié)碼。采用本發(fā)明提供的技術(shù)方案,通過檢測Java虛擬機是否具 有預(yù)設(shè)的標識信息,讓攻擊者無法接觸到字節(jié)碼,從而破壞了攻擊者獲取字節(jié)碼的前提,從 根本上解決現(xiàn)有技術(shù)中通過Java虛擬機可以獲取并攻擊字節(jié)碼的安全破綻,達到保護核 心Java程序代碼的目的。進一步地,本發(fā)明實施例還包括技術(shù)人員編寫完畢Java程序后,執(zhí)行步驟SlOl 之前,將基于高級加密標準AES加密算法,對Java程序的class文件進行加密,得到class 文件的密文。下面結(jié)合圖2示出的本發(fā)明Java程序的運行方法的第二實施例流程示意圖,包 括步驟S201 啟動當(dāng)前Java虛擬機,加載基于Java虛擬機工具接口的動態(tài)鏈接庫 文件;具體地,如上述第一實施例的步驟S101,這里不再贅述。步驟S202 根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識 fn息;具體地,如上述第一實施例的步驟S202,,當(dāng)識別結(jié)果為是時,則執(zhí)行步驟S203 ; 當(dāng)識別結(jié)果為否時,則退出啟動程序,結(jié)束流程。步驟S203 所述Java虛擬機檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征 fn息;具體地,下面列舉Java虛擬機檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特 征信息的示例,但不限于如下代碼示例/**JVM would like to know if it' s created by a standard Sun launcher,or by氺user native application,the following property indicates the former.*/void SetjavaLauncherProp () {AddOption(〃 -Dsun. java. launcher = SUN_STANDARD〃,NULL);//T0D0強制開啟JVMTI代理//-agentpathE/jdbcTracker. dll = bootJar = E:/jdbcTracker. jar//AddOptionC -agentpath:E/jdbcTracker. dll = bootjar = Ε:/jdbcTracker. jar" ,NULL
8
);AddOptionC -agentlib Agent “ , NULL);}如,預(yù)設(shè)的動態(tài)鏈接庫文件為Agent, dll,那么在Java虛擬機(JVM)的啟動代碼中 已經(jīng)綁定了我們預(yù)設(shè)的Agent來伴隨啟動,通過Agent的名稱(相當(dāng)于標識特征信息)指 定了我們要在啟動過程中加載Agent, dll,若成功加載Agent, dll,即步驟S203的檢測結(jié)果 為是,若沒有成功加載Agent, dll,即步驟S203的檢測結(jié)果為否。具體地,當(dāng)檢測結(jié)果為是時,則執(zhí)行步驟S204;當(dāng)檢測結(jié)果為否時,退出運行程 序;現(xiàn)有技術(shù)中攻擊者可以運用JVMTI技術(shù),通過監(jiān)聽ClassFileLoadHook事件來截取到解 密后的Class字節(jié)碼;本發(fā)明實施例中技術(shù)人員預(yù)先設(shè)置動態(tài)鏈接庫文件含有標識特征信 息(如特征碼信息等),只有當(dāng)Java虛擬機檢測到該動態(tài)鏈接庫文件含有該標識特征信息 才進行后續(xù)的運行處理,表明Java虛擬機檢測到攻擊者使用的動態(tài)鏈接庫文件沒有含有 預(yù)設(shè)的標識特征信息時,則運行程序,從而杜絕了攻擊者注入的任何外掛代碼,能更好地保 護Java程序代碼。步驟S204 根據(jù)所述動態(tài)鏈接庫文件處理class文件。具體地,含有預(yù)設(shè)的標識特征信息的動態(tài)鏈接庫文件設(shè)有對所述class文件進行 解密的解密密鑰,所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件的解密密鑰,調(diào)用AES算法對 所述class文件進行解密,并根據(jù)解密后的class文件執(zhí)行指令。因此,攻擊者若沒有技術(shù) 人員預(yù)設(shè)的含有標識特征信息的動態(tài)鏈接庫文件,無法對所述class文件進行解密。如下 面列舉的當(dāng)根據(jù)按JVMTI規(guī)范編寫的dll文件識別當(dāng)前Java虛擬機含有預(yù)設(shè)的標識信息 后,根據(jù)所述動態(tài)鏈接庫文件的解密密鑰,調(diào)用AES算法對所述class文件進行解密例子,, 但不限于如下的形式
0118]/氺Agent_0nLoad :This is called immediately after the shared library is
0119]氺 loaded. This is the first code executed.
0120]*/
0121]JNIEXP0RT jint JNICALL
0122]Agent_0nLoad (JavaVM^vm, char*options,void^reserved) {
0123]//檢測JavaVM的序列號,如果不一致就直接返回
0124]if (strcmp ((*vm)_ > reservedO,“ 123456" ) ! = 0)
0125]{
0126]return JNI_0K ;
0127]}
0128]static GlobalAgentData data ;
0129]jvmtiEnv^jvmti ;
0130]jvmtiError error ;
0131]jint res ;
0132]TraceFlavor flavor ;
0133]jvmtiCapabilities capabilities ;
0134]jvmtiEventCal!backs callbacks ;0135]static Trace empty ;
0136]//內(nèi)存初始化
0137](void)memset ((void*) &data, 0, sizeof (data));
0138]gdata = &data ;
0139]/* 獲取 JVMTI 環(huán)境 */
0140]res = (*vm)_ > GetEnv (vm, (void**)&jvmti,JVMTI_VERSI0N_1);
0141]if (res ! = JNI_0K) {}H......調(diào)用標準AES算法解密過程省略Hreturn JNI_0K ;}需要說明的是,本發(fā)明實施例中以Agent, dll進行class文件的解密,這個解密只 影響了那些被加密保護的class文件,對于那些沒用加密的class文件也照樣能夠在Java 虛擬機環(huán)境中運行;即本發(fā)明提供的保護環(huán)境并不是私自專用的環(huán)境,對于一些在java平 臺企業(yè)版(JavaEE)服務(wù)器中運行的程序來說,往往需要一個Java虛擬機來啟動的,而本發(fā) 明實施例采用運行期面向切面編程(AOP,Aspect Oriented Programming)外掛方式裝載, 加上Agent, dll就可以處理加密的class文件,我們移除Agent, dll的話,也并沒有削弱處 理普通沒加密的class的能力,因此現(xiàn)有的Java軟件系統(tǒng)沒有任何侵入影響。通過上述實施例,電子終端識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識信息,當(dāng)識 別出當(dāng)前的Java虛擬機含有預(yù)設(shè)的標識信息時才正常啟動所述Java虛擬機運行Java程 序,且該Java虛擬機還檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征信息,當(dāng)檢測到 該動態(tài)鏈接庫文件含有預(yù)設(shè)的標識特征信息時才根據(jù)所述動態(tài)鏈接庫文件處理class文 件,否則退出運行程序,實現(xiàn)了從二進制級別上確保Java字節(jié)碼的安全,讓攻擊者無法取 得字節(jié)碼,從而從根本上保護商業(yè)軟件的源代碼不被竊取,更加安全的保護了商業(yè)軟件的 核心算法和商業(yè)機密;采用本發(fā)明的技術(shù)方案不會損失任何Java的特性,可以實現(xiàn)跨平臺 Java字節(jié)碼的保護;采用運行期面向切面編程(Α0Ρ,Aspect Oriented Programming)外掛 方式裝載,對現(xiàn)有的Java軟件系統(tǒng)沒有任何侵入影響;由于控制在Java虛擬機級別上,對 java平臺標準版(JavaSE)與java平臺企業(yè)版(JavaEE)環(huán)境都是通用的,并且部署簡單, 成本低。上面詳細說明了本發(fā)明實施例的Java程序的運行方法,下面對應(yīng)地,詳細說明本 發(fā)明實施例的電子終端。如圖3示出的本發(fā)明電子終端的第一實施例的結(jié)構(gòu)示意圖,電子終端3包括Java 虛擬機啟動模塊31、加載模塊32、標識識別模塊33以及識別處理模塊34,其中Java虛擬機啟動模塊31用于啟動當(dāng)前Java虛擬機;加載模塊32用于加載基于Java虛擬機工具接口的動態(tài)鏈接庫文件;具體地,用戶需要運行Java程序,向電子終端3發(fā)送運行Java程序的指令,電子
0142]
0143]
0144]
fatal_error(" ERROR UnabIe to access JVMTI Version 1(0χ% χ),‘‘ "is your JDK a 5. Oor newer version ?"
"JNIEnv' s GetEnv () returned% d\n〃 , JVMTI_VERSI0N_1, res);終端3接收到該指令后,Java虛擬機啟動模塊31啟動當(dāng)前Java虛擬機,加載模塊32加載 基于 Java 虛擬機工具接口 (JVMTI, Java Virtual Machine Tool Interface)的動態(tài)鏈接 庫文件;該Java虛擬機可以為用戶安裝的Java虛擬機,也可以電子終端本身自帶的Java 虛擬機;該動態(tài)鏈接庫文件可以為基于windows平臺的DLL組件(如Agent, dll),也可以 為基于Linux平臺的SO組件等等。標識識別模塊33用于根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有預(yù) 設(shè)的標識信息;識別處理模塊34用于當(dāng)標識識別模塊33的識別結(jié)果為是時,正常啟動所述Java 虛擬機運行Java程序;當(dāng)標識識別模塊33的識別結(jié)果為否時,退出啟動程序。進一步地,如圖4示出的本發(fā)明電子終端的第二實施例的結(jié)構(gòu)示意圖,電子終端3 包括Java虛擬機啟動模塊31、加載模塊32、標識識別模塊33以及識別處理模塊34外,還 包括虛擬機初始化模塊35,虛擬機初始化模塊35用于初始化Java虛擬機;具體地,技術(shù)人員編寫完畢Java程序后,首先通過虛擬機初始化模塊35初始化Java虛擬 機,預(yù)先設(shè)置Java虛擬機的標識信息,具體地技術(shù)人員定制一個Java啟動器,采用C語 言修改Java, c源文件,虛擬機初始化模塊35通過啟動該定制的Java啟動器,在首次初始 化Java虛擬機的過程中給Java虛擬機預(yù)先設(shè)置標識信息,那么后續(xù)標識識別模塊33將根 據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有虛擬機初始化模塊35預(yù)設(shè)的標識信 肩、ο現(xiàn)有技術(shù)中,由于任何平臺上的Java虛擬機呈現(xiàn)的總是相同的指令,而Java的指 令系統(tǒng)就注定了反編譯的可行性以及容易性。當(dāng)前流行的源碼攻擊與字節(jié)碼攻擊技術(shù),這 些攻擊手段都有一個共同的前提首先能通過Java虛擬機獲取到字節(jié)碼,然后反編譯成源 碼進行攻擊或直接攻擊字節(jié)碼。采用本發(fā)明提供的技術(shù)方案,通過檢測Java虛擬機是否具 有預(yù)設(shè)的標識信息,讓攻擊者無法接觸到字節(jié)碼,從而破壞了攻擊者獲取字節(jié)碼的前提,從 根本上解決現(xiàn)有技術(shù)中通過Java虛擬機可以獲取并攻擊字節(jié)碼的安全破綻,達到保護核 心Java程序代碼的目的。再進一步地,如圖5示出的本發(fā)明電子終端的第三實施例的結(jié)構(gòu)示意圖,電子終 端3包括Java虛擬機啟動模塊31、加載模塊32、標識識別模塊33、識別處理模塊34以及虛 擬機初始化模塊35外,還包括加密模塊36,用于基于AES加密算法,對Java程序的class 文件進行加密。具體地,技術(shù)人員編寫完畢Java程序后,Java虛擬機啟動模塊31啟動當(dāng) 前Java虛擬機之前,將基于高級加密標準AES加密算法,對Java程序的class文件進行加 密,得到class文件的密文。再進一步地,如圖6示出的本發(fā)明電子終端的第四實施例的結(jié)構(gòu)示意圖,電子終 端3中的識別處理模塊34還包括觸發(fā)檢測單元341,用于當(dāng)標識識別模塊33的識別結(jié)果為 是時,觸發(fā)所述Java虛擬機檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征信息,當(dāng)所 述檢測結(jié)果為是時,所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件處理class文件;當(dāng)所述檢 測結(jié)果為否時,所述Java虛擬機退出運行程序?,F(xiàn)有技術(shù)中攻擊者可以運用JVMTI技術(shù), 通過監(jiān)聽ClassFileLoadHook事件來截取到解密后的Class字節(jié)碼;本發(fā)明實施例中技術(shù) 人員預(yù)先設(shè)置動態(tài)鏈接庫文件含有標識特征信息(如特征碼信息等),只有當(dāng)Java虛擬機 檢測到該動態(tài)鏈接庫文件含有該標識特征信息才進行后續(xù)的運行處理,表明Java虛擬機檢測到攻擊者使用的動態(tài)鏈接庫文件沒有含有預(yù)設(shè)的標識特征信息時,則運行程序,從而 杜絕了攻擊者注入的任何外掛代碼,能更好地保護Java程序代碼。需要說明的是,含有預(yù)設(shè)的標識特征信息的動態(tài)鏈接庫文件設(shè)有對所述class文 件進行解密的解密密鑰;當(dāng)所述Java虛擬機的檢測結(jié)果為是時,所述Java虛擬機根據(jù)所 述動態(tài)鏈接庫文件的解密密鑰,調(diào)用AES算法對所述class文件進行解密,并根據(jù)解密后的 class文件執(zhí)行指令。因此,攻擊者若沒有技術(shù)人員預(yù)設(shè)的含有標識特征信息的動態(tài)鏈接庫 文件,無法對所述class文件進行解密。綜上所述,通過識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識信息,當(dāng)識別出當(dāng)前的 Java虛擬機含有預(yù)設(shè)的標識信息時才正常啟動所述Java虛擬機運行Java程序,且該Java 虛擬機還檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征信息,當(dāng)檢測到該動態(tài)鏈接庫 文件含有預(yù)設(shè)的標識特征信息時才根據(jù)所述動態(tài)鏈接庫文件處理class文件,否則退出運 行程序,實現(xiàn)了從二進制級別上確保Java字節(jié)碼的安全,讓攻擊者無法取得字節(jié)碼,從而 從根本上保護商業(yè)軟件的源代碼不被竊取,更加安全的保護了商業(yè)軟件的核心算法和商業(yè) 機密;采用本發(fā)明的技術(shù)方案不會損失任何Java的特性,可以實現(xiàn)跨平臺Java字節(jié)碼的保 護;采用運行期面向切面編程(AOP,Aspect Oriented Programming)外掛方式裝載,對現(xiàn)有 的Java軟件系統(tǒng)沒有任何侵入影響;由于控制在Java虛擬機級別上,對java平臺標準版 (JavaSE)與java平臺企業(yè)版(JavaEE)環(huán)境都是通用的,并且部署簡單,成本低。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以 通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì) 中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁 碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機存儲記憶體(Random Access Memory, RAM)等。以上所揭露的僅為本發(fā)明一種較佳實施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán) 利范圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
權(quán)利要求
一種Java程序的運行方法,其特征在于,包括啟動當(dāng)前Java虛擬機,加載基于Java虛擬機工具接口的動態(tài)鏈接庫文件;根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識信息;當(dāng)識別結(jié)果為是時,正常啟動所述Java虛擬機運行Java程序;當(dāng)識別結(jié)果為否時,退出啟動程序。
2.如權(quán)利要求1所述的方法,其特征在于,所述啟動當(dāng)前Java虛擬機的步驟之前還包 括初始化Java虛擬機;所述初始化Java虛擬機的步驟包括啟動預(yù)設(shè)的Java啟動器,設(shè)置Java虛擬機的標識 fn息ο
3.如權(quán)利要求1所述的方法,其特征在于,所述啟動當(dāng)前Java虛擬機的步驟之前還包括基于高級加密標準AES加密算法,對Java程序的class文件進行加密。
4.如權(quán)利要求1、2或3所述的方法,其特征在于,所述正常啟動所述Java虛擬機運行 Java程序的步驟包括所述Java虛擬機檢測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征信息; 當(dāng)檢測結(jié)果為是時,根據(jù)所述動態(tài)鏈接庫文件處理class文件;當(dāng)檢測結(jié)果為否時,退 出運行程序。
5.如權(quán)利要求4所述的方法,其特征在于,含有預(yù)設(shè)的標識特征信息的動態(tài)鏈接庫文 件設(shè)有對所述class文件進行解密的解密密鑰;所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件處理class文件的步驟包括 所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件的解密密鑰,調(diào)用AES算法對所述class文 件進行解密,并根據(jù)解密后的class文件執(zhí)行指令。
6.一種電子終端,其特征在于,包括Java虛擬機啟動模塊,用于啟動當(dāng)前Java虛擬機; 加載模塊,用于加載基于Java虛擬機工具接口的動態(tài)鏈接庫文件; 標識識別模塊,用于根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的 標識信息;識別處理模塊,用于當(dāng)所述標識識別模塊的識別結(jié)果為是時,正常啟動所述Java虛擬 機運行Java程序;當(dāng)所述標識識別模塊的識別結(jié)果為否時,退出啟動程序。
7.如權(quán)利要求6所述的電子終端,其特征在于,還包括 虛擬機初始化模塊,用于初始化Java虛擬機;所述虛擬機初始化模塊啟動電子終端預(yù)設(shè)的Java啟動器,設(shè)置Java虛擬機的標識信肩、ο
8.如權(quán)利要求6所述的電子終端,其特征在于,還包括加密模塊,用于基于AES加密算法,對Java程序的class文件進行加密。
9.如權(quán)利要求6、7或8所述的電子終端,其特征在于,所述識別處理模塊包括觸發(fā)檢測單元,用于當(dāng)所述標識識別模塊的識別結(jié)果為是時,觸發(fā)所述Java虛擬機檢 測所述動態(tài)鏈接庫文件是否含有預(yù)設(shè)的標識特征信息;當(dāng)所述檢測結(jié)果為是時,所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件處理class文件;當(dāng)所述檢測結(jié)果為否時,所述Java虛擬機退出運行程序。
10.如權(quán)利要求9所述的電子終端,其特征在于,含有預(yù)設(shè)的標識特征信息的動態(tài)鏈接 庫文件設(shè)有對所述class文件進行解密的解密密鑰;當(dāng)所述檢測結(jié)果為是時,所述Java虛擬機根據(jù)所述動態(tài)鏈接庫文件的解密密鑰,調(diào)用 AES算法對所述class文件進行解密,并根據(jù)解密后的class文件執(zhí)行指令。
全文摘要
本發(fā)明實施例公開了一種Java程序的運行方法,包括啟動當(dāng)前Java虛擬機,加載基于Java虛擬機工具接口的動態(tài)鏈接庫文件;根據(jù)所述動態(tài)鏈接庫文件識別當(dāng)前Java虛擬機是否含有預(yù)設(shè)的標識信息;當(dāng)識別結(jié)果為是時,正常啟動所述Java虛擬機運行Java程序;當(dāng)識別結(jié)果為否時,退出啟動程序。相應(yīng)地,本發(fā)明還公開了一種電子終端,采用本發(fā)明,實現(xiàn)了從二進制級別上確保Java字節(jié)碼的安全,讓攻擊者無法取得字節(jié)碼,從而從根本上保護商業(yè)軟件的源代碼不被竊取,更加安全的保護了商業(yè)軟件的核心算法和商業(yè)機密;采用本發(fā)明的技術(shù)方案不會損失任何Java的特性,可以實現(xiàn)跨平臺Java字節(jié)碼的保護,并且部署簡單,成本低。
文檔編號G06F21/00GK101944042SQ201010270548
公開日2011年1月12日 申請日期2010年9月1日 優(yōu)先權(quán)日2010年9月1日
發(fā)明者桂艷軍, 王遠 申請人:深圳市拜特科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
陵川县| 额尔古纳市| 玉林市| 襄垣县| 和平县| 青阳县| 海淀区| 舞钢市| 平罗县| 佳木斯市| 林芝县| 四子王旗| 阳西县| 高邮市| 牡丹江市| 陵川县| 大名县| 化州市| 宽甸| 桃江县| 晴隆县| 鄯善县| 怀仁县| 平南县| 泰宁县| 梅河口市| 北碚区| 信阳市| 新昌县| 安国市| 泌阳县| 布拖县| 二手房| 娄底市| 安宁市| 丽江市| 三穗县| 东阿县| 岐山县| 沽源县| 永安市|