转:java混淆工具proguard混淆器使用指南

原文:http://wenku.baidu.com/view/31ca66d380eb6294dd886cdd.html

地址 
http://proguard.sourceforge.net/
启动proguard 
解压下载的proguard4.4beta3,解压后进入lib文件把proguard.jar拷贝到自己新建的文件夹里如图: 

把需要混淆的jar和jar所依赖的包也放到新建的文件夹,都放在一起,如下图。 

写一个配置文件,名称自己定,举个简单配置文件例子,内容如下,其中-injars:是你需要混淆的jar,-outjars:是你混淆后输出的jar,-libraryjars:是你混淆的jar需要所依赖的jar包,后面的不在一一说明,可以参考proguard文档,配置文件可以参考文档来对自己混淆的需求来写配置文件。 

-injars TheFirstDesktopApplication1.jar

-outjars TheFirstDesktopApplication1_out.jar

-libraryjars <java.home>/lib/rt.jar

-libraryjars appframework-1.0.3.jar

-libraryjars swing-worker-1.1.jar

-printmapping proguard.map

-overloadaggressively

-defaultpackage ''

-allowaccessmodification

-dontoptimize 

 

-keep public class *

{

public protected *;

-keep public class org.**

-keep public class it.**

4. 把配置文件保存到你建的文件夹下,如下图。 

5.点击开始,运行,输入cmd,进入你建的文件夹下,如下图。 

6. 然后输入命令语句:java -jar proguard.Jar @a 然后回车,如下图。 

7. 混淆成功,在产生TheFirstDesktopApplication1_out.jar如下图。 

混淆器后,利用反编译器对没TheFirstDesktopApplication1_out.jar反编译,多了好多a,b,c之类的类文件,对反编译的java文件是很难编译的,即说明混淆成功。 

混淆器原理功能 
通常情况下,编译后的字节码仍然包含了大量的调试信息:源文件名,行号,字段名,方法名,参数名,变量名等等。这些信息使得它很容易被反编译和通过逆向工程获得完整的程序。例如像ProGuard这样的混淆器就能删除这些调试信息,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程,它进一步免费的精简代码。除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。