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

提高Java軟件破解難度的方法及裝置、版權(quán)驗(yàn)證方法

文檔序號(hào):6436186閱讀:321來源:國(guó)知局
專利名稱:提高Java軟件破解難度的方法及裝置、版權(quán)驗(yàn)證方法
技術(shù)領(lǐng)域
本發(fā)明涉及軟件版權(quán)保護(hù)領(lǐng)域,具體涉及一種提高Java軟件破解難度的方法及裝置,和提高破解難度后的Java軟件的版權(quán)驗(yàn)證方法。
背景技術(shù)
Java語言以其良好的面向?qū)ο筇匦院涂缙脚_(tái)特性獲得了廣泛的應(yīng)用,但由于Java語言是解釋執(zhí)行的語言,Java編譯器編譯并發(fā)布的字節(jié)碼程序易于反編譯,對(duì)Java字節(jié)碼程序進(jìn)行反編譯獲取源代碼進(jìn)行反向工程,或者修改軟件保護(hù)相關(guān)代碼對(duì)軟件進(jìn)行破解的情況時(shí)有發(fā)生。目前很多軟件開發(fā)商依據(jù)計(jì)算機(jī)唯一的特征碼信息如網(wǎng)卡號(hào)、硬盤號(hào)或者CPU的ID號(hào)等一項(xiàng)或多項(xiàng)信息得到計(jì)算機(jī)指紋信息,將軟件許可和硬件綁定。軟件開發(fā)商也經(jīng)常將授權(quán)許可信息保存在硬件加密狗中,程序在運(yùn)行時(shí)讀取加密狗的信息來判斷軟件是否被授權(quán),這種方式也需要訪問硬件信息。Java語言對(duì)硬件訪問能力較差,為了獲取硬件信息,通常需要使用Java本地調(diào)用,如在Windows環(huán)境下開發(fā)符合JNI (Java本地調(diào)用)規(guī)范的動(dòng)態(tài)連接庫,Java語言調(diào)用動(dòng)態(tài)連接庫來間接獲取硬件信息。目前,要對(duì)軟件進(jìn)行破解,一般都需要對(duì)軟件進(jìn)行修改,通過修改代碼或開發(fā)一段新的代碼欺騙版權(quán)驗(yàn)證裝置的檢測(cè),讓程序誤以為已經(jīng)被授權(quán)。如下面判斷軟件是否被授權(quán)以及獲取授權(quán)等級(jí)的C++函數(shù)boolean isLicensed();int getLicenseLevel O ;正常情況下該函數(shù)會(huì)讀取機(jī)器特征碼信息,在授權(quán)文件讀取授權(quán)信息,然后對(duì)比特征碼信息和授權(quán)信息,isLicensed O函數(shù)用來判斷軟件是否被授權(quán);getLicenseLevel O函數(shù)用來獲取軟件授權(quán)等級(jí)。通常開發(fā)人員會(huì)將其編譯為動(dòng)態(tài)連接庫如License, dll,供Java程序或其他應(yīng)用程序調(diào)用,進(jìn)行版權(quán)驗(yàn)證。但是對(duì)于破解者來說,只需開發(fā)兩個(gè)同名的函數(shù),對(duì)第一個(gè)函數(shù)直接返回true,表示已授權(quán);對(duì)第二個(gè)函數(shù)直接返回100或更高的授權(quán)等級(jí)。如下boolean isLicensed ()
{
return true;
}
int getLicenseLevel ()
{ return 100;
}然后也編譯成名為L(zhǎng)icense, dll的動(dòng)態(tài)庫替換原來的同名的文件,即可通過版權(quán)校驗(yàn)?zāi)K的驗(yàn)證,非法使用軟件。由于Java字節(jié)碼容易反編譯,也可以采用相同的通過篡改代碼或者開發(fā)欺騙類的方式進(jìn)行軟件破解。針對(duì)Java字節(jié)碼易于反編譯的問題,目前出現(xiàn)了一些代碼混淆工具,混淆以后的代碼雖然也可以反編譯,但可讀性極差,特別是對(duì)于代碼量大、業(yè)務(wù)邏輯復(fù)雜的類,對(duì)反編譯代碼進(jìn)行修改再編譯成Java字節(jié)碼理論上是不可能的。在對(duì)Java軟件進(jìn)行破解時(shí),破解者一般從代碼量小、邏輯簡(jiǎn)單的類入手;如果將業(yè)務(wù)邏輯代碼和版權(quán)保護(hù)代碼混在一起,混淆后再發(fā)布軟件也很難破解。但是為了便于維護(hù)以及業(yè)務(wù)邏輯模塊開發(fā)人員和版權(quán)保護(hù)模塊開發(fā)人員的工作分工,軟件開發(fā)商會(huì)將業(yè)務(wù)邏輯代碼和讀取授權(quán)信息本身的代碼盡量分離,減少耦合。由于這種業(yè)務(wù)邏輯代碼和軟件版權(quán)保護(hù)代碼的分離,對(duì)混淆后的軟件版權(quán)保護(hù)代碼進(jìn)行反編譯然后篡改還是可能的,另外軟件版權(quán)保護(hù)代碼再?gòu)?fù)雜,破解者只要弄清楚了合法授權(quán)程序相應(yīng)方法的輸入輸出(而做到這點(diǎn)并不難),根本不用搞清楚內(nèi)部復(fù)雜的軟件加密機(jī)制,如前所述編寫簡(jiǎn)單的代碼,讓版權(quán)驗(yàn)證方法直接返回合法授權(quán)用戶相同的值然后重新編譯即可將軟件破解。由此可見,現(xiàn)有Java軟件保護(hù)可以通過篡改軟件版權(quán)保護(hù)模塊欺騙軟件版權(quán)驗(yàn)證裝置通過版權(quán)認(rèn)證,具有一定Java或C++語言基礎(chǔ)的開發(fā)人員很容易實(shí)現(xiàn)軟件的破解。

