欢迎来到天天文库
浏览记录
ID:15499952
大小:42.00 KB
页数:21页
时间:2018-08-03
《java语言安全行研究--java的反编译》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JAVA语言安全行研究--Java的反编译JAVA語言安全行研究--Java的反編譯Java誕生於1995年,是一門較年輕的語言。它以平臺無關性,安全性,面向對象,分佈式,鍵壯性等特點贏得了眾多程式員的青睞。特別是它簡潔的面向對象的語言風格,更讓許多人對它愛不釋手。但人們在使用Java的過程中,會發現它有幾個致命的弱點:運行速度慢,用戶使用不便,源代碼保護機制不夠安全。特別是在保護源代碼方面,Java是基於解釋一種叫Java字節碼的中間代碼來運行其程式的,而且Jvm比電腦的微處理器要簡單的多,文檔也很齊全,結果造成其目
2、標程式很容易被反編譯,而且所得代碼和其原始代碼十分相似,甚至可以一模一樣,可讀性相當好。這就給Java的代碼保護帶來了不利。但要實現Java程式的保護,也不是不可能的,經研究和總結,至少有三種實現方式:1.混淆器;2.網路載入重要類;3加密重要類。1混淆器目前,開發人員使用的比較多的保護代碼的方法是用混淆器。混淆器是採用一些方法將類,變數,方法,包的名字改為無意義的字符串;使用非法的字符代替符號;貼加一些代碼使反編譯軟體崩潰;貼加一些無關的指令或永遠執行不到的指令等使反編譯無法成功或所得的代碼可讀性很差。這樣就實現了反
3、反編譯的目的。我們來做個演示。原始代碼如下:importJava.io.*;importJava.security.*;publicclasssKey_kb{publicstaticvoidmain(Stringargs[])throwsException{FileInputStreamf=newFileInputStream("key1.dat");ObJectInputStreamb=newObJectInputStream(f);Keyk=(Key)b.readObJect();byte[]kb=k.getEnc
4、oded();FileOutputStreamf2=newFileOutputStream("keykb1.dat");f2.write(kb);for(inti=0;iSystem.out.print(kb+",");}}}使用混淆器後,再用Jad反編譯得代碼如下:importJava.io.*;importJava.security.Key;publicclasssKey_kb{publicskey(){}publicstaticvoidmain(Stringargs[]){FileInputStreamfilei
5、nputstream=newFileInputStream(ma);ObJectInputStreamobJectinputstream=newObJectInputStream(fileinputstream);Keykey=(Key)b.readObJect();byteabyte0[]=key.getEncoded();FileOutputStreamfileoutputstream=newFileOutputStream(na);fileoutputstream.write(abyte0);for(inti=0
6、;iSystem.out.print(abyte0+oa);}privatestaticStringa(Strings){inti=s.length();charac[]=newchar;for(intJ=0;JreturnnewString(ac);}privatestaticStringma="u5AA1u5AAFu5AF3u5AFBu5AE4u5AAEu5AABu5ABE";privatestaticStringna="u5AA1u5AAFu5AB3u5AA1u5AA8u5AFBu5AE4u5AAEu5AABu5
7、ABE";privatestaticStringoa="u5AE6";publicstatic{ma=a(ma);na=a(ma)oa=a(oa);}}混淆後,再反編譯所仍然能得到源代碼,但顯然,所得代碼與原始代碼比,變得難以讀懂,代碼中多了其他的方法,文件名等資訊也被打亂了。並且,把以上代碼寫進sKey_kb.Java中,無法通過編譯。但是,如果在編寫軟體時,在軟體中寫入某些註冊資訊,或一些簡單的演算法,通過反編譯,還是有可能得到這些資訊的,從而未能達到保護軟體的目的。反編譯器與混淆器之間的鬥爭是永無止盡的。所以從其
8、他角度去保護Java的源代碼是很有必要。2網路載入重要類在Java中提供了一個ClassLoader類,這個類可以讓我們使用類載入器將所需要的Java字節碼文件載入到Jvm中。我們通過重寫這個類,可以實現從網路通過url載入Java字節碼文件。這樣,我們就可以把一些重要的,隱秘的class放在網路伺服器上,通過密碼去檢驗是否有許可
此文档下载收益归作者所有