轉帖|其它|編輯:郝浩|2010-07-21 09:45:12.000|閱讀 734 次
概述:然而在Java世界,保護代碼是件很困難的事情,因為class文件非常規范,極易反編譯,且反編譯后的代碼清晰可讀。常見的保護辦法是使用混淆器,打亂class和function以及變量的名字,可以干擾反編譯后的代碼的可讀性。雖然簡單提高了代碼的安全性,但還僅僅相當于未加殼的C程序。最近接觸的一些知識告訴我——java也可以加殼!!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在C世界,對代碼進行加密,主要通過加殼的方式。所謂加殼,就是先將程序代碼加密,然后用特定的程序加載器,將代碼解密后加載進內存,這樣可以在防止代碼的反編譯,當然,有加殼工具,也有解殼工具,雖然不能100%防止crack,但仍然給代碼增加一層有力的保護。
然而在Java世界,保護代碼是件很困難的事情,因為class文件非常規范,極易反編譯,且反編譯后的代碼清晰可讀。常見的保護辦法是使用混淆器,打亂class和function以及變量的名字,可以干擾反編譯后的代碼的可讀性。雖然簡單提高了代碼的安全性,但還僅僅相當于未加殼的C程序。
java可以加殼嗎?以前我認為這是不可能的,因為動態加載代碼這樣的內存級別的操作,java無法做到,除非使用JNI(JavaNativeInterface),調用自己編寫的C代碼,在C代碼中實現動態加載java代碼。但是,C如何加載java代碼呢?這需要對JVM相當的了解。所以當時的我認為這是不可能的。
然而,最近接觸的一些知識告訴我——java也可以加殼!!
1.URLClassLoader。用URLClassLoader可以在java程序的運行期間,再將文件夾或者jar加入到classpath中,這個特性事實上就是動態加載。既然可以動態加載class的文件夾或者jar,為何不可以加載加密后的classes呢,將classes用自己的方式加密,在URLClassLoader調用時,使用自己的方式解密。不就是達到了加殼的目的了嗎?不過解密的代碼放在何處是個問題,就是說解殼器的代碼暴露在外,還是很危險的。
2.javassist。這實在是一個非常神奇的新技術,我是在學習Tapestry5時第一次遇到這個包的,他可以動態創建java字節碼,甚至可以修改你已經寫好的函數,比如你的getter和setter,只是簡單的讀取和賦值,你可以在Runtime用他修改你的getter和setter,讓你的getter和setter每次調用時都可以觸發某些代碼。借助這項神奇的技術,一定可以實現更強大的動態加載,加殼也就有了可能。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載