`
wshyj18
  • 浏览: 162719 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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 楼 tobeornottobe 2013-04-11  
    最近注明的.NET混淆器Dotfuscator的开发商PreEmptive,在中国有个关于代码分析技术的交流会,有兴趣的可以关注一下~

    相关推荐

      JAVA混淆编译工具

      JAVA混淆编译工具总汇

      jock java 混淆反编译

      jock java 混淆反编译

      java混淆和反编译 jocky支持最新jdk

      java混淆和反编译 jocky支持最新jdk

      很强大的java代码混淆工具 Jocky

      大家熟知的Progaurd只能对class文件进行混淆,也就是必须先把java源码编译为class文件,然后再进行混淆 Jockey跟其他混淆工具不同的是:它是直接对编译过程做文章,也就是在把java文件编译为class文件的过程中对代码...

      jocky-Java混淆编译插件以及配置

      jocky-Java混淆编译插件以及配置。为了防止class文件被反编译 需要使用混淆编译技术 jocky就是这么一种反编译技术

      一款java2c加固混淆工具 java转c 交叉编译.dll.so

      MYJ2C将编译的Java方法转换为C语言。编译生成的文件后,生成的二进制文件通过Java Native Interface 重新链接到原始程序。在此过程结束时,包含原始方法的.class文件中不会保留原始方法的信息。 Before public ...

      java混淆和反编译套餐工具.zip

      可以先使用 proguard来混淆加密,然后再使用 jd-gui看看加密是否成功,正常情况下被混淆加密之后的jar包,无法再被反编译出来看到。 ===&gt; 注意不要有中文名称文件夹。

      java混淆器的作用

      用java写的代码 编译后成为.class文件 但是这个class文件...正常的,编译后供别人使用,当别人反编译class文件想查看源代码时发现的是被混淆后的代码,虽然这些混淆后的代码也可以分析出来但是很困难java混淆器的作用

      java 混淆工具,不可逆 jocky

      一般而言,现有的混淆器都是对编译好的 class文件进行混淆,这样就需要编译和混淆两个步骤。而事实上,并不是所有的符号都需要混淆。如果你开发的是一个类库,或者某些类需要动态装载, 那些公共API(或者说:那些被...

      对java jar包实现混淆加密

      java代码混淆器,可以混淆函数变量、类、方法名以实现代码加密,java jar 混淆 工具 反编译

      java混淆器 RetroGuard

      java混淆器 RetroGuard 免费提供源码 可运行jar文件 Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java .class 文件...

      Java防编译技术---proguard混淆器

      Java混淆技术,保护我们的源代码的安全性与技术保密性!

      java-js-混淆编译-反编译工具

      绝对可用,个人收藏整理的,和大家分享一下,使用很方便,主要有java代码的混淆编译,java编译后class文件的反编译,javascript代码的压缩、混淆,js是在线版的,很好用,可以自己定义混淆级别,混淆后仍可以使用,...

      Java混淆器Allatori-7.5@集成eclipse编译

      对外接口联调保护你的Java源码-Java混淆器Allatori-7.5@集成eclipse编译 Obfuscation with Setting Classpath Single Jar Packaging Introduction to Watermarks Using Stack Trace Utility Integration with Apache...

      安装至eclipse的java混淆器

      混淆器就不用多说了吧:为了防止源码被反编译.资源里包含安装包,安装配置,安装说明,使用说明.本资源下载后,按照里边的安装步骤一步步安装至eclipse即可.本人一直都在使用,混淆效果不错.

      java混淆器 Allatori-3.2

      Jocky:在生成class文件的过程中(即编译过程),通过修改编译器的代码生成过程,对编译器生成的中间代码进行混淆,最后生成class文件。典型的是jocky,但目前最新的jocky为1.0.3版本,不支持jdk1.6。 本人发布的这...

      java防反编译jar

      java jar包防反编译工具,混淆代码,可以对类名,String,变量,数字等进行混淆,

      利用混淆器ProGuard混淆java类,防止反编译

      NULL 博文链接:https://zochen.iteye.com/blog/682643

      JAVA源代码混淆器proguard4.8 + 安卓源码混淆配置文件(原创)

      proguard混淆器可以对多种平台的JAVA源代码进行混淆,增加反编译代价。proguard混淆器是开源的软件,压缩包内含全部最新版源代码。压缩包根目录下有我修改的安卓JAVA项目混淆配置文件,proguard自带的混淆配置文件在...

      Java+IDEA+Maven混淆打包

      IDEA中使用maven打jar包,然后使用工具混淆代码,亲测有效

    Global site tag (gtag.js) - Google Analytics