贊助商連結
本文“專家和您一同談談java加殼的問題[Java程式設計]”是由七道奇為您精心收集,來源于網絡轉載,文章版權歸文章作者所有,本站不對其觀點以及内容做任何評價,請讀者自行判斷,以下是其具體内容:
在C世界,對代碼舉行加密,主要通過加殼的方法.所謂加殼,就是先将程式代碼加密,然後用特定的程式加載器,将代碼解密後加載進記憶體,這樣可以在避免代碼的反編譯,當然,有加殼工具,也有解殼工具,固然不能100%避免crack,但仍舊給代碼增添一層有力的保護.
但是在Java世界,保護代碼是件很艱難的事情,因為class檔案非通例範,極易反編譯,且反編譯後的代碼清楚可讀.常見的保護辦法是利用混合器,打亂class和function以及變量的名字,可以幹擾反編譯後的代碼的可讀性.固然簡單提高了代碼的安全性,但還僅僅相當于未加殼的C程式.
java可以加殼嗎?從前我認為這是不大概的,因為動态加載代碼這樣的記憶體級别的操作,java無法做到,除非利用JNI(Java Native Interface),調用自己編寫的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每次調用時都可以觸發某些代碼.借助這項奇異的技術,一定可以實作更強盛的動态加載,加殼也就有了大概.
讓我有些不爽的是,javassist又是小曰本成立的項目.
http://www.open-open.com/open54954.htm
Javassist是一個開源的解析、編輯和成立Java位元組碼的類庫.是由東京技術學院的數學和計算機科學 系的 Shigeru Chiba 所成立的.它已加入了開放源代碼JBoss 利用伺服器項目,通過利用Javassist對位元組碼操作為JBoss實作動态AOP架構.
以上是“專家和您一同談談java加殼的問題[Java程式設計]”的内容,如果你對以上該文章内容感興趣,你可以看看七道奇為您推薦以下文章: