然而在java世界保护代码是件很困难事情文件非常规范标准极易反编译且反编译后代码清晰可读常见保护办法是使用混淆器打乱和function以及变量名字可以干扰反编译后代码可读性虽然简单提高了代码安全性但还仅仅相当于未加壳C
java可以加壳吗?以前我认为这是不可能动态加载代码这样内存级别操作java无法做到除非使用JNI(Java Native Interface)自己编写C代码在C代码中实现动态加载java代码但是C如何加载java代码呢?这需要对JVM相当了解所以当时我认为这是不可能
然而最近接触些知识告诉我——java也可以加壳!!
1.URLClassLoader用URLClassLoader可以在java运行期间再将文件夹或者jar加入到path中这个特性事实上就是动态加载既然可以动态加载文件夹或者jar为何不可以加载加密后es呢将es用自己方式加密在URLClassLoader时使用自己方式解密不就是达到了加壳目了吗?不过解密代码放在何处是个问题就是说解壳器代码暴露在外还是很危险
2.javassist这实在是个非常神奇新技术我是在学习Tapestry5时第次遇到这个包他可以动态创建java字节码甚至可以修改你已经写好比如你getter和ter只是简单读取和赋值你可以在Runtime用他修改你getter和ter让你getter和ter每次时都可以触发某些代码借助这项神奇技术定可以实现更强大动态加载加壳也就有了可能
让我有些不爽是javassist又是小日本创建项目
http://www.open-open.com/open54954.htm
Javassist是个开源分析、编辑和创建Java字节码类库是由东京技术学院数学和计算机科学 系 Shigeru Chiba 所创建它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架
最新评论