专家和您一起谈谈java加壳的问题
2011-03-28 10:36
489 查看
在C世界,对代码进行加密,主要通过加壳的方式。所谓加壳,就是先将程序代码加密,然后用特定的程序加载器,将代码解密后加载进内存,这样可以在防止代码的反编译,当然,有加壳工具,也有解壳工具,虽然不能100%防止crack,但仍然给代码增加一层有力的保护。
然而在Java世界,保护代码是件很困难的事情,因为class文件非常规范,极易反编译,且反编译后的代码清晰可读。常见的保护办法是使用混淆器,打乱class和function以及变量的名字,可以干扰反编译后的代码的可读性。虽然简单提高了代码的安全性,但还仅仅相当于未加壳的C程序。
http://www.mscto.com
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每次调用时都可以触发某些代码。借助这项神奇的技术,一定可以实现更强大的动态加载,加壳也就有了可能。
让我有些不爽的是,javassist又是小日本创建的项目。
http://www.open-open.com/open54954.htm
Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京技术学院的数学和计算机科学系的ShigeruChiba所创建的。它已加入了开放源代码JBoss应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。
然而在Java世界,保护代码是件很困难的事情,因为class文件非常规范,极易反编译,且反编译后的代码清晰可读。常见的保护办法是使用混淆器,打乱class和function以及变量的名字,可以干扰反编译后的代码的可读性。虽然简单提高了代码的安全性,但还仅仅相当于未加壳的C程序。
http://www.mscto.com
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每次调用时都可以触发某些代码。借助这项神奇的技术,一定可以实现更强大的动态加载,加壳也就有了可能。
让我有些不爽的是,javassist又是小日本创建的项目。
http://www.open-open.com/open54954.htm
Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京技术学院的数学和计算机科学系的ShigeruChiba所创建的。它已加入了开放源代码JBoss应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。
相关文章推荐
- 大家一起谈谈java加壳的事情
- java 实现大狮子为A,小狮子为a,大老虎为B,小老虎为b,大狼为C,小狼为c 动物一起过河问题
- 问题集录--从初级java程序员到架构师,从小工到专家
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- ~这些年,我们一起学过的java~11~小学期程序设计之日历问题
- 谈谈在Java发送邮件中遇到的的问题
- 谈谈JAVA中的循环初始化问题
- 那些年一起踩过的坑 — java 自动装箱拆箱问题
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- DDD学习笔录——提炼问题域之与领域专家一起获得领域见解
- EventBus 和RxLifecycle 一起使用所引发的问题及解决办法 -java.lang.NoClassDefFoundError: android/os/PersistableBundle
- 谈谈JAVA中的循环初始化问题
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 谈谈Java开发中遇到的资源文件路径问题(二)
- 谈谈关于java中string2json & json2string的效率问题
- 微软专家与您一起谈谈测试人员职业规划&&技术专家与您一起交流LoadRunner使用经验。
- 谈谈Java开发中遇到的资源文件路径问题(一)
- 这几天在研究java中的内存分配问题,谈谈堆栈
- ~这些年,我们一起学过的java~12~小学期程序设计之生理周期问题