首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java搅混器-proguard的一些资料

2012-09-10 
java混淆器--proguard的一些资料?????? taskdef resourceproguard/ant/task.properties classpath${

java混淆器--proguard的一些资料

?????? <taskdef resource="proguard/ant/task.properties" classpath="${lib.dir}/proguard/proguard.jar" />

?????? <proguard configuration="${src.dir}/config.pro" />

</target>

你只需要制定lib.dir和src.dir属性就行了,同样的,这里也用了proguard配置文件,跟上面提到的是一样的。建议大家把ProGuardGUI当成一个生成配置文件的向导来使用,这样我们只需要修改配置文件而不用重新写一个配置文件。

如果你觉得ProGuard还不错,那就快把它加入你的项目里吧。





第三文档
这是一个不应该在开源社区出现的东西,但它的的确确是一个开源的项目,正像它的名字一样,Proguard,即Program Guard(程序卫士),它代表了开源的相对面--代码保护。
  作为JAVA这样的高级语言,编译的产物只是相对源代码的一个概念而已,字节码虽然不像源代码那样易懂,但绝不是不可能进行反编译的,针对JAVA的反编译产品很多,如CAVAJ,JAD等等。面对反编译产品的不断出现,将代码视为财富的那些开发者,又何去何从。
  混淆器正是在这种背景下应运而生,既然不可能完全地将拒绝反编译,那就让他们去反编译吧,只要反编译的结果别人不能直接使用不就行了吗?只要将代码搞混,让别人拿到了反编译的结果也看不懂,甚至不能编译。
  混淆的方法有很多,主要是以下几方面。
更名,将私有类,私有的成员,方法体内部的变量名改名,改成a,b,c等等,甚至1,2,3(代码中不允许不等于成果物中不允许)
改变逻辑的流向,如将if条件取反,if/else对换
等价代码,如将循环改成GOTO
无效代码,插入不可及的无用代码
  Proguard是一个非常优秀的开源的JAVA混淆器,可以在http://proguard.sourceforge.net/下载到,现在就让我一起来看一下Proguard.
  以3.2版为例,释放压缩包,我们看到,作为开源项目就有docs,lib,src,sample文件夹,在此就不一一介绍了。
  进入lib目录,内有proguard.jar,如果要自己有混淆器的外壳,或作ANT插件的话,会用到它,详细情况可以参考Proguard的文档。
  我们要看的是proguardgui.jar,这是Proguard的图形界面,我们使用JDK打开,注意是JDK,不是JRE。

点选Input/Output标签,选择要混淆的JAR包(注意是JAR包),输出JAR包,以及用到的所有类库。
点选Obfuscation标签,选中不需要混淆的类(要被反射的类绝对不能被混淆)
点选Process标签,Process按钮,等着看结果吧。
Proguard中还包括了代码优化和代码整理的功能,不是本文讨论范围,有兴趣的就自己研究吧)
只混淆方面的选项



使用此种方式,如果a-z使用过,会转向aa.class,如下图配置界面
1,4,6,9,10,11,12

源代码
package org.zwm.pub;

public class Bru {

/**
* @param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(showMsg());
}
public static String showMsg() {
return "You are my sun";
}
}
反编译后的代码
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)

package org.zwm.pub;

import java.io.PrintStream;

public class Bru
{

??? public Bru()
??? {
??? }

??? public static void main(String args[])
??? {
??????? System.out.println(PK0304140008000800fZ());
??? }

??? public static String PK0304140008000800fZ()
??? {
??????? return "You are my sun";
??? }
}




类名不变化,方法名混淆。 http://www.cnblogs.com/jacktu/archive/2008/10/20/1315200.html

热点排行