專利名稱:一種基于Java的軟件安全性加強的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及java進行軟件開發(fā)領(lǐng)域,具體涉及一種通用的、靈活的、高可擴展的 模塊化的代碼加密方法。
背景技術(shù):
當(dāng)前,世界大多數(shù)的軟件開發(fā)公司都在使用java進行軟件開發(fā),據(jù)51Cto網(wǎng)絡(luò)統(tǒng) 計,世界前20名的軟件公司,大都使用了 java進行軟件開發(fā),java語言開發(fā)范圍涉及廣。 利用java語言開發(fā)的系統(tǒng)涉及范圍更是囊括了財務(wù)軟件,ERP軟件,物流軟件等信息管理 系統(tǒng),這些都是各軟件開發(fā)公司花費大量的人力、物力、財力開發(fā)的軟件,甚至是公司的唯 一盈利模式,但是當(dāng)java開發(fā)的軟件經(jīng)過傳統(tǒng)的部署模式進行部署以后,根據(jù)java的開源 性質(zhì),java軟件的運行機制已經(jīng)被很多頂尖高手熟悉,他們開發(fā)出了可以反編譯java生成 的class文件,使得軟件對于有java知識的人暴露無遺,也使得軟件公司的心血很快被模 仿,造成軟件公司開發(fā)的產(chǎn)品迅速在市場被各公司模仿。為了解決java開發(fā)的軟件被反編譯,我們提出一種java新的部署模式,即部署的 java軟件的class文件利用我們的方法加密,進行代碼加密,從而達到防止被反編譯。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于Java的軟件安全性加強的方法。本發(fā)明的目的是按以下方式實現(xiàn)的,使用代碼保護方法對java生成的class代碼 進行加密,對Class文件進行加密處理,使得處理后的代碼與處理前代碼完成相同的功能, 但是加密的代碼很難被反編譯,即反編譯后得出的代碼是非常難懂、晦澀的加密后文件,因 此反編譯人員很難得出程序的真正語義,這樣即保證java開發(fā)軟件的跨平臺特性,又防止 開發(fā)的軟件被別人反編譯后輕易獲取,達到了保護軟件的目的,該方法包括對class文件 的加密過程和class文件在被jvm加載時執(zhí)行前的解密過程,步驟如下1)在程序代碼完成后,對生產(chǎn)的class文件進行加密,并保存加密算法,以在jvm 執(zhí)行時得到解密方法;2) Jvm執(zhí)行時通過load Class進行class文件加載,在加載過程中,首先得到文件 的加密算法,根據(jù)對應(yīng)的解密算法對文件進行解密,然后轉(zhuǎn)交jvm執(zhí)行。根據(jù)我們內(nèi)部定義的加密方法,首先對生成的class文件進行加密,然后打包,客 戶安裝部署后,暴露給客戶的是加密后的class文件,反編譯人員無法通過反編譯得到正 確的代碼,保證了源代碼安全。程序被安裝、部署以后,在執(zhí)行過程中,首先通過jvm調(diào)用我們重載過的 IoadClass類,對加密的class文件進行加載,并根據(jù)對應(yīng)的加密算法對class文件進行解 密,然后把主動權(quán)交與jvm對class文件執(zhí)行,實現(xiàn)程序的正常引導(dǎo)和使用。本發(fā)明的Java生成的class文件的加密方法使用后的優(yōu)異效果是,我們可以利用 當(dāng)前比較流行的對稱加、解密算法進行。對生成的class代碼進行加密,在執(zhí)行時進行解密,從而達到保護代碼的目的。
附圖1為傳統(tǒng)的java執(zhí)行過程示意圖;附圖2為經(jīng)過保護的java執(zhí)行過程示意圖;附圖3為傳統(tǒng)的class文件被反編譯示意圖;附圖4為加密后的class文件被編譯過程示意圖。
具體實施例方式參照說明書附圖對本發(fā)明的作以下詳細地說明。參考附圖1,傳統(tǒng)的java文件執(zhí)行過程傳統(tǒng)的部署,我們生成的class文件打成jar包,進行程序發(fā)布,當(dāng)安裝了 java虛 擬機以后,jvm根據(jù)程序的配置進行jar的加載,讀取到其中的class文件進行執(zhí)行。此處 class文件可被反編譯參考附圖2,保護的java執(zhí)行過程根據(jù)我們內(nèi)部定義的加密方法,首先對生成的class文件進行加密,然后打包,客 戶安裝部署后,暴露給客戶的是加密后的class文件,反編譯人員無法通過反編譯得到正 確的代碼,保證了源代碼安全。程序被安裝、部署以后,在執(zhí)行過程中,首先通過jvm調(diào)用我們重載過的 IoadClass類,對加密的class文件進行加載,并根據(jù)對應(yīng)的加密算法對class文件進行解 密,然后把主動權(quán)交與jvm對class文件執(zhí)行,實現(xiàn)程序的正常引導(dǎo)和使用。Java運行時裝 入字節(jié)碼的機制隱含地意味著可以對字節(jié)碼進行修改。JVM每次裝入類文件時都需要一個 稱為ClassLoader的對象,這個對象負責(zé)把新的類裝入正在運行的JVM。JVM給ClassLoader 一個包含了待裝入類(比如java. lang. Object)名字的字符串,然后由ClassLoader負責(zé) 找到類文件,裝入原始數(shù)據(jù),并把它轉(zhuǎn)換成一個Class對象。我們可以通過定制ClassLoader,在類文件執(zhí)行之前修改它。在這里,它的用途是 在類文件裝入之時進行解密,因此可以看成是一種即時解密器。由于解密后的字節(jié)碼文件 永遠不會保存到文件系統(tǒng),所以竊密者很難得到解密后的代碼。Java在一定程度上簡化了定制ClassLoader的構(gòu)建。在Java中,IoadClass的缺 省實現(xiàn)負責(zé)處理所有必需的步驟,但為了顧及各種定制的類裝入過程,它還調(diào)用一個新的 findClass方法。這為我們編寫定制的ClassLoader提供了一條捷徑,減少了麻煩只需覆 蓋findClass,而不是覆蓋loadClass。這種方法避免了重復(fù)所有裝入器必需執(zhí)行的公共步 驟,因為這一切由IoadClass負責(zé)。不過,本發(fā)明的定制ClassLoader并不使用這種方法。原因很簡單。如果由默認(rèn)的ClassLoader先尋找經(jīng)過加密的類文件,它可以找到;但由于類文件已經(jīng)加密,所以它不 會認(rèn)可這個類文件,裝入過程將失敗。因此,我們必須自己實現(xiàn)loadClassJnAT class文 件的加、解密機制,即保證了程序運行安全,又保證了代碼安全。
權(quán)利要求
一種基于Java的軟件安全性加強的方法,其特征在于,使用代碼保護方法對java生成的class代碼進行加密,對Class文件進行加密處理,使得處理后的代碼與處理前代碼完成相同的功能,但是加密的代碼很難被反編譯,即反編譯后得出的代碼是非常難懂、晦澀的加密后文件,因此反編譯人員很難得出程序的真正語義,這樣即保證java開發(fā)軟件的跨平臺特性,又防止開發(fā)的軟件被別人反編譯后輕易獲取,達到了保護軟件的目的,該方法包括對class文件的加密過程和class文件在被jvm加載時執(zhí)行前的解密過程,步驟如下1)在程序代碼完成后,對生產(chǎn)的class文件進行加密,并保存加密算法,以在jvm執(zhí)行時得到解密方法;2)Jvm執(zhí)行時通過load Class進行class文件加載,在加載過程中,首先得到文件的加密算法,根據(jù)對應(yīng)的解密算法對文件進行解密,然后轉(zhuǎn)交jvm執(zhí)行。
全文摘要
本發(fā)明提供一種基于Java的軟件安全性加強的方法是根據(jù)我們內(nèi)部定義的加密方法,首先對生成的class文件進行加密,然后打包,客戶安裝部署后,暴露給客戶的是加密后的class文件,反編譯人員無法通過反編譯得到正確的代碼,保證了源代碼安全。程序被安裝、部署以后,在執(zhí)行過程中,首先通過jvm調(diào)用我們重載過的loadClass類,對加密的class文件進行加載,并根據(jù)對應(yīng)的加密算法對class文件進行解密,然后把主動權(quán)交與jvm對class文件執(zhí)行,實現(xiàn)程序的正常引導(dǎo)和使用。
文檔編號G06F21/24GK101814124SQ20101015056
公開日2010年8月25日 申請日期2010年4月20日 優(yōu)先權(quán)日2010年4月20日
發(fā)明者曹其順 申請人:浪潮電子信息產(chǎn)業(yè)股份有限公司