网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Java 数据对象(JDO)介绍(一).
.用 Java 保存位图文件(转).
.详解面向3G的传输网络.
.Java源码生成工具FireStorm/DAO .
.在Java中应用State设计模式.
.Java技巧:在对标准流进行重定向.
.JAVA程序员必读:基础篇(2.a)语言.
.Sun全球专业技术认证方案.
.初学者编程十大好习惯.
.java Excel API简介(翻译).
.Struts环境配置手顺(eclipse版).
.文件下载程序中文件名过长的问题.
.hibernate的hello word(国内高手.
.使用消息驱动Beans(1).
.基础知识:java中的一些常用词汇.
.如何获得一个字符的宽度和高度?.
.WEB开发中SpringAOP实际应用一例.
.SCJP认证套题解析之二.
.Java Socket编程(1).
.成为GUI的最好的朋友并揭开Liar .

专家和您一起谈谈java加壳的问题

发表日期:2008-1-5


  在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框架。


上一篇:利用 easymock 测试 jdbc 分析 人气:1025
下一篇:Windows平台的Ruby IDE点评 人气:825
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