Java混淆器和java混淆编译

【虎.无名】一般的java混淆器,主要针对Java应用进行,如只保留main入口,直接针对java字节码的类库进行混淆。而我以前的工作主要是编写公共底层库,需要做一些源代码保护,最后用的是apusic提供的joc.jar混淆编译器,可直接针对源代码进行混淆编译。目前joc下载链接已经失效,而且不支持jdk1.5以上版本了。无奈只能重新对Java混淆器进行选型。Allatori 功能上似乎还行,就是不知道有没有有效期等其他问题。试验了proguard4.2/Allatori-2.1-Demo/yguard-2.2.0三种。Allatori效果最好,但是无法通过Android的编译,其次是ProGuard,可选项很多,但是很遗憾没有字符串加密功能。】

http://www.zxbc.cn/html/20070419/6497_4.html Java混淆编译器(转apusic.com)-java基础 作者:佚名 出处:中国自学编程网收集整理   发布日期:2007-04-19   
翻了几页Java虚拟机规范之后突发奇想,别的混淆器都是在编译好的byte code上做文章,能不能从源码直接编译成经过混淆的class文件呢?就这样花了一个多星期的时间写了一个Java混淆编译器(Java Obfuscator Compiler)。
A: 下载joc.jar (http://www.apusic.com/product/cpsy.htm),运行java -jar joc.jar就可以启动Java混淆编译器,joc的命令行参数和javac完全相同,但增加了一个新的参数-Xobfuscate,它的用法如下:
       -Xobfuscate:<level>
其中<level>指定混淆级别,可以是以下几种级别:
       -Xobfuscate:none        不进行混淆
       -Xobfuscate:private     对所有private访问级别的元素进行混淆
       -Xobfuscate:package     对所有private或package private元素进行混淆
       -Xobfuscate:protected   对所有private, package private, protected元素进行混淆
       -Xobfuscate:public      对所有的元素都进行混淆
       -Xobfuscate:all         相当于-Xobfuscate:public
如果使用-Xobfuscate不带级别参数,则相当于-Xobfuscate:package

http://bbs.pediy.com/showthread.php?t=37063 关于Java混淆器
Java混乱器现在有很多现成的东西,比如 JShrink , Zelix KlassMaster,JODE, DashO, 等等。
如果想要自己编写混乱器,那么你最先应该了解 Java Class 文件的规格,同时要深入了解字节代码的格式等等,而且要通过对面向对象的理解,来进行名城的混乱,等等
难,如果想交流关于混乱器的制作,请合伙联系 vhly@163.com
--
关于混乱器,我想Jshrink可以满足初步的需求,如果想要更高强度的,可以使用Zelix KlassMaster, DashO等,但是这两个还都需要花钱呢。下面列举混乱器的特性:(按强度排列
ProGuard 开源混乱器,支持脚本控制,可以使用GUI界面,重命名a-z A-Z等单个字符名称。字符串不加密,支持 J2ME
RetroGuard 开源混乱器,支持脚本控制,可以使用GUI界面,重命名a-z A-Z等单个字符名称。包括优化代码,字符串不加密 支持 J2ME
yGuard 同上两个,支持Ant自动构建
CodeShield 使用 Cnnn 来命名 如 C001 C002 等等 字符串不加密 GUI支持
JCloak 同上
JODE   支持 Obfuscator Decompiler Encryptor 支持混乱、反编译、加密
JShrink 使用Java Api对类进行重命名,支持字符串加密,支持 J2ME JProof 1stBarrier 未分析
Marvin 不支持GUI,支持脚本,字符串加密
Smokescreen 15天试用,支持字符串加密支持J2ME 保护时有漏洞,类文件原始字符串内容不删除***
DashO 商业使用,有强大的功能,优化,加密,支持广泛
Zelix KlassMaster 保护功能非常强大,支持字符串的复杂加密保护,字节代码混乱,堆栈混乱,支持异常重构
对于制作混乱器,首先要有一个功能完善的类文件分析库,然后通过各种算法。对于类文件的名称、成员、方法以及字节代码进行修改。
---
http://www.javaeye.com/news/2303 Java混淆器Allatori 2.1版本发布
Allatori属于第二代混淆器,具有全方位保护你的知识产权的能力。Allatori具有以下几种保护方式:命名混淆,流混淆调试信息混淆字符串编码,以及水印技术对于教育和非商业项目来说这个混淆器是免费的。 2.1版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期。这里是Allatori的官方网站(http://www.allatori.com/)和演示版的下载地址。【[INFO] Expiry date set to 一月 01, 2000?是不是demo版本就不可使用?】
---
http://www.javaeye.com/topic/772 Java 混淆器 RetroGuard 的使用方法
Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java .class 文件可以非常轻易地被反编译。反编译工具有很多种,其中非常强大的一种是 jad。 
为了避免出现这种情况,保护开发者的劳动,又有一种叫做 Java 混淆器的工具被开发出来。Java 混淆器的作用是对编译好的代码进行混淆,使得其无法被反编译或者反编译后的代码混乱难懂。Java 混淆器也有很多种,其中比较强大的一种是 RetroGuard(只说比较强大是因为我对其功效还是有些怀疑的)。

这里我介绍一下 RetroGuard 的使用方法。 
将下载的 .tar.gz 或者 .zip 文件解压。有用的只有 retroguard.jar 一个文件,其它的是源代码和文档。 
RetroGuard 是针对 jar 文件做混淆的。使用之前需要先配置一下。可以手工编辑配置文件,更好的方法是使用 RetroGuard 提供的 GUI 工具来生成配置文件。使用方法如下: 
java -classpath retroguard.jar;xxx.jar;yyy.zip;... RGgui 
然后在 GUI 的 Wizard 中设置各个参数。上面的 -classpath 中应该列出要混淆的 jar 所依赖的所有的包。 
RGgui 的详细使用方法可以看 RetroGuard 的文档 docs.html。 
配置文件生成后,就可以运行 RetroGuard 进行混淆了。使用方法如下: 
java -classpath xxx.jar;yyy.zip;... RetroGuard vvv-unofb.jar vvv.jar vvv.rgs vvv.log 
其中 vvv-unofb.jar 是未混淆的 jar 文件,vvv.jar 是混淆后生成的 jar 文件,vvv.rgs 是配置文件,vvv.log 是日志文件。缺省的配置文件名称为 script.rgs,缺省的日志文件名称为 retroguard.log。

在生成配置文件时需要注意的是: 
1、所有 public 的类名、方法名、变量名应该全部保留。因为所有设置为 public 的内容代表了整个包对外表现的接口。若某个内容不想为外界访问,就不应该设置为 public 的。 
2、若包中某个类使用了 java.lang.Class 或者 java.lang.ClassLoader 中的某个方法加载了一个类,若这个类在包外,不需要特别处理;若这个类在包内,则需要保留这个类的类名,否则混淆后会找不到这个类。 3、在包中的所有调试信息(源文件名、行号、变量/参数信息等等)应全部删除。

RetroGuard 还有一种打 patch 的所谓“增量式混淆”的使用方法。方法的要点是把上一次混淆生成的 log 文件作为下一次混淆的配置文件,这样就可以生成一个仅包含修改的 patch jar。在使用的时候把这个 path jar 放在 CLASSPATH 的上一次混淆 jar 之前。这种增量式混淆有两种方法: 
1、每个 patch jar 仅包含上一个版本混淆以来发生的变化,这样每个 patch jar 会很小,但是 CLASSPATH 会越来越长。 
2、每个 patch jar 包含上一个主要版本(2.0、3.0、4.0)混淆以来发生的变化,这样两个主要版本间的 patch jar 会越来越大。但是 CLASSPATH 只需做很小的变化。 
以上的两种方式我都不喜欢,感觉都不够优雅。 
---
http://www.javah.net/JAVArenzheng/20070720/4237.html 混淆器retroguard使用经验(原创)
后来我仔细想了原因,原来pulic static void main(String []) 已经被混淆成了a()方法了。一时我真不知改怎么解决。于是我开始查找retroguard使用说明,结果发现它还有更多用法,比如可以保留某些类不混淆。具体设置就是利用script.rgs文件。retroguard提供了一个编写script文件的图形界面
java RGgui
按照提示,很容易编写script文件,我设置了保留包含有main方法的那个类(即Main Class)不混淆。这样得到script.rgs文件后,在命令行输入:
java RetroGuard bandviewer1.01-unob.jar bandviewer1.01-ob.jar script.rgs
---
资源下载
proguard下载(http://proguard.sourceforge.net/ 官方网址无法下载)
http://internap.dl.sourceforge.net/sourceforge/proguard/proguard4.2.zip
http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/p/pr/proguard/proguard4.2.zip
Allatori 2.1版 http://www.allatori.com/downloads/Allatori-2.1-Demo.zip 【能对字符串加密,支持有效期处理
RetroGuard http://www.retrologic.com/downloads/retroguard-v2.3.1.zip

http://www.leesw.com/ 】smokescreen java obfuscator的website 
http://www.retrologic.com/retroguard-main.html 】RetroGuard java obfuscator的website 
http://www.codingart.com/codeshield.html 】CodeShield Java Bytecode Obfuscator 
http://www.meurrens.org/ip-Links/Java/CodeEngineering/jobe-doc.html 】JOBE 
http://www.preemptive.com/tools/ 】DashO(不是共享软件) 
http://www.condensity.com/ 】Condensity(不是共享软件,不过有5天试用版) 
http://www.force5.com/servlet/EvalDownload 】Jcloak 
http://www.jproof.com/downloads.html 】1stBarrier 
http://www.2lkit.com/products/2LKitObf/index.htm 】2lKit Obfuscator 
http://www.duckware.com/jobfuscate.html 】Jobfuscate 
http://www.meurrens.org/ip-Links/Java/CodeEngineering/zelixDoc/documentation/index.html 】Zelix 
http://www.drjava.de/obfuscator/ 】Marvin 
http://www.e-t.com/jshrink.html 】Jshrink

1stBarrier (JProof): http://www.jproof.com/products.html 2LKit Obfuscator: http://www.2lkit.com/products/2LKitObf/index.htm Condensity: http://www.condensity.com/ Dash-O (preEmptive): http://www.preemptive.com/ JCloak (Force 5): http://www.force5.com/ JOBE: http://www-personal.engin.umich.edu/java/unsupported/jobe/doc.html JObfuscator (Helseth): http://www.helseth.com/ Jshrink (Estridge Technology): http://www.e-t.com/jshrink.html RetroGuard (RetroLogic): http://www.retrologic.com/ SourceGuard (4thPass): http://www.4thpass.com/sourceguard/ Zelix KlassMaster: http://www.zelix.com/

Java开源混淆器比较(:ProGuard       JavaGuard       RetroGuard       yGuard       JODE)
ProGuard   是一个免费的   Java类文件的压缩,优化,混肴器。它删除没有用的类,字段,方法与属性。使字节码最大程度地优化,使用简短且无意义的名字来重命名类、字段和方法   。eclipse已经把Proguard集成在一起了。
JavaGuard (http://sourceforge.net/projects/javaguard/ )JavaGuard是一个通用的字节码模糊器,旨在容易地适合你的规则建造和测试进程,保证你的有价值的代码更安全,使其不易被反编译以及其它形式的反向处理。
RetroGuard是不错的Java混淆器,在JBuilder7的企业版中也带了这个混淆器。
yGuard 是RetroGuard的一个升级版本自带一个ANT任务 【虎.无名:混淆效果很不好,还不如ProGuard 4.2,而且后者有GUI配置界面,方便很多,可选项也很多。】
JODE包含一个Java混淆器与一个Java优化器。通过一个脚本文件可以控制Class文件的多种优化方式。它支持以下操作:1.能够把Class,method,field   和local   names   重命成简略的,模糊的或者特定名字的或者依照一个转换表. 2.除去debugging   信息. 3.除去"坏死的"代码(classes,   fields,   methods). 4.优化局部变量的分配。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值