转: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这样的混淆器就能删除这些调试信息,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程,它进一步免费的精简代码。除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。