鄒煜
摘 要
Java雖然能夠跨平臺(tái)使用具有較好的靈活性,并具有獨(dú)立的編譯方式,但是其源代碼編譯后,并沒有生成二進(jìn)制的文件,而是一種面向虛擬機(jī)的文件,我們稱之為Java類文件,屬于一種具有格式的中間代碼,容易被黑客進(jìn)行反編譯Java,為其提供了可能性。反編譯得到的代碼和源代碼差別不大,提高Java類文件的保護(hù)勢在必行。
【關(guān)鍵詞】Java類文件 文件加密 RSA ASE
1 引言
Java的開發(fā)資源豐富并且具有較為成熟的開發(fā)模式,因此,Java語言是目前較為主流的軟件設(shè)計(jì)和開發(fā)語言。目前,Java語言已經(jīng)廣泛應(yīng)用在嵌入式應(yīng)用,企業(yè)管理,信息管理等領(lǐng)域中。Java字節(jié)碼的文件中,對方法和變量的信息進(jìn)行了全部的保留,通常這些符號攜帶者很多種語義信息。Java語言的這種特殊性質(zhì),讓他很容易被黑客攻擊,遭到代碼的盜取,最終讓知識(shí)產(chǎn)權(quán)受到侵害,所以,Java類文件加密技術(shù)的研發(fā)非常必要。
2 Java
2.1 簡單性
Java是一種面向?qū)ο蟮恼Z言形式,通過所提供的基本的方法完成軟件的設(shè)計(jì)任務(wù),因此,只要程序員能夠理解基本的概念,就可以對軟件進(jìn)行開發(fā)。在Java語言中,并不需要考慮算法的重新加載以及多重繼承的問題,通過垃圾的自動(dòng)回收功能,能夠簡化軟件程序開發(fā)人員對內(nèi)存的管理工作。
2.2 面向?qū)ο蟮?/p>
在Java語言的程序設(shè)計(jì)中,主要針對的是對象和接口的設(shè)計(jì),用簡單的累計(jì)值和動(dòng)態(tài)的連接模型完成設(shè)計(jì)。使用繼承的機(jī)制,父類的信息和方法可以繼承過來,很好地達(dá)到了代碼復(fù)用的效果。
2.3 安全性
網(wǎng)絡(luò)病毒的盛行,因此,Java語言中,需要考慮其安全性。在Java語言中,并沒有指針的設(shè)計(jì),所以對內(nèi)存的訪問通過對象實(shí)例的變量來完成,可以減少指針操作構(gòu)成中產(chǎn)生的錯(cuò)誤。
2.4 跨平臺(tái)性
Java的最大優(yōu)點(diǎn)就是無需考慮平臺(tái)的特征,可以移植到不同的機(jī)器上完成軟件誰,讓程序員擺脫平臺(tái)開發(fā)工具的限制,實(shí)現(xiàn)了一次編寫,處處可用的目的。
3 Java類文件
3.1 Java類文件結(jié)構(gòu)
Java class文件的結(jié)構(gòu)主要針對的是一個(gè)類或者是接口的描述,其中包括了對Java程序設(shè)計(jì)應(yīng)用到的所有的類和接口的信息,是Java虛擬機(jī)能夠直接加載的文件。所以在程序設(shè)計(jì)中類文件非常重要,只有正確的對類文件進(jìn)行使用,才能夠完成程序的開發(fā)和設(shè)計(jì)。
3.2 Java反編譯
在Java中使用的反編譯器是javap對類文件完成反編譯工作。但是反編譯的結(jié)果不是想要的源代碼,包括局部變量和匯編代碼兩部分。此外,其他的反編譯工具M(jìn)ocha,WinDis在反編譯中能夠給出和源代碼基于一樣的代碼。Java類文件并不是一個(gè)二進(jìn)制的文件,是一種具有格式的中間的代碼,因此,會(huì)增加反編譯的可能性。這種安全問題,主要還是來自于Java本身的一些特點(diǎn)。
(1)Java的跨平臺(tái)特征,使得Java虛擬機(jī)的指令集要比匯編的指令集簡單,為了適應(yīng)各種平臺(tái)的需求,實(shí)現(xiàn)通用性,降低了反匯編的復(fù)雜性,產(chǎn)生安全隱患。
(2)在Java編譯器中,要將類編譯成為一個(gè)單獨(dú)的類文件,因此,這也從某種程度上簡化了反編譯的過程。
(3)java類文件中,保存了很多原有的方法和變量的名稱,因此,通過對名稱和變量方法的訪問,讓反編譯變得更容易。
4 Java類文件保護(hù)技術(shù)
4.1 編輯本地執(zhí)行文件
這種類文件保護(hù)在指定的計(jì)算機(jī)環(huán)境上,編譯成可運(yùn)行的程序。因此,編譯后得到的文件是二進(jìn)制的可執(zhí)行文件。相對于在Java虛擬機(jī)中對類文件進(jìn)行加載和執(zhí)行,這種本地編譯的方式具有節(jié)約空間,并且程序執(zhí)行速度快等優(yōu)點(diǎn)。這種本地編譯的方式的全晨讀和本地執(zhí)行程序的安全程度相似。
4.2 數(shù)字水印技術(shù)
數(shù)字水印技術(shù)根據(jù)著作權(quán)人的基本信息,按照某種特定的方式植入信息,在出現(xiàn)版權(quán)糾紛的時(shí)候,會(huì)通過設(shè)定的算法提取數(shù)字水印,驗(yàn)證版權(quán)的歸屬,保護(hù)著作人的合法權(quán)益,避免產(chǎn)生盜版的問題。目前,數(shù)字水印技術(shù)已經(jīng)應(yīng)用在圖像,視頻和聲音的多媒體中。水印的存在,要在不損壞原來數(shù)據(jù)的前提下進(jìn)行,并且在軟件中應(yīng)用數(shù)字水印是目前主流的一種發(fā)展趨勢,能夠保護(hù)計(jì)算機(jī)代碼的安全性。
但是這種數(shù)字水印技術(shù)也不是不能攻破的,在Java類文件中為了防止反編譯現(xiàn)象的出現(xiàn),在編譯代碼的時(shí)候要對其進(jìn)行優(yōu)化設(shè)計(jì),否則很容易被反編譯程序員看出,將原來的數(shù)字水印擦掉,后者偽造水印。
4.3 代碼混淆技術(shù)
在反編譯器出現(xiàn)以后,代碼混淆技術(shù)和理論也相應(yīng)的得到了發(fā)展。目前較為常見的混淆代碼器包括了:JODE,Jsrink等。此外,Sun公司也退出了自己的混淆器JADE。但是,代碼混淆技術(shù)也存在一定的局限性。因?yàn)榇a混淆器不能對程序的關(guān)鍵詞,和字符等進(jìn)行混淆,因此,即便是通過混淆,也還是能夠得到程序的框架信息,通過輸出的字符和引用的類信息可以確定對那些輸出的函數(shù)進(jìn)行定義,并且可知道程序中所調(diào)用的本地函數(shù)信息等。
5 發(fā)展趨勢
可知這幾種保護(hù)方式不能絕對的確保java類文件的安全性,只要黑客有足夠的耐心,就會(huì)將這些java類文件進(jìn)行反編譯。傳統(tǒng)的Java類文件加密方式有RSA、AES等,但其對加密長度是有限制的,在一些較為復(fù)雜和長數(shù)據(jù)加密過程中會(huì)存在異常的現(xiàn)象,因此,本文提出了一種分塊Java類文件的RSA加密算法,可有效地對長數(shù)據(jù)進(jìn)行加解密操作,節(jié)約加解密時(shí)間,提高算法的效率,是未來Java類文件加密技術(shù)發(fā)展的主要趨勢。
6 結(jié)論
Java類文件的保護(hù)關(guān)系到整個(gè)應(yīng)用程序的安全性,因此,非常重要。本文主要論述了目前主流的Java類文件的保護(hù)方式,并對其優(yōu)缺點(diǎn)進(jìn)行論述。在此基礎(chǔ)上,給出未來Java類文件保護(hù)技術(shù)發(fā)展的主要趨勢是基于混淆RSA加密技術(shù),并針對現(xiàn)存加密長度有限的問題,采取分段加密的方式,提高加解密的安全性,實(shí)現(xiàn)Java類文件的保護(hù)。
參考文獻(xiàn)
[1]林漢玲,方穎玨,王曉峰.密碼技術(shù)在Java類文件保護(hù)技術(shù)中的新應(yīng)用[J].現(xiàn)代電子技術(shù),2013,36(03):102-103.
[2]林漢玲,王曉峰,陳曉彬,等.一種基于混合密碼算法的Java類文件保護(hù)技術(shù)[J].桂林理工大學(xué)學(xué)報(bào),2015,35(01):202-206.