關於java加殼和代碼混淆

關於java加殼和代碼混淆


  在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每次調用時都能夠觸發某些代碼。憑藉這項奇特的技能,必定能夠完成更強壯的動態加載,加殼也就有了能夠。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章