發(fā)明內(nèi)容
針對(duì)現(xiàn)有Java軟件版權(quán)保護(hù)技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種提高Java軟件破解難度的方法及裝置,和基于該方法及裝置提高破解難度后的Java軟件的版權(quán)驗(yàn)證方法,以解決現(xiàn)有Java軟件版權(quán)保護(hù)技術(shù)存在的容易通過篡改軟件版權(quán)保護(hù)模塊實(shí)現(xiàn)軟件破解的問題。為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下—種提高Java軟件破解難度的方法,包括以下步驟步驟1、將軟件版權(quán)保護(hù)模塊所涉及的Java類和非Java程序模塊設(shè)置為摘要信息提取1吳塊的提取對(duì)象;步驟2、編譯軟件的源代碼并將編譯結(jié)果打包成第一 Jar文件,源代碼包括業(yè)務(wù)邏輯代碼和軟件版權(quán)保護(hù)代碼;步驟3、設(shè)置Jar文件的代碼混淆選項(xiàng),設(shè)定Jar文件的程序入口類及程序入口方法;步驟4、采用所述代碼混淆選項(xiàng)對(duì)第一 Jar文件的非程序入口類及非程序入口方法進(jìn)行混淆并打包成第二 Jar文件;步驟5、執(zhí)行第二 Jar文件的摘要信息提取模塊,提取軟件版權(quán)保護(hù)模塊中混淆過的Java類和非Java程序模塊的第一摘要信息,并通過第一摘要信息輸出裝置輸出;步驟6、修改軟件源代碼,將所述第一摘要信息作為常量信息硬編碼到Java軟件的版權(quán)驗(yàn)證類中;步驟7、重新編譯修改后的軟件的源代碼并將編譯結(jié)果打包成第三Jar文件;步驟8、采用步驟3設(shè)置的代碼混淆選項(xiàng)對(duì)第三Jar文件的非程序入口類及非程序入口方法進(jìn)行混淆并打包成第四Jar文件,將第四Jar文件作為最終發(fā)布的Jar文件。進(jìn)一步,如上所述的一種提高Java軟件破解難度的方法,步驟3中,所述程序入口包括業(yè)務(wù)功能模塊必須公開的類和方法、第一摘要信息輸出裝置對(duì)應(yīng)的Java類及其啟動(dòng)方法。進(jìn)一步,如上所述的一種提高Java軟件破解難度的方法,步驟I中,如果摘要信息提取模塊的提取對(duì)象是Java類,步驟5中摘要信息提取模塊提取到的第一摘要信息是所述Java類混淆后對(duì)應(yīng)的Java類的摘要信息。再進(jìn)一步,如上所述的一種提高Java軟件破解難度的方法,步驟5中,采用軟件系統(tǒng)處理核心業(yè)務(wù)的Java類中代碼量大、業(yè)務(wù)邏輯復(fù)雜的一個(gè)或多個(gè)Java類作為版權(quán)驗(yàn)證類。一種提高Java軟件破解難度的裝置,包括代碼混淆模塊用于對(duì)編譯后的Java軟件的非程序入口類和非程序入口方法進(jìn)行代碼混淆;軟件版權(quán)保護(hù)模塊用于處理軟件版權(quán)保護(hù)的代碼,包括涉及版權(quán)保護(hù)的Java類和非Java程序模塊;摘要信息提取模塊用于在軟件完成開發(fā)并在發(fā)布前提取軟件版權(quán)保護(hù)模塊的第一摘要信息和在運(yùn)行時(shí)提取軟件版權(quán)保護(hù)模塊的第二摘要信息;第一摘要信息輸出裝置用于將摘要信息提取模塊獲取的第一摘要信息輸出;防篡改驗(yàn)證模塊用于將第二摘要信息和第一摘要信息進(jìn)行比較,確定軟件是否合法;業(yè)務(wù)功能模塊用于處理軟件業(yè)務(wù)邏輯的代碼。進(jìn)一步,如上所述的一種提高Java軟件破解難度的裝置,將第一摘要信息輸出裝置輸出的第一摘要信息硬編碼到版權(quán)驗(yàn)證類中;將防篡改驗(yàn)證模塊嵌入到Java軟件的版權(quán)驗(yàn)證類中。進(jìn)一步,如上所述的一種提高Java軟件破解難度的裝置,防篡改驗(yàn)證模塊進(jìn)行第一摘要信息和第二摘要信息比較時(shí),若第一摘要信息和第二摘要信息相同則說明軟件版權(quán)保護(hù)模塊在發(fā)布后沒有被篡改,軟件合法;若不同說明軟件版權(quán)保護(hù)模塊被篡改,軟件非法。
再進(jìn)一步,如上所述的一種提高Java軟件破解難度的裝置,摘要信息提取模塊所提取的第一摘要信息和第二摘要信息是通過代碼混淆模塊混淆過的Java類和非Java程序模塊的摘要信息?;谏鲜鎏岣逬ava軟件破解難度的方法及裝置的一種提高破解難度的Java軟件版權(quán)驗(yàn)證的方法,包括以下步驟(I)啟動(dòng)應(yīng)用系統(tǒng),加載第四Jar文件;(2)調(diào)用摘要信息提取模塊,提取軟件運(yùn)行時(shí)軟件版權(quán)保護(hù)模塊的摘要信息得到
第二摘要信息;(3)將第二摘要信息和硬編碼到版權(quán)驗(yàn)證類中的第一摘要信息進(jìn)行比較,如果第二摘要信息與第一摘要信息相同,則說明軟件版權(quán)保護(hù)模塊未被篡改,軟件合法;如果不同則說明軟件版權(quán)保護(hù)模塊被修改,軟件非法。進(jìn)一步,如上所述的一種軟件版權(quán)驗(yàn)證的方法,步驟(I)中,通過程序入口中Java類的啟動(dòng)方法啟動(dòng)應(yīng)用系統(tǒng)。本發(fā)明的效果在于本發(fā)明所述的一種提高Java軟件破解難度的方法及裝置,和版權(quán)驗(yàn)證方法,通過將版權(quán)保護(hù)模塊的數(shù)字摘要信息硬編碼到版權(quán)驗(yàn)證類中,以及將防篡改驗(yàn)證模塊嵌入到Java軟件的版權(quán)驗(yàn)證類中;可以識(shí)別軟件發(fā)布后是否有人篡改軟件版權(quán)保護(hù)模塊,提高了 Java軟件的破解的難度,加大了 Java軟件的版權(quán)保護(hù)力度。


