随笔-16  评论-54  文章-0  trackbacks-0

    我们做java开发的一般都会遇到如何保护我们开发的代码问题。java语言由于是基于jvm上面,所以反编译class文件很很容易。假如我们做了一个web程序,并把这个web程序发布给客户。实际上,客户是很容易反编译出我们的源代码出来,包括所有的src文件和jsp文件等等。

   那么,如何保护我们的源代码,实际上,应该有几种方法可以使用:1、使用代码混淆器  2、重载应用服务器的classloader

   对于第一种方法来说,现在外面有很多开源工具可以使用,个人认为最好用的当属proguard莫属。proguard主要是易用易学。而且提供的功能也挺多。下面是个人一点使用心得

   (1)、从网上download proguard工具,proguard工具主要包含是几个jar文件和一些example,下载地址http://proguard.sourceforge.net/

   (2)、将里面的几个jar文件添加到类路径下面。当然,也可以不添加,但是下面在做混淆的时候,必须指定classpath,使在做混淆的过程中,能否访问该类

   (3)、编写一个配置文件,主要是混淆器的一些参数。比如,下面是一个例子
-injars       platform.jar
-outjars      platform_out.jar
-libraryjars  <java.home>/lib/rt.jar
-libraryjars ibatis-common-2.jar
-libraryjars ibatis-dao-2.jar
-libraryjars ibatis-sqlmap-2.jar
-libraryjars junit-3.8.1.jar
-libraryjars d:/j2ee.jar
-libraryjars struts.jar
-libraryjars commons-lang.jar
-libraryjars D:/0working/coreproject/byislib/jasperreports-0.6.1.jar
-libraryjars  commons-beanutils.jar

-printmapping proguard.map
-overloadaggressively
-defaultpackage ''
-allowaccessmodification
-dontoptimize

-keep public class *
{
 public protected *;
}

-keep public class org.**

-keep public class it.**

各个参数的含义参考proguard文档,该文档非常详细,上手很容易

OK,到此就完成了代码混淆,打开产生的jar包可以看到,多了好多a、b、c之类的类文件。说明混淆结果已经成功。将原jar删除、运行产生的混淆jar包,一切正常!

常见问题:使用过程中个人遇到了几个问题,开始也是找了很久才解决
   a. 内存溢出异常: 主要是proguard在做混淆的时候,吃了很多内存,因此,在运行混淆器的时候,可以增加内存,比如 java -mx512m .....
  b.栈溢出异常: 主要是proguard在做混淆的时候,会对一些代码进行优化,若遇到一些相对复杂的方法时,可能会抛出此异常。对付的办法是增加配置参数-dontoptimize,如上面的配置例子所示

对于第二种方法,重载服务器的classloader的原理是这样。 首先我们通过一定算法把class文件加密; 然后写我们自己的classloader,替换服务器的classloader。 这样,我们可以读取class文件,通过我们自己的算法反加密成正确的class,然后再次进行load。这个方式还没应用起来,这几天个人正在研究,有什么新成果会在此做一些总结。

posted on 2006-07-24 15:03 jspark 阅读(7899) 评论(6)  编辑  收藏

评论:
# re: 代码混淆器的使用 2006-07-24 22:40 | hama
老大,不要用ctrl+c,ctrl+v啊
总得加点自己的东西啊  回复  更多评论
  
# re: 代码混淆器的使用 2006-07-25 11:49 | jspark
呵呵,的确是自己原创的!

自己的一点工作心得   回复  更多评论
  
# re: 代码混淆器的使用 2008-03-24 20:35 | zzfly
混淆过程能不能讲的具体详细点,这几天做代码混淆,闷了好几天了,试了好几个混淆器都不行~~  回复  更多评论
  
# re: 代码混淆器的使用 2009-03-23 21:27 | sandy
我想问一下:
-injars platform.jar
-outjars platform_out.jar
这里面的platform.jar和platform_out.jar
都是自己编写的吗?分别应该包括是什么内容啊?

我刚接触proguard,还不明白 希望你能帮我解答一下。谢谢您  回复  更多评论
  
# re: 代码混淆器的使用[未登录] 2009-07-30 16:57 | 海风
兄台,我也在学习这个,就是用ant打包 不起作用,不知兄台可否教教我,不知道500园 可否? 包我用会 proguard 和tomcat 加密 ? 如果有兴趣联系:QQ:94784312 Email:gufengset@gmail.com  回复  更多评论
  
# re: 代码混淆器的使用 2010-03-03 16:42 | 黄××
前提eclipse环境:
我的插件结构:
plugin project,
feature project,
update project,

安装好第三方插件proguard obfuscate4e
我的混淆操作:
右击MANIFEST.MF-->PDE tools-->Create proguard obfuscation configulation 会自动生成两个文件然后feature 项目加一下版本号最后update 添加新版feature-->build 生成出来的jar包,有的有正常混淆,有的没有混淆。不懂得还有哪些设置,或者该注意些什么。

我的邮箱:dongfengpo25@163.com
javaeye的问题链接:
http://eclipsercpforum.group.javaeye.com/group/topic/17417#128517

有兴趣的朋友或者能解决此问题的朋友,欢迎一起讨论,谢谢!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: