一種保護(hù)Java軟件的方法及裝置制造方法
【專利摘要】本發(fā)明提供一種保護(hù)Java軟件的方法及裝置,涉及軟件保護(hù)【技術(shù)領(lǐng)域】,其中方法包括如下步驟:調(diào)用第一外部程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密,將License文件解密后的數(shù)據(jù)寫入到緩存中,所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序或者為第一非Java程序。通過第一外部程序?qū)icense文件解密,而不使用Java軟件直接解密,避免了Java軟件直接解密而造成解密過程的泄露。從而避免了非法用戶知道如何對License文件進(jìn)行篡改,最終避免了對Java軟件的非法使用,達(dá)到保護(hù)Java軟件的目的。
【專利說明】—種保護(hù)Java軟件的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件保護(hù)【技術(shù)領(lǐng)域】,尤其涉及一種保護(hù)Java軟件的方法及裝置。
【背景技術(shù)】
[0002]Java是一種跨平臺的、解釋型語言。Java編譯工具將Java源代碼被編譯成為Java字節(jié)碼文件,由Java虛擬機(jī)負(fù)責(zé)對Java字節(jié)碼文件進(jìn)行解釋執(zhí)行。對于傳統(tǒng)的C或C++之類的語言來說,要在Web上保護(hù)源代碼是很容易的,只要不發(fā)布源代碼就可以。遺憾的是,Java程序的源代碼很容易被人破解。只要有一個(gè)反編譯器,任何人都可以分析別人的代碼,Java的靈活性使得源代碼很容易被竊取。現(xiàn)有的商用軟件在出售或試用時(shí)都會帶有授權(quán)的License (許可)文件,License文件中包含了對軟件使用范圍的限制,如試用版的軟件無法使用某些功能,完整版的軟件的使用期限等。而由于Java源代碼很容易被竊取,而后根據(jù)Java源代碼即可修改License文件,并最終導(dǎo)致商用軟件的開發(fā)者的勞動成果被剽竊或者商用軟件被篡改,而隨著Java語言的流行,Java的應(yīng)用領(lǐng)域越來越廣泛,對于Java軟件的保護(hù)的需求也越來越迫切。
【發(fā)明內(nèi)容】
[0003]本發(fā)明要解決的技術(shù)問題,在于提供一種保護(hù)Java軟件的方法及裝置,解決Java源代碼容易被反編譯而導(dǎo)致License文件可被非法篡改的問題。
[0004]本發(fā)明是這樣實(shí)現(xiàn)的:
[0005]一種保護(hù)Java軟件的方法,包括如下步驟:
[0006]調(diào)用第一外部程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密,將License文件解密后的數(shù)據(jù)寫入到緩存中,所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序或者為第一非Java程序。
[0007]進(jìn)一步地,當(dāng)所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序時(shí),則License文件解密的具體步驟為:調(diào)用自定義類加載器解密并加載已加密的第一 class類,而后使用解密后的第一 class類對已加密的License文件進(jìn)行License文件解密。
[0008]進(jìn)一步地,當(dāng)所述的第一外部程序?yàn)榈谝环荍ava程序時(shí),則License文件解密的具體步驟為:使用JNI接口調(diào)用第一非Java程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密。
[0009]進(jìn)一步地,在License文件解密步驟之前還包括License文件合法性驗(yàn)證步驟:對License文件進(jìn)行合法性驗(yàn)證,如果驗(yàn)證結(jié)果為合法,則繼續(xù)進(jìn)行License文件解密步驟,否則不進(jìn)行License文件解密步驟。
[0010]進(jìn)一步地,所述對License文件進(jìn)行合法性驗(yàn)證具體為:調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證,所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序或者為第二非Java程序。
[0011]進(jìn)一步地,當(dāng)所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序時(shí),則調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證的具體步驟為:調(diào)用自定義類加載器解密并加載已加密的第二 class類,而后使用解密后的第二 class類對License文件進(jìn)行合法性驗(yàn)證。
[0012]進(jìn)一步地,當(dāng)所述的第二外部程序?yàn)榈诙荍ava程序時(shí),則調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證的具體步驟為:使用JNI接口調(diào)用第二非Java程序?qū)icense文件進(jìn)行合法性驗(yàn)證。
[0013]進(jìn)一步地,所述的第二非Java程序?yàn)镃或C++程序。
[0014]進(jìn)一步地,所述合法性驗(yàn)證的具體步驟為:使用公鑰和數(shù)字簽名進(jìn)行合法性驗(yàn)證。
[0015]進(jìn)一步地,所述的第一非Java程序?yàn)镃或C++程序。
[0016]進(jìn)一步地,讀取緩存中的License文件解密后的數(shù)據(jù),判斷License文件解密后的數(shù)據(jù)是否合法,如果License文件解密后的數(shù)據(jù)是合法,則繼續(xù)執(zhí)行Java軟件,否則停止執(zhí)行Java軟件。
[0017]以及本發(fā)明為了保護(hù)Java軟件不被非法使用,還提供一種保護(hù)Java軟件的裝置,包括如下模塊:
[0018]第一解密模塊:用于調(diào)用第一外部程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密,得到License文件解密后數(shù)據(jù);
[0019]緩存寫入模塊:用于將License文件解密后的數(shù)據(jù)寫入到緩存中;
[0020]其中,所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序或者為第一非Java程序。
[0021]進(jìn)一步地,當(dāng)所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序時(shí),則第一解密模塊包括如下單元:
[0022]類加載單元:用于調(diào)用自定義類加載器解密并加載已加密的第一 class類;
[0023]類解密單元:用于使用解密后的第一 class類對已加密的License文件進(jìn)行License文件解密。
[0024]進(jìn)一步地,當(dāng)所述的第一外部程序?yàn)榈谝环荍ava程序時(shí),則第一解密模塊包括如下單元:
[0025]JNI接口調(diào)用單元:用于使用JNI接口調(diào)用第一非Java程序;
[0026]非Java程序解密單元:用于對已加密的License文件進(jìn)行License文件解密。
[0027]進(jìn)一步地,還包括合法性驗(yàn)證模塊:用于對License文件進(jìn)行合法性驗(yàn)證,如果驗(yàn)證結(jié)果為合法,則使能第一解密模塊,否則不使能第一解密模塊。
[0028]進(jìn)一步地,所述合法性驗(yàn)證模塊具體包括如下單元:
[0029]外部程序調(diào)用單元:用于調(diào)用第二外部程序;
[0030]合法性驗(yàn)證單元:用于對License文件進(jìn)行合法性驗(yàn)證
[0031]其中:所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序或者為第二非Java程序。
[0032]進(jìn)一步地,當(dāng)所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序時(shí),則外部程序調(diào)用單元包括如下子單元:
[0033]類加載子單元:用于調(diào)用自定義類加載器解密并加載已加密的第二 class類。
[0034]進(jìn)一步地,當(dāng)所述的第二外部程序?yàn)榈诙荍ava程序時(shí),則外部程序調(diào)用單元包括如下子單元:
[0035]JNI接口調(diào)用子單元:用于使用JNI接口調(diào)用第二非Java程序。
[0036]進(jìn)一步地,所述的第二非Java程序?yàn)镃或C++程序。[0037]進(jìn)一步地,所述合法性驗(yàn)證單元具體為公鑰合法性驗(yàn)證單元:用于使用公鑰和數(shù)字簽名進(jìn)行合法性驗(yàn)證。
[0038]進(jìn)一步地,所述的第一非Java程序?yàn)镃或C++程序。
[0039]進(jìn)一步地,還包括數(shù)據(jù)讀取模塊和判斷模塊,其中:
[0040]讀取模塊用于讀取緩存中的License文件解密后的數(shù)據(jù);
[0041]判斷模塊用于判斷License文件解密后的數(shù)據(jù)是否合法,如果License文件解密后的數(shù)據(jù)是合法,則繼續(xù)執(zhí)行Java軟件,否則停止執(zhí)行Java軟件。
[0042]本發(fā)明具有如下優(yōu)點(diǎn):通過第一外部程序?qū)icense文件解密,而不使用Java軟件直接解密,避免了 Java軟件直接解密而造成解密過程的泄露。從而避免了非法用戶知道如何對License文件進(jìn)行篡改,最終避免了對Java軟件的非法使用,達(dá)到保護(hù)Java軟件的目的。
【專利附圖】
【附圖說明】
[0043]圖1為本發(fā)明的方法流程圖;
[0044]圖2為本發(fā)明的生成License文件以及生成公鑰和私鑰的方法流程圖;
[0045]圖3為本發(fā)明的優(yōu)選實(shí)施例的系統(tǒng)結(jié)構(gòu)示意圖;
[0046]圖4為本發(fā)明的另一優(yōu)選實(shí)施例的系統(tǒng)結(jié)構(gòu)示意圖;
[0047]標(biāo)號說明:
[0048]1、第一解密模塊,
[0049]10、類加載單元,
[0050]11、類解密單元,
[0051]12、JNI接口調(diào)用單元,
[0052]13、非Java程序解密單元,
[0053]2、緩存寫入模塊,
[0054]3、數(shù)據(jù)讀取模塊,
[0055]4、判斷模塊,
[0056]5、合法性驗(yàn)證模塊,
[0057]50、外部程序調(diào)用單元,
[0058]500、類加載子單元,
[0059]501、JNI接口調(diào)用子單元,
[0060]51、合法性驗(yàn)證單元。
【具體實(shí)施方式】
[0061]為詳細(xì)說明本發(fā)明的技術(shù)內(nèi)容、構(gòu)造特征、所實(shí)現(xiàn)目的及效果,以下結(jié)合實(shí)施方式并配合附圖詳予說明。
[0062]首先對實(shí)施例中涉及到的若干術(shù)語進(jìn)行說明:
[0063]JNI是Java Native Interface的簡稱,也就是Java本地接口。它提供了若干的API實(shí)現(xiàn)了和Java和其他語目的通/[目。
[0064]公鑰和私鑰是通過一種算法得到的一個(gè)密鑰對(即一個(gè)公鑰和一個(gè)私鑰)其中的一個(gè)向外界公開,稱為公鑰;另一個(gè)自己保留,稱為私鑰。通過這種算法得到的密鑰對能保證在世界范圍內(nèi)是唯一的。使用這個(gè)密鑰對的時(shí)候,如果用其中一個(gè)密鑰加密一段數(shù)據(jù),必須用另一個(gè)密鑰解密。
[0065]數(shù)字簽名(又稱公鑰數(shù)字簽名、電子簽章)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領(lǐng)域的技術(shù)實(shí)現(xiàn),用于鑒別數(shù)字信息的方法。
[0066]請參閱圖1,本發(fā)明提供一種保護(hù)Java軟件的方法,用于保護(hù)Java軟件不被非法使用,本方法可以在計(jì)算機(jī)系統(tǒng)中執(zhí)行。Java軟件運(yùn)行后首先進(jìn)行步驟SlOl:調(diào)用第一外部程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密,而后步驟S102將License文件解密后的數(shù)據(jù)寫入到緩存中,將解密后的數(shù)據(jù)寫入緩存后Java軟件或者其他子程序可以共享License文件解密后的數(shù)據(jù),從而無需每次想獲取到License文件中的數(shù)據(jù),每次都得解密License文件這個(gè)重復(fù)的過程,緩存可以是某一塊內(nèi)存地址或硬盤地址,緩存信息可以由Java軟件進(jìn)行傳遞。為了保證License文件的解密算法不被獲取,第一外部程序?yàn)榈谝灰鸭用艿腏ava程序或者為第一非Java程序。具體地,第一非Java程序可以選擇反編譯難度比Java高的程序,如優(yōu)選為C或C++程序。License文件的解密算法如果沒有被他人獲取到,則他人無法通過篡改License文件達(dá)到非法使用Java軟件的目的。
[0067]具體在應(yīng)用時(shí),License文件中可存放有加密后的Java軟件的許可信息,許可信息可以包含使用功能、時(shí)間的許可信息。常見的許可信息如Mac地址、License的有效期。Mac地址在系統(tǒng)中可以被用來驗(yàn)證Java是否被移動到其他機(jī)器上,License的有效期用來控制Java軟件的使用周期。由于Mac地址是可以修改的,License的有效期在修改了服務(wù)器的時(shí)間之后,這些驗(yàn)證就失效了,所以在這些常用的許可信息上面加上了一些Java軟件業(yè)務(wù)功能的控制,比如型號、廠家的控制,可以進(jìn)行業(yè)務(wù)功能的控制驗(yàn)證。
[0068]在某些實(shí)施例中,Java軟件用于終端管理(如管理終端的數(shù)量、管理終端的接入)業(yè)務(wù),則License文件包括控制終端型號、控制終端廠家、控制終端生成的條數(shù)等許可信息。Java軟件通過第一外部程序解密License文件取得許可信息并放到緩存中,而后Java軟件可以通過從緩存讀取上述解密后的許可信息,經(jīng)過判斷即可實(shí)現(xiàn)對Java軟件的授權(quán)控制。如上述Java軟件用于終端管理的實(shí)施例中,Java軟件解密得到控制終端型號和控制終端廠家,然后與預(yù)添加的控制終端的型號和廠家進(jìn)行比較,如果是一致的可以添加,不一致就拒絕添加,即實(shí)現(xiàn)了對Java軟件的終端數(shù)量的授權(quán)控制。同樣在上述Java軟件用于終端管理的實(shí)施例中,Java軟件解密也會得到控制終端生成的條數(shù),而后Java軟件當(dāng)新增的控制終端數(shù)量大于控制終端生成的條數(shù)時(shí),則拒絕新增控制終端,否則允許添加。而在另一些實(shí)施例中,License文件包含了加密后的軟件使用是否合法的數(shù)據(jù),Java軟件在License文件解密后可進(jìn)入步驟S103:判斷License文件解密后的數(shù)據(jù)是否合法,如果License文件解密后的數(shù)據(jù)是合法,則進(jìn)入步驟S104繼續(xù)執(zhí)行Java軟件,否則停止執(zhí)行Java軟件,避免了非授權(quán)用戶對Java軟件的使用。
[0069]當(dāng)?shù)谝煌獠砍绦驗(yàn)榈谝灰鸭用艿腏ava程序時(shí),其中,對Java軟件的加密具有多種實(shí)施方式,優(yōu)選地,可以采用加密的class類。由于Java虛擬機(jī)自帶的類加載器并沒辦法對加密的class類進(jìn)行加載,則需要使用自定義的類加載器進(jìn)行解密并加載。則License文件解密的具體步驟為:調(diào)用自定義類加載器解密并加載已加密的第一 class類,而后使用解密后的第一 class類對已加密的License文件進(jìn)行License文件解密。在某些實(shí)施例中,自定義的類加載器可以通過如下步驟實(shí)現(xiàn):首先自定義一個(gè)類加載器繼承自ClassLoader (類加載器),重寫1adClass (加載類)方法如下:先從系統(tǒng)緩沖區(qū)中判斷是否有class類,如果class類在系統(tǒng)緩沖區(qū)中,就不必再次裝載,直接返回class類;如果第一 class類不在系統(tǒng)緩沖區(qū)中,則讀取并判斷第一 class類是否需要解密,如果需要解密則進(jìn)行解密并將放置到系統(tǒng)緩沖區(qū)后返回class對象,如果不需要解密則調(diào)用默認(rèn)的類裝載器裝載class類并返回class對象。進(jìn)一步地,如果以上操作都不成功,嘗試用默認(rèn)的ClassLoader 裝入它。
[0070]當(dāng)?shù)谝煌獠砍绦驗(yàn)榈谝环荍ava程序時(shí),可以使用JNI接口調(diào)用第一非Java程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密。JNI接口可以使得Java軟件方便地與其他語言程序進(jìn)行通信。
[0071]為了避免解密非法的License文件(如License文件已損壞或者被篡改),進(jìn)一步地,如圖1所示,本發(fā)明在License文件解密步驟之前還包括License文件合法性驗(yàn)證步驟SOOl:對License文件進(jìn)行合法性驗(yàn)證,在步驟S002判斷驗(yàn)證結(jié)果是否合法,如果驗(yàn)證結(jié)果為合法,則繼續(xù)進(jìn)行License文件解密步驟SlOl ;否則不進(jìn)行License文件解密步驟SlOl,同時(shí)可以彈出非法提示或結(jié)束Java軟件的運(yùn)行。
[0072]對License文件的合法性驗(yàn)證可以使用Java軟件本身進(jìn)行驗(yàn)證也可以使用第二外部程序進(jìn)行合法性驗(yàn)證。優(yōu)選為調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證,第二外部程序?yàn)榈诙鸭用艿腏ava程序或者為第二非Java程序,可以保證合法性驗(yàn)證的安全。
[0073]第二外部程序的實(shí)現(xiàn)過程可以參照上述對第一外部程序的說明,如第二非Java程序同樣優(yōu)選為C或C++程序。第二外部程序可以與第一外部程序同為已加密的Java程序或者同為非Java程序,此時(shí)第二外部程序可以與第一外部程序可以為同一個(gè)外部程序,在一個(gè)程序上實(shí)現(xiàn)多種功能是本領(lǐng)域技術(shù)人員常用的技術(shù)手段;第二外部程序與第一外部程序也可以其中一個(gè)外部程序?yàn)橐鸭用艿腏ava程序而另一個(gè)為非Java程序。
[0074]當(dāng)所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序時(shí),則調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證的具體步驟為:調(diào)用自定義類加載器解密并加載已加密的第二 class類,而后使用解密后的第二 class類對License文件進(jìn)行合法性驗(yàn)證。
[0075]當(dāng)所述的第二外部程序?yàn)榈诙荍ava程序時(shí),則調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證的具體步驟為:使用JNI接口調(diào)用第二非Java程序?qū)icense文件進(jìn)行合法性驗(yàn)證。
[0076]對License文件的合法性驗(yàn)證的具體實(shí)現(xiàn)方式可以采用常見的特征碼驗(yàn)證方式,即在License文件中的某一段特征碼數(shù)據(jù)進(jìn)行合法性驗(yàn)證,如果這一段特征碼符合某種預(yù)設(shè)的規(guī)律則認(rèn)為License文件是合法的,否則認(rèn)為License文件是非法的。優(yōu)選地可以采用公鑰和數(shù)字簽名進(jìn)行合法性驗(yàn)證。具體驗(yàn)證時(shí),可直接調(diào)用C或C++程序的api進(jìn)行合法性驗(yàn)證。由于采用公鑰和數(shù)字簽名這步驟是在調(diào)用第二外部程序或Java軟件之后進(jìn)行的,即發(fā)生在不同時(shí)刻,則采用公鑰和數(shù)字簽名的驗(yàn)證方式和使用第二外部程序進(jìn)行驗(yàn)證可以組合使用。
[0077]License文件、公鑰和數(shù)字簽名的生成過程可以采用如下步驟:首先步驟S201:定義License文件。License文件包含有Java軟件的許可信息(如設(shè)定與Java軟件業(yè)務(wù)關(guān)聯(lián)的屬性信息,為后續(xù)驗(yàn)證比較做準(zhǔn)備)。License文件可以采用普通的java properties文件的定義格式(如:license.properties)。而后步驟S202使用加密算法將License文件進(jìn)行加密,生成一個(gè)加密過的License文件,這個(gè)時(shí)候打開里面是亂碼的,無法直接得到License文件的許可信息。加密后進(jìn)入步驟S203:生成公鑰(public, key)和私鑰(private, key)對,這一步可以通過Java程序進(jìn)行生成,生成公私鑰對的種子可以自定義,注意要保護(hù)好私鑰,不能泄露。最后進(jìn)行步驟S204使用私鑰對加密過的License文件進(jìn)行數(shù)據(jù)簽名,生成數(shù)據(jù)簽名文件(如:名為signature, sgn)。在將Java軟件發(fā)給用戶使用時(shí),只需要將加密過的license文件和數(shù)據(jù)簽名文件signature, sgn,公鑰一起發(fā)送給用戶即可。以上的生成步驟都可以通過本地程序完成,無需發(fā)布給對方。
[0078]以及本發(fā)明為了保護(hù)Java軟件,還提供一種保護(hù)Java軟件的裝置,本裝置常見的形式可以為計(jì)算機(jī)或者嵌入式智能設(shè)備。具體地,如圖3和圖4所示,包括如下模塊:第一解密模塊1:用于調(diào)用第一外部程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密得到License文件解密后數(shù)據(jù),以及緩存寫入模塊2:用于將License文件解密后的數(shù)據(jù)寫入到緩存中。其中,第一外部程序?yàn)榈谝灰鸭用艿腏ava程序或者為第一非Java程序,第一非Java程序優(yōu)選為C或C++程序。利用外部程序增加了反編譯和破解的難度,從而使得破解者無法得知License文件的解密算法,而無法對License文件進(jìn)行篡改,達(dá)到了保護(hù)Java軟件的目的。
[0079]具體地應(yīng)用中,本裝置可包括數(shù)據(jù)讀取模塊3和判斷模塊4,其中:讀取模塊3用于讀取緩存中的License文件解密后的數(shù)據(jù)。判斷模塊4用于判斷License文件解密后的數(shù)據(jù)是否合法,如果License文件解密后的數(shù)據(jù)是合法,則繼續(xù)執(zhí)行Java軟件,否則停止執(zhí)行Java軟件。通過判斷模塊4的判讀與決定是否執(zhí)行Java軟件達(dá)到了對Java軟件使用的限制,使得Java軟件可以被按照License文件的授權(quán)信息被規(guī)范地使用。
[0080]在優(yōu)選實(shí)施例中,當(dāng)所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序時(shí),如圖3所示,則第一解密模塊I包括如下單元:類加載單元10:用于調(diào)用自定義類加載器解密并加載已加密的第一 class類;類解密單元11:用于使用解密后的第一 class類對已加密的License文件進(jìn)行License文件解密。使用加密的第一 class類可實(shí)現(xiàn)對License文件解密過程的隱藏,避免License文件解密算法的泄露。
[0081]在另一優(yōu)選實(shí)施例中,當(dāng)所述的第一外部程序?yàn)榈谝环荍ava程序時(shí),如圖4所示,則第一解密模塊包括如下單元JNI接口調(diào)用單元12:用于使用JNI接口調(diào)用第一非Java程序;非Java程序解密單元13:用于對已加密的License文件進(jìn)行License文件解密。通過JNI接口方便了第一解密模塊I對第一外部程序的調(diào)用。
[0082]為了驗(yàn)證License文件為正常的,未被篡改或破壞的文件,本裝置還包括合法性驗(yàn)證模塊5:用于對License文件進(jìn)行合法性驗(yàn)證,如果驗(yàn)證結(jié)果為合法,則使能第一解密模塊I,否則不使能第一解密模塊I。
[0083]合法性驗(yàn)證模塊5可以調(diào)用Java軟件進(jìn)行合法性驗(yàn)證,優(yōu)選的合法性驗(yàn)證模塊5調(diào)用第二外部程序進(jìn)行合法性驗(yàn)證。則如圖3所示,合法性驗(yàn)證模塊具體包括如下單元:夕卜部程序調(diào)用單元50:用于調(diào)用第二外部程序;合法性驗(yàn)證單元51:用于對License文件進(jìn)行合法性驗(yàn)證,其中:第二外部程序?yàn)榈诙鸭用艿腏ava程序或者為第二非Java程序,第二非Java程序優(yōu)選為C或C++程序。[0084]如圖3所示,在優(yōu)選實(shí)施例中,當(dāng)所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序時(shí),則外部程序調(diào)用單元包括如下子單元:類加載子單元500:用于調(diào)用自定義類加載器解密并加載已加密的第二 class類。而后外部程序調(diào)用單元50對第二 class類進(jìn)行調(diào)用,合法性驗(yàn)證單元51即可進(jìn)行合法性驗(yàn)證。
[0085]如圖4所示,在另一優(yōu)選實(shí)施例中,當(dāng)所述的第二外部程序?yàn)榈诙荍ava程序時(shí),則外部程序調(diào)用單元包括如下子單元JNI接口調(diào)用子單元501:用于使用JNI接口調(diào)用第二非Java程序。而后外部程序調(diào)用單元50對第二非Java程序進(jìn)行調(diào)用,合法性驗(yàn)證單元51即可進(jìn)行合法性驗(yàn)證。
[0086]合法性驗(yàn)證單元51可以是特征碼合法性驗(yàn)證單元,即用于對License文件中的某一段特征碼進(jìn)行規(guī)律性驗(yàn)證。優(yōu)選地,合法性驗(yàn)證單元51具體為公鑰合法性驗(yàn)證單元51:用于使用公鑰和數(shù)字簽名進(jìn)行合法性驗(yàn)證。
[0087]特別地,本裝置的各個(gè)模塊和單元可以集成在單個(gè)運(yùn)算模塊中,也可以分步在多個(gè)運(yùn)算模塊上,具體地,單個(gè)運(yùn)算模塊或各個(gè)運(yùn)算模塊可以由通用的運(yùn)算模塊執(zhí)行存儲在存儲模塊的程序代碼來實(shí)現(xiàn),本發(fā)明并限定任何特定的模塊。
[0088]以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的【技術(shù)領(lǐng)域】,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種保護(hù)Java軟件的方法,其特征在于:包括如下步驟: 調(diào)用第一外部程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密,將License文件解密后的數(shù)據(jù)寫入到緩存中,所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序或者為第一非Java程序。
2.根據(jù)權(quán)利要求1所述的保護(hù)Java軟件的方法,其特征在于:當(dāng)所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序時(shí),則License文件解密的具體步驟為:調(diào)用自定義類加載器解密并加載已加密的第一 class類,而后使用解密后的第一 class類對已加密的License文件進(jìn)行License文件解密。
3.根據(jù)權(quán)利要求1所述的保護(hù)Java軟件的方法,其特征在于:當(dāng)所述的第一外部程序?yàn)榈谝环荍ava程序時(shí),則License文件解密的具體步驟為:使用JNI接口調(diào)用第一非Java程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密。
4.根據(jù)權(quán)利要求1所述的保護(hù)Java軟件的方法,其特征在于:在License文件解密步驟之前還包括License文件合法性驗(yàn)證步驟:對License文件進(jìn)行合法性驗(yàn)證,如果驗(yàn)證結(jié)果為合法,則繼續(xù)進(jìn)行License文件解密步驟,否則不進(jìn)行License文件解密步驟。
5.根據(jù)權(quán)利要求4所述的保護(hù)Java軟件的方法,其特征在于:所述對License文件進(jìn)行合法性驗(yàn)證具體為:調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證,所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序或者為第二非Java程序。
6.根據(jù)權(quán)利要求5所述的保護(hù)Java軟件的方法,其特征在于:當(dāng)所述的第二外部程序?yàn)榈诙鸭用艿腏av a程序時(shí),則調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證的具體步驟為:調(diào)用自定義類加載器解密并加載已加密的第二 class類,而后使用解密后的第二class類對License文件進(jìn)行合法性驗(yàn)證。
7.根據(jù)權(quán)利要求5所述的保護(hù)Java軟件的方法,其特征在于:當(dāng)所述的第二外部程序?yàn)榈诙荍ava程序時(shí),則調(diào)用第二外部程序?qū)icense文件進(jìn)行合法性驗(yàn)證的具體步驟為:使用JNI接口調(diào)用第二非Java程序?qū)icense文件進(jìn)行合法性驗(yàn)證。
8.根據(jù)權(quán)利要求5到7任一項(xiàng)所述的保護(hù)Java軟件的方法,其特征在于:所述的第二非Java程序?yàn)镃或C++程序。
9.根據(jù)權(quán)利要求4到7任一項(xiàng)所述的保護(hù)Java軟件的方法,其特征在于:所述合法性驗(yàn)證的具體步驟為:使用公鑰和數(shù)字簽名進(jìn)行合法性驗(yàn)證。
10.根據(jù)權(quán)利要求1到7任一項(xiàng)所述的保護(hù)Java軟件的方法,其特征在于:所述的第一非Java程序?yàn)镃或C++程序。
11.根據(jù)權(quán)利要求1到7任一項(xiàng)所述的保護(hù)Java軟件的方法,其特征在于:讀取緩存中的License文件解密后的數(shù)據(jù),判斷License文件解密后的數(shù)據(jù)是否合法,如果License文件解密后的數(shù)據(jù)是合法,則繼續(xù)執(zhí)行Java軟件,否則停止執(zhí)行Java軟件。
12.—種保護(hù)Java軟件的裝置,其特征在于:包括如下模塊: 第一解密模塊:用于調(diào)用第一外部程序?qū)σ鸭用艿腖icense文件進(jìn)行License文件解密,得到License文件解密后數(shù)據(jù); 緩存寫入模塊:用于將License文件解密后的數(shù)據(jù)寫入到緩存中; 其中,所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序或者為第一非Java程序。
13.根據(jù)權(quán)利要求12所述的保護(hù)Java軟件的裝置,其特征在于:當(dāng)所述的第一外部程序?yàn)榈谝灰鸭用艿腏ava程序時(shí),則第一解密模塊包括如下單元: 類加載單元:用于調(diào)用自定義類加載器解密并加載已加密的第一 class類; 類解密單元:用于使用解密后的第一 class類對已加密的License文件進(jìn)行License文件解密。
14.根據(jù)權(quán)利要求12所述的保護(hù)Java軟件的裝置,其特征在于:當(dāng)所述的第一外部程序?yàn)榈谝环荍ava程序時(shí),則第一解密模塊包括如下單元: JNI接口調(diào)用單元:用于使用JNI接口調(diào)用第一非Java程序; 非Java程序解密單元:用于對已加密的License文件進(jìn)行License文件解密。
15.根據(jù)權(quán)利要求12所述的保護(hù)Java軟件的裝置,其特征在于:還包括合法性驗(yàn)證模塊:用于對License文件進(jìn)行合法性驗(yàn)證,如果驗(yàn)證結(jié)果為合法,則使能第一解密模塊,否則不使能第一解密模塊。
16.根據(jù)權(quán)利要求15所述的保護(hù)Java軟件的裝置,其特征在于:所述合法性驗(yàn)證模塊具體包括如下單元: 外部程序調(diào)用單元:用于調(diào)用第二外部程序; 合法性驗(yàn)證單元:用于對License文件進(jìn)行合法性驗(yàn)證 其中:所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序或者為第二非Java程序。
17.根據(jù)權(quán)利要求16所述的保護(hù)Java軟件的裝置,其特征在于:當(dāng)所述的第二外部程序?yàn)榈诙鸭用艿腏ava程序時(shí),則外部程序調(diào)用單元包括如下子單元: 類加載子單元:用于調(diào)用自定義類加載器解密并加載已加密的第二 class類。
18.根據(jù)權(quán)利要求16所述的保護(hù)Java軟件的裝置,其特征在于:當(dāng)所述的第二外部程序?yàn)榈诙荍ava程序時(shí),則外部程序調(diào)用單元包括如下子單元: JNI接口調(diào)用子單元:用于使用JNI接口調(diào)用第二非Java程序。
19.根據(jù)權(quán)利要求16到18任一項(xiàng)所述的保護(hù)Java軟件的裝置,其特征在于:所述的第二非Java程序?yàn)镃或C++程序。
20.根據(jù)權(quán)利要求15到18任一項(xiàng)所述的保護(hù)Java軟件的裝置,其特征在于:所述合法性驗(yàn)證單元具體為公鑰合法性驗(yàn)證單元:用于使用公鑰和數(shù)字簽名進(jìn)行合法性驗(yàn)證。
21.根據(jù)權(quán)利要求12到18任一項(xiàng)所述的保護(hù)Java軟件的裝置,其特征在于:所述的第一非Java程序?yàn)镃或C++程序。
22.根據(jù)權(quán)利要求12到18任一項(xiàng)所述的保護(hù)Java軟件的裝置,其特征在于:還包括數(shù)據(jù)讀取模塊和判斷模塊,其中: 讀取模塊用于讀取緩存中的License文件解密后的數(shù)據(jù); 判斷模塊用于判斷License文件解密后的數(shù)據(jù)是否合法,如果License文件解密后的數(shù)據(jù)是合法,則繼續(xù)執(zhí)行Java軟件,否則停止執(zhí)行Java軟件。
【文檔編號】G06F21/14GK103971034SQ201410167824
【公開日】2014年8月6日 申請日期:2014年4月24日 優(yōu)先權(quán)日:2014年4月24日
【發(fā)明者】姚祥健, 陳瑞兵 申請人:福建聯(lián)迪商用設(shè)備有限公司