圖1為本發(fā)明提高Java軟件破解難度的原理示意圖;圖2為本發(fā)明提高Java軟件破解難度裝置的結(jié)構(gòu)框圖;圖3為本發(fā)明提高Java軟件破解難度方法的工作流程圖;圖4為本發(fā)明軟件運(yùn)行時(shí)驗(yàn)證軟件是否合法的軟件版權(quán)驗(yàn)證方法的工作流程圖;圖5為實(shí)施例中提高Java軟件破解難度的裝置示意圖。
具體實(shí)施例方式本發(fā)明提供了一種提高Java軟件破解難度的方法及裝置,和基于該方法及裝置的Java軟件版權(quán)驗(yàn)證方法,通過本發(fā)明所述的方法及裝置可以提高Java軟件的破解難度,并識(shí)別軟件發(fā)布后是否有人篡改軟件版權(quán)保護(hù)模塊,加大了 Java軟件的版權(quán)保護(hù)力度。其原理示意圖如圖1所示通過提取混淆后的軟件版權(quán)保護(hù)模塊的數(shù)字摘要信息得到第一摘要信息,并將第一摘要信息硬編碼到版權(quán)驗(yàn)證類中作為版權(quán)驗(yàn)證類的常量數(shù)據(jù)。再次對(duì)軟件版權(quán)保護(hù)模塊進(jìn)行代碼混淆后得到最終的Jar文件作為最終發(fā)布的Jar文件。通過這種方法,在版權(quán)驗(yàn)證類執(zhí)行關(guān)鍵操作處就可以通過提取運(yùn)行時(shí)的軟件版權(quán)保護(hù)模塊的數(shù)字摘要信息得到第二摘要信息,通過將第二摘要信息和版權(quán)驗(yàn)證類中的第一摘要信息進(jìn)行比較,就可以確定軟件版權(quán)保護(hù)模塊是否進(jìn)行過修改,也確定軟件的使用是否合法,提高軟件的版權(quán)保護(hù)力度。下面結(jié)合說明書附圖與具體實(shí)施方式
對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說明。圖2示出了本發(fā)明一種提高Java軟件破解難度裝置的結(jié)構(gòu)框圖,由圖中可以看出,該裝置主要包括
軟件版權(quán)保護(hù)模塊11 :用于處理軟件版權(quán)保護(hù)的代碼,包括涉及版權(quán)保護(hù)的Java類和非Java程序模塊;代碼混淆模塊12 :用于對(duì)編譯后的Java軟件的非程序入口類及非入口方法進(jìn)行代碼混淆;業(yè)務(wù)功能模塊13 :用于處理軟件業(yè)務(wù)邏輯的代碼;摘要信息提取模塊14 :用于在軟件完成開發(fā)并在發(fā)布前提取軟件版權(quán)保護(hù)模塊的第一摘要信息和在運(yùn)行時(shí)提取軟件版權(quán)保護(hù)模塊的第二摘要信息;第一摘要信息輸出裝置15 :用于將摘要信息提取模塊獲取的第一摘要信息在顯不設(shè)備輸出;防篡改驗(yàn)證模塊16 :用于將第二摘要信息和第一摘要信息進(jìn)行比較,確定軟件是否合法。為了便于維護(hù)以及業(yè)務(wù)功能模塊開發(fā)人員和軟件版權(quán)保護(hù)模塊開發(fā)人員的工作分工,軟件開發(fā)商會(huì)將業(yè)務(wù)邏輯代碼和讀取授權(quán)信息本身的代碼盡量分離,減少耦合。業(yè)務(wù)邏輯代碼保存于業(yè)務(wù)功能模塊,軟件版權(quán)保護(hù)代碼保存于軟件版權(quán)保護(hù)模塊,其中本發(fā)明中的軟件版權(quán)保護(hù)模塊中包含代碼混淆后的涉及版權(quán)保護(hù)的Java類和非Java程序模塊。通過將摘要信息提取模塊14提取的開發(fā)階段的第一摘要信息硬編碼到業(yè)務(wù)功能模塊13的版權(quán)校驗(yàn)類,將第一摘要信息作為版權(quán)驗(yàn)證類的常量信息,然后對(duì)源代碼再次進(jìn)行編碼和混淆得到最終發(fā)布的Jar文件,在軟件運(yùn)行時(shí),摘要信息提取模塊14通過摘要信息提取模塊提取軟件版權(quán)保護(hù)模塊的第二摘要信息,通過防篡改驗(yàn)證模塊16 (防篡改驗(yàn)證模塊16嵌入到Java軟件的版權(quán)驗(yàn)證類中)將第二摘要信息和第一摘要信息進(jìn)行比較,若第二摘要信息和第一摘要信息相同則說明軟件版權(quán)保護(hù)模塊在發(fā)布后沒有被篡改,軟件合法;若不同說明軟件版權(quán)保護(hù)模塊被篡改,軟件非法。摘要信息提取模塊14所提取的第一摘要信息和第二摘要信息是通過代碼混淆模塊12混淆過的Java類和非Java程序模塊的摘要信息。圖3示出了基于上述提高Java軟件破解難度裝置的一種提高Java軟件破解難度方法的工作流程圖,該方法主要包括以下步驟步驟21、將軟件版權(quán)保護(hù)模塊所涉及的Java類和非Java程序模塊設(shè)置為摘要信息提取1吳塊的提取對(duì)象。步驟22、編譯源代碼并打包成第一 Jar文件;源代碼包括軟件業(yè)務(wù)功能模塊的業(yè)務(wù)邏輯代碼和軟件版權(quán)保護(hù)模塊的軟件版權(quán)保護(hù)代碼。步驟23、設(shè)置Jar文件的代碼混淆選項(xiàng),設(shè)定Jar文件的程序入口類及程序入口方法;程序入口包括業(yè)務(wù)功能模塊必須公開的類和方法,第一摘要信息輸出裝置對(duì)應(yīng)的Java類及其啟動(dòng)方法。例如,對(duì)于獨(dú)立運(yùn)行的Java文件,程序入口為Startup類,根據(jù)代碼混淆規(guī)范,該類以及該類的main方法不能混淆;另外第一摘要信息輸出裝置對(duì)應(yīng)的Sign類及其main方法,提取第一摘要信息輸出裝置需要,也不能混淆,在代碼混淆裝置中將這兩個(gè)類設(shè)置為程序入口類,將這兩個(gè)類的main方法設(shè)置為程序入口方法;未被設(shè)定為程序入口類或程序入口方法的類和方法為非程序入口。步驟24、混淆第一 Jar文件得到第二 Jar文件;
通過代碼混淆模塊采用步驟S23所設(shè)置的代碼混淆選項(xiàng)對(duì)第一 Jar文件的非程序入口進(jìn)行代碼混淆并打包成第二 Jar文件。步驟25、執(zhí)行第二 Jar文件的摘要信息提取模塊得到第一摘要信息;執(zhí)行第二 Jar文件的摘要信息提取模塊所得到的第一摘要信息為軟件版權(quán)保護(hù)模塊中混淆過的Java類和非Java程序模塊的數(shù)字摘要信息,并將第一摘要信息通過第一摘要信息輸出裝置輸出。如果步驟S21中摘要信息提取模塊的提取對(duì)象是Java類,步驟4中摘要信息提取模塊提取到的第一摘要信息是所述Java類混淆后相應(yīng)的Java類的摘要信肩、O步驟26、將第一摘要信息硬編碼到版權(quán)驗(yàn)證類;將第一摘要信息硬編碼到Java軟件的版權(quán)驗(yàn)證類中作為版權(quán)驗(yàn)證類的常量信息,將防篡改驗(yàn)證模塊嵌入到Java軟件的版權(quán)驗(yàn)證類中。通常軟件會(huì)有很多的核心業(yè)務(wù)類,核心業(yè)務(wù)類是指軟件系統(tǒng)處理核心業(yè)務(wù)的類,脫離核心業(yè)務(wù)類軟件將不能正常運(yùn)行。從核心業(yè)務(wù)類中選擇一個(gè)或多個(gè)類作為版權(quán)驗(yàn)證類,在本發(fā)明中,一般選擇核心業(yè)務(wù)的Java類中代碼量大、業(yè)務(wù)邏輯復(fù)雜的一個(gè)或多個(gè)Java類作為版權(quán)驗(yàn)證類,這種Java類混淆后反編譯代碼難以讀懂,對(duì)這種類進(jìn)行修改解除防篡改驗(yàn)證功能然后再次編譯運(yùn)行理論上不能實(shí)現(xiàn)。步驟27、再次編譯源代碼并打包成第三Jar文件;步驟S26中修改了軟件的源代碼,將第一摘要信息作為常量信息硬編碼到了版權(quán)驗(yàn)證類中,對(duì)修改后的源代碼再次進(jìn)行編譯并打包成第三Jar文件;步驟28、混淆第三Jar文件得到第四Jar文件。采用步驟S23設(shè)置的代碼混淆選項(xiàng)對(duì)第三Jar文件的非程序入口進(jìn)行混淆并打包成第四Jar文件,并將第四Jar文件作為最終發(fā)布的Jar文件。圖4示出了基于上述提高Java軟件破解難度裝置和方法的一種軟件版權(quán)驗(yàn)證方法的工作流程圖,該驗(yàn)證方法主要包括以下步驟步驟31 :啟動(dòng)應(yīng)用系統(tǒng),加載第四Jar文件;通過執(zhí)行程序入口類中Java類的啟動(dòng)方法啟動(dòng)應(yīng)用系統(tǒng),并加載第四Jar文件。步驟32 :提取軟件版權(quán)保護(hù)模塊的第二摘要信息;調(diào)用摘要信息提取模塊,提取軟件版權(quán)保護(hù)模塊的摘要信息得到第二摘要信息;軟件版權(quán)保護(hù)模塊的摘要信息是指軟件版權(quán)保護(hù)模塊的Java類和非Java程序模塊的摘要信息。步驟33 比較第二摘要信息和第一摘要信息,確定軟件是否合法。將第二摘要信息和版權(quán)驗(yàn)證類中的第一摘要信息進(jìn)行比較,如果第二摘要信息與第一摘要信息相同,則說明軟件版權(quán)保護(hù)模塊未被篡改,軟件合法;如果不同則說明軟件版權(quán)保護(hù)模塊被修改,軟件非法。下面通過實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)的說明。實(shí)施例本發(fā)明實(shí)施例以一個(gè)帶main函數(shù)的能夠獨(dú)立運(yùn)行的Java軟件進(jìn)行說明。圖5是根據(jù)本發(fā)明實(shí)施例的裝置示意圖。該應(yīng)用系統(tǒng)的裝置包括軟件版權(quán)保護(hù)模塊51,此實(shí)施例由三個(gè)Java類和非Java程序模塊組成,Java類包括 Global 類 511、DogMonitor 類 513 和 License 類 515,非 Java 程序模塊為 License,dl I動(dòng)態(tài)庫517。Global類511用于保存系統(tǒng)運(yùn)行過程需要的全局?jǐn)?shù)據(jù),將授權(quán)信息也保存在Global類中;DogMonitor類513通過調(diào)用License類定期(如每隔半小時(shí))檢查保存在加密狗或硬盤的軟件授權(quán)信息、并將授權(quán)信息傳遞給Global類license類515通過JNI調(diào)用動(dòng)態(tài)庫License, dll中的函數(shù)獲取軟件授權(quán)信息。License, dll動(dòng)態(tài)庫517用于訪問計(jì)算機(jī)指紋信息,對(duì)比計(jì)算機(jī)指紋信息以及保存在硬盤的授權(quán)文件是否一致來決定軟件是否被授權(quán),該裝置也可以直接讀取硬件加密狗判斷軟件是否被授權(quán)。防篡改驗(yàn)證模塊52,用于識(shí)別軟件發(fā)布后是否被篡改,如果沒有篡改,則為正版軟件;否則為破解軟件。本實(shí)施例軟件發(fā)布前對(duì)軟件追加版權(quán)保護(hù)功能的處理過程。包括以下步驟步驟1、將軟件版權(quán)保護(hù)模塊涉及的Java類Global. class、DogMonitor. class和License, class以及非Java程序模塊License, dll設(shè)置為摘要信息提取模塊的提取對(duì)象;步驟2、將源代碼即軟件的業(yè)務(wù)功能模塊代碼連同軟件版權(quán)保護(hù)模塊的代碼一起編譯并打包成第一 Jar文件;步驟3、設(shè)置Jar文件的代碼混淆選項(xiàng),該實(shí)施例為獨(dú)立運(yùn)行的Java程序,程序入口為Startup類,根據(jù)代碼混淆規(guī)范,該類及該類的main方法不能混淆;另外第一摘要信息輸出裝置對(duì)應(yīng)的Sign類及該類的main方法,執(zhí)行第一摘要信息輸出裝置的程序入口,也不能混淆;在代碼混淆裝置中將這兩個(gè)類設(shè)置為程序入口類,將這兩個(gè)類的main方法設(shè)置為程序入口方法;步驟4、采用所述代碼混淆選項(xiàng)對(duì)第一 Jar文件進(jìn)行代碼混淆并打包成第二 Jar文件;步驟5、執(zhí)行第二 Jar文件中的第一摘要信息輸出裝置,得到步驟I設(shè)置的Java類Global, class、DogMonitor. class 和 License, class 混渚后相應(yīng)類以及非 Java 程序模塊License, dll的數(shù)字摘要信息,此處為CRC碼,為16進(jìn)制的整數(shù)“0xfea9f3a8L”,并在屏幕打印該信息。步驟6、修改軟件源代碼,將所述第一摘要信息“0xfea9f3a8L”作為常量信息硬編碼到版權(quán)驗(yàn)證類HTKernel中,將防篡改驗(yàn)證模塊嵌入到該Java軟件的版權(quán)驗(yàn)證類中;private final int FLAG = 0xfea9f3a8L ;步驟7、重復(fù)步驟2將業(yè)務(wù)功能模塊代碼連同軟件版權(quán)保護(hù)模塊的代碼一起編譯并打包成第三Jar文件;步驟8、采用步驟3所設(shè)置的代碼混淆選項(xiàng)對(duì)第三Jar文件進(jìn)行代碼混淆得到混淆后的第四Jar文件,將第四Jar文件作為最終發(fā)布的Jar文件。本實(shí)施例步驟4和步驟8混淆時(shí)沒有出現(xiàn)類的變化,沒有追加新類,沒有刪除類并且沒有修改過類名,因此兩次混淆前后類的對(duì)應(yīng)關(guān)系是固定的。其區(qū)別是步驟8中版權(quán)驗(yàn)證類HTKernel混淆前后的類中FLAG值是步驟6中設(shè)定的值,即為“0xfea9f3a8L”。本實(shí)施例選擇代碼量大、處理核心業(yè)務(wù)邏輯的HTKernel作為版權(quán)驗(yàn)證類,在HTKernel類嵌入防篡改驗(yàn)證模塊,這種Java類混淆后反編譯代碼難以讀懂,對(duì)這個(gè)類進(jìn)行修改解除防篡改驗(yàn)證功能然后再次編譯運(yùn)行理論上不可實(shí)現(xiàn)。本實(shí)施例軟件未破解正常運(yùn)行時(shí)軟件版權(quán)驗(yàn)證的過程。包括以下步驟
步驟1、用戶通過加載第四Jar文件,執(zhí)行Startup類啟動(dòng)應(yīng)用系統(tǒng),;步驟2、應(yīng)用系統(tǒng)在執(zhí)行到防篡改驗(yàn)證模塊所嵌入的版權(quán)驗(yàn)證類HTKernel進(jìn)行關(guān)鍵業(yè)務(wù)處理時(shí)調(diào)用摘要信息提取模塊,提取版權(quán)保護(hù)模塊的摘要信息得到第二摘要信息“0xfea9f3a8L”;步驟3、將第二摘要信息“0xfea9f3a8L”和硬編碼進(jìn)版權(quán)驗(yàn)證類HTKernel的第一摘要信息“0xfea9f3a8L”進(jìn)行比較,發(fā)現(xiàn)第二數(shù)字摘要信息和第一數(shù)字摘要信息完全相同,說明版權(quán)保護(hù)模塊在發(fā)布后沒有被篡改,軟件合法。本實(shí)施例軟件版權(quán)保護(hù)模塊被篡改后運(yùn)行時(shí)軟件版權(quán)驗(yàn)證的過程,只要對(duì)Global, class、DogMonitor. class 和 License, class 混渚后對(duì)應(yīng)的類的任何一個(gè)做了修改,或者對(duì)非Java程序模塊License, dll做過修改,均不能通過防篡改驗(yàn)證。包括以下步驟步驟1、用戶通過加載第四Jar文件,執(zhí)行Startup類啟動(dòng)應(yīng)用系統(tǒng);步驟2、應(yīng)用系統(tǒng)在執(zhí)行到防篡改驗(yàn)證模塊所嵌入的版權(quán)驗(yàn)證類HTKernel進(jìn)行關(guān)鍵業(yè)務(wù)處理時(shí)調(diào)用摘要信息提取模塊,提取版權(quán)保護(hù)模塊的摘要信息得到第二摘要信息“0x9339b91cL” ;步驟3、將第二摘要信息“0x9339b91cL”和硬編碼進(jìn)版權(quán)驗(yàn)證類HTKernel的第一摘要信息“0xfea9f3a8L”進(jìn)行比較,發(fā)現(xiàn)第二數(shù)字摘要信息和第一數(shù)字摘要信息不相同,說明版權(quán)保護(hù)模塊在發(fā)布后被篡改,軟件非法。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其同等技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種提高Java軟件破解難度的方法,包括以下步驟 步驟1、將軟件版權(quán)保護(hù)模塊所涉及的Java類和非Java程序模塊設(shè)置為摘要信息提取豐吳塊的提取對(duì)象; 步驟2、編譯軟件的源代碼并將編譯結(jié)果打包成第一 Jar文件,源代碼包括業(yè)務(wù)邏輯代碼和軟件版權(quán)保護(hù)代碼; 步驟3、設(shè)置Jar文件的代碼混淆選項(xiàng),設(shè)定Jar文件的程序入口類及程序入口方法;步驟4、采用所述代碼混淆選項(xiàng)對(duì)第一 Jar文件的非程序入口類及非程序入口方法進(jìn)行混淆并打包成第二 Jar文件; 步驟5、執(zhí)行第二 Jar文件的摘要信息提取模塊,提取軟件版權(quán)保護(hù)模塊中混淆過的Java類和非Java程序模塊的第一摘要信息,并通過第一摘要信息輸出裝置輸出; 步驟6、修改軟件源代碼,將所述第一摘要信息作為常量信息硬編碼到Java軟件的版權(quán)驗(yàn)證類中; 步驟7、重新編譯修改后的軟件的源代碼并將編譯結(jié)果打包成第三Jar文件; 步驟8、采用步驟3設(shè)置的代碼混淆選項(xiàng)對(duì)第三Jar文件的非程序入口類及非程序入口方法進(jìn)行混淆并打包成第四Jar文件,將第四Jar文件作為最終發(fā)布的Jar文件。
2.如權(quán)利要求1所述的一種提高Java軟件破解難度的方法,其特征在于步驟3中,所述程序入口包括業(yè)務(wù)功能模塊必須公開的類和方法、第一摘要信息輸出裝置對(duì)應(yīng)的Java類及其啟動(dòng)方法。
3.如權(quán)利要求1所述的一種提高Java軟件破解難度的方法,其特征在于步驟I中,如果摘要信息提取模塊的提取對(duì)象是Java類,步驟5中摘要信息提取模塊提取到的第一摘要信息是所述Java類混淆后對(duì)應(yīng)的Java類的摘要信息。
4.如權(quán)利要求1所述的一種提高Java軟件破解難度的方法,其特征在于步驟6中,采用軟件系統(tǒng)處理核心業(yè)務(wù)的Java類中代碼量大、業(yè)務(wù)邏輯復(fù)雜的一個(gè)或多個(gè)Java類作為版權(quán)驗(yàn)證類。
5.一種提高Java軟件破解難度的裝置,包括 代碼混淆模塊用于對(duì)編譯后的Java軟件的非程序入口類及非程序入口方法進(jìn)行代碼混淆; 軟件版權(quán)保護(hù)模塊用于處理軟件版權(quán)保護(hù)的代碼,包括涉及版權(quán)保護(hù)的Java類和非Java程序模塊; 摘要信息提取模塊用于在軟件完成開發(fā)并在發(fā)布前提取軟件版權(quán)保護(hù)模塊的第一摘要信息和在運(yùn)行時(shí)提取軟件版權(quán)保護(hù)模塊的第二摘要信息; 第一摘要信息輸出裝置用于將摘要信息提取模塊獲取的第一摘要信息在顯不設(shè)備輸出; 防篡改驗(yàn)證模塊用于將第二摘要信息和第一摘要信息進(jìn)行比較,確定軟件是否合法; 業(yè)務(wù)功能模塊用于處理軟件業(yè)務(wù)邏輯的代碼。
6.如權(quán)利要求5所述的一種提高Java軟件破解難度的裝置,其特征在于將第一摘要信息輸出裝置輸出的第一摘要信息作為常量信息硬編碼到版權(quán)驗(yàn)證類中;將防篡改驗(yàn)證模塊嵌入到Java軟件的版權(quán)驗(yàn)證類中。
7.如權(quán)利要求5或6所述的一種提高Java軟件破解難度的裝置,其特征在于防篡改驗(yàn)證模塊將第二摘要信息和第一摘要信息進(jìn)行比較,若第二摘要信息和第一摘要信息相同則說明軟件版權(quán)保護(hù)模塊在發(fā)布后沒有被篡改,軟件合法;若不同說明軟件版權(quán)保護(hù)模塊被篡改,軟件非法。
8.如權(quán)利要求5所述的一種提高Java軟件破解難度的裝置,其特征在于摘要信息提取模塊所提取的第一摘要信息和第二摘要信息是通過代碼混淆模塊混淆過的Java類和非Java程序模塊的摘要信息。
9.一種基于權(quán)利要求1至4之一所述方法提高破解難度的Java軟件版權(quán)驗(yàn)證的方法,包括以下步驟 (1)啟動(dòng)應(yīng)用系統(tǒng),加載第四Jar文件; (2)調(diào)用摘要信息提取模塊,提取軟件運(yùn)行時(shí)軟件版權(quán)保護(hù)模塊的摘要信息得到第二摘要信息; (3)將第二摘要信息和硬編碼到版權(quán)驗(yàn)證類中的第一摘要信息進(jìn)行比較,如果第二摘要信息與第一摘要信息相同,則說明軟件版權(quán)保護(hù)模塊未被篡改,軟件合法;如果不同則說明軟件版權(quán)保護(hù)模塊被修改,軟件非法。
10.如權(quán)利要求9所述的一種軟件版權(quán)驗(yàn)證的方法,其特征在于步驟(I)中,通過程序入口中Java類的啟動(dòng)方法啟動(dòng)應(yīng)用系統(tǒng)。
全文摘要
本發(fā)明公開了一種提高Java軟件破解難度的方法及裝置,和基于該方法及裝置的Java軟件版權(quán)驗(yàn)證方法。在Java軟件完成開發(fā)在發(fā)布之前對(duì)編譯后的非程序入口類和方法進(jìn)行代碼混淆,提取軟件版權(quán)保護(hù)模塊的數(shù)字摘要信息得到第一摘要信息,將第一摘要信息作為常量數(shù)據(jù)硬編碼到版權(quán)驗(yàn)證類;在版權(quán)驗(yàn)證類執(zhí)行關(guān)鍵操作處再次使用摘要信息提取模塊提取運(yùn)行時(shí)的版權(quán)保護(hù)模塊的數(shù)字摘要信息,得到第二摘要信息;將第二摘要信息和第一摘要信息比較,若相同說明版權(quán)保護(hù)模塊在發(fā)布后沒被篡改,軟件合法;若不同說明對(duì)軟件版權(quán)保護(hù)模塊進(jìn)行過修改,軟件可能被破解,用戶非法使用軟件。采用本發(fā)明加大了Java軟件的破解難度,提高了版權(quán)保護(hù)強(qiáng)度。
文檔編號(hào)G06F21/14GK103065072SQ201110322930
公開日2013年4月24日 申請(qǐng)日期2011年10月21日 優(yōu)先權(quán)日2011年10月21日
發(fā)明者樂以長(zhǎng) 申請(qǐng)人:北京大學(xué), 北大方正集團(tuán)有限公司, 方正國(guó)際軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
衢州市| 于田县| 兰坪| 赤水市| 文水县| 安顺市| 伊通| 土默特左旗| 永城市| 绥宁县| 临邑县| 临潭县| 亚东县| 文山县| 商丘市| 玉溪市| 济宁市| 民勤县| 信宜市| 襄汾县| 湘潭市| 云南省| 同德县| 六盘水市| 乌鲁木齐市| 桃园县| 华亭县| 沾化县| 邳州市| 天门市| 宜阳县| 巴楚县| 舒城县| 道真| 汶上县| 昆明市| 松阳县| 邓州市| 西畴县| 蚌埠市| 科尔|