[color=blue][size=xx-large]程序写好了,都要放到服务器上面,有的时候服务器并不是自己公司的,那些管理服务器的公司就可以看到我们部署在服务器上面的文件,JAVA呢,很郁闷,随便找一个反编汇的工具就可以看到源代码了,请问怎么保护好自己的程序啊[/size][/color]
如果说不清楚的请提出来,我会补充的,谢谢大家了
[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]
[color=indigo]一般常用混淆器啊 你去google搜索下 好多这方面的介绍 [/color]
代码混淆器
我觉得无所谓 呵呵 代码混淆器也是可以通过反编译回来的 只是变量函数的命名变成abcd之类的了 最好的方法就是代码没注视 代码写的乱 其实说真的 就好比让你看一个开源项目一样 多数人不会读源代码的 因为很难读懂 开源的项目还有详细的注视了
你得担心是没有必要的 你想一下 如果那个人读代码的能力很强会去管理服务器吗
如果你真的很担心这个的话 你还是别用java了 用.net开发的绝对没办法看到源代码。
这个东西也行 http://www.retrologic.com/
[color=blue]不想让别人看到源代码:
1、如果是代码风格的话,不可能。反编译之后,就看到风格了。
2、如果是业务规则的话,把核心的业务规则部分放在一个可以信任的服务器上。然后,对外提供服务。(自己也感觉挺别扭的。)
混淆,还是要加的。不过将核心业务代码,与其他部分,分开放置,也有一点作用吧?
小弟不懂,欢迎大家批评!
[/color]
将代码混淆一下差不多了,没人愿意去看不容易看懂的代码。
如果你是担心别人把你的应用可以直接复制过去用,那你自己随便搞点儿什么都可以,
例如把jar放在不同的地方,这样他将整个项目目录复制出去运行不起来。
代码混淆 很爽
ProGuard是目前比较好的免费代码混淆工具
不过混淆也不是非常简单的
比如,类名、方法名是否混淆?不混淆,人家很容易看出程序结构,也容易破解;混淆,所有基于反射的功能全部作废
另外,还会造成调试难度增加和性能问题
代理安全确实是Java代码的一个大问题。。。
代码混淆确实也可以起到一定的作用,但是如果那人真想弄出你的代码来也是很容易的。
以我的经验,要想让系统比较安全,Java文件不受侵犯,一般都是企业自己还钱构建服务器机房,然后有专门的管理人员,至于委托给那些服务商,我真的很不信任。
把代码所在的文件夹加密。
我感觉从技术讲,只要你加密了就一定有解密的方法。
这样说吧,你要是感觉自己的程序很重要完全可以买过固定IP然后自己发布程序啊。
要不就放心的交给服务器吧。找个信誉好的……
学习,学习。
个人觉得还是自己写个加密的软件,最安全!
支持代码混淆,不过我们的产品都自己用,所以不存在这个问题。
java是用来做大系统的,一般比较大型的系统都不可能放到别人的服务器上的,所以可以放心!下系统无所谓了,当做开源了,哈哈!
学到了很多知识啊。学到老活到老!
呵呵,有意思,相信比较大型的系统的代码都是放自己的服务器上,小型系统的话,放别人那也没有太多需要担心的~
最好最省事的保护的方法就是不给程序,只给 service。
加密起来又费劲又没意义,除非你很龌龊给人写了烂东西还不愿意人家改正你的 bug ……
java本来就是开源的,干嘛不让人家看见呢.不开源怎么有这么多人去研究呢。还是不用反编译吧!
www.52mn.net
数据在人家的机器上都不怕被弄走,何况一点程序……
有软件可以打包成.exe文件的,连TOMCAT数据哭一起打包了,无法反编译
proguard.不但可以混淆代码,还附带精简没有调用到得代码的功能。好东西 。
ClassLoader的那个,只要别人能得到你的ClassLoader,反编译,加句把Class文件都写出去的程序,就全废了。。。
关注……mark……
可以自己给代码做简单的处理,以前在大学的时候也尝试过,方法很垃圾,但是效果很好!! 最简单的方法是 弄一个excel表格,记录你的程序里面的方法,让后给方法重新命名,命名规则是 大小写O +数字零 随意组合。 然后编译使用! 一般这样的程序是没有人去研究的!!! 哈哈!! 要是怕麻烦可以做个小插件自动替换回来,方便修改!
以前听说,命名时,按命名规范,乱搞。人家反编译也没什么用。呵呵。不知道有用不。
java本来就是开源的,干嘛不让人家看见呢.不开源怎么有这么多人去研究呢。还是不用反编译吧!
看到你的帖子,回想起了当初我发帖求Java代码加密办法,当初公司的项目需要对代码进行加密,防止被反编译。虽然Java是开源的,但是商业目的还是要做这些的,我也使用过proguard这个开源社区的软件,配置很麻烦,没搞出来,后来使用了原来金蝶袁红岗先生写的jocky,加入到项目中,混淆后进行反编译,代码是汇编指令之类。
其实我们需要混淆加密的只是对业务部分。
希望jocky会对你有用,毕竟你现在跟我当初的处境一样,祝你能够成功混淆代码。
我觉得楼主多虑了,有那么多的开源产品都研究不过来呢,谁愿意去研究你们代码
首先,你这种思想是不对的,JAVA都是开源的,你写的代码也不见得好到哪里去,我要是有时间看了,说不定能帮你指点着改下。一个人的力量是有限的,要是当初java不开源,估计你也不会问这种问题了。
呵呵。我觉得还是不应该从技术角度来解决这个问题。
真的有钱的公司不会干这事情,他们会购买服务!
代码混淆器比较好吧