Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17082
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 72
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-04 15:52
文章分类
文章存档

2014年(7)

我的朋友

分类: Web开发

2014-08-16 17:41:30


  在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每次调用时都能够触发某些代码。凭借这项奇特的技能,必定能够完成更强壮的动态加载,加壳也就有了能够。


阅读(806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~