langhua9527 2010-01-21 17:14 采纳率: 0%
浏览 317
已采纳

做JAVA开发怎么保护自己的程序

[color=blue][size=xx-large]程序写好了,都要放到服务器上面,有的时候服务器并不是自己公司的,那些管理服务器的公司就可以看到我们部署在服务器上面的文件,JAVA呢,很郁闷,随便找一个反编汇的工具就可以看到源代码了,请问怎么保护好自己的程序啊[/size][/color]
如果说不清楚的请提出来,我会补充的,谢谢大家了

  • 写回答

33条回答 默认 最新

  • mginobili 2010-01-21 17:18
    关注

    [quote]
    代码混淆器的使用

    我们做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 /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。这个方式还没应用起来,这几天个人正在研究,有什么新成果会在此做一些总结。
    [/quote]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(32条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?