选择显示字体大小

两种免费的java obfuscator比较

java的bytecode很容易通过jad等反编译工具搞出源代码,  目前最有效的保护方法是obfuscate类名和方法名
注意: 用obfuscate防盗版是根本不可能, 连汇编这种东西都能被破解掉, 破解java代码简直就是小菜
用obfuscate主要是为了保护源代码的知识产权, 别人无法用反编译的源代码做事情.

本文从几个不同的方面比较了两种free的java obfuscator的优缺点..


两种free的java obfuscator: yguardproguard.

yguard:http://www.yworks.com/en/products_yguard_about.htm

proguard:http://proguard.sourceforge.net/


下面列出两者的不同和优缺点

1. 速度
  yguard的速度远远高于proguard, 主要区别在于proguard不管用没有用, 上来就扫描jre\lib\rt.jar和其他所有用到的library
  这个回合yguard胜出

2. 是否opensource以及遵循协议
    yguard: ywork公司的产品,免费使用, 但不是open source
    proguard是gpl(这里gpl只是指proguard本身, 对于obfuscate出来的jar没有限制), 可以从sourceforge.net下载源代码 但是作者并不希望别人参与,没有cvs,所以也无从知道作者的最新进展.  

    这个回合proguard胜出

3. 是否支持package name obfuscate
    yguard支持package name obfuscate
    proguard不支持

   这其实是很重要的一个特性, 一个好的java程序往往在一个package里只有10个以下class,根据package name很容易猜出各个class是干什么的, 比如:
   com.mycompany.license.a   com.mycompany.license.b  com.mycompany.license.c
   虽然obfuscate了class name,但是因为这个license只有3个class,很容易猜出来是干什么的
  但是如果你obfuscate成:
  com.mycompany.a.a  com.mycompany.a.b com.mycompany.a.c
  则大大增加了困难, 尤其大型software, 有几十个package的情况下,  会呈几何级数增加反编译的难度

  这个回合yguard胜出, 但是proguard已经准备在4.0里推出这个特性

4. 增量obfuscate
proguard支持增量obfuscate , yguard不支持.
也就是在obfuscate a.jar时, 记住所有的名字映射关系(比如myutil->a), 然后在obfuscate b.jar的时候, 使用那个映射关系(所有调用myutil改成调用a)

   假设a.jar里面有一个myutil被b.jar里面的main使用, 在没有incremental obfuscate的情况下, 你必须指定不obfuscate a.jar里的myutil.

   没有增量obfuscate 坏处是很显然的: 第一obfuscate的配置复杂了, 第二,暴露了某些class

    这个回合proguard胜出

5. 其它
其他不太重要的特性:
- proguard可以用一篇文章中的词(比如莎士比亚的剧本)作为变量名字, 呵呵
- proguard可以删除所有没有用到的class或者方法(叫做shrink)
- yguard能够obfuscate资源名称, 比如messages.properties->a.properties并且修改相应的resourcebundle类
- yguard可以replace指定文本文件里的class name,比如修改eclipse plugin.xml里的class名字
   我个人不太赞成这种做法

总结
对于小型java应用(只有一个package,一个jar文件), 两者区别很小, (但是小型的java应用值得obfuscate么?呵呵)
目前因为没有obfuscate package name这个重要特性, 所以目前我偏向用yguard, 但是yguard没有incremental obufscate, 真伤脑筋, 现在就等proguard4.0出来, 马上移植到proguard4.0上去


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons