专家和您一同谈谈java加壳的问题[Java编程]
本文“专家和您一同谈谈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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |