(java混淆器)java混淆器ProGuard的图形界面怎么配置参数?

Python08

(java混淆器)java混淆器ProGuard的图形界面怎么配置参数?,第1张

proguard 配置简介

参数: -include {filename}从给定的文件中读取配置参数 -basedirectory {directoryname}指定基础目录为以后相对的档案名称 -injars {class_path}指定要处理的应用程序jar,war,ear和目录 -outjars {class_path}指定处理完后要输出的jar,war,ear和目录的名称 -libraryjars {classpath}指定要处理的应用程序jar,war,ear和目录所需要的程序库文件 -dontskipnonpubliclibraryclasses指定不去忽略非公共的库类。 -dontskipnonpubliclibraryclassmembers指定不去忽略包可见的库类的成员。 保留选项 -keep {Modifier} {class_specification}保护指定的类文件和类的成员 -keepclassmembers {modifier} {class_specification}保护指定类的成员,如果此类受到保护他们会保护的更好 -keepclasseswithmembers {class_specification}保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。 -keepnames {class_specification}保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除) -keepclassmembernames {class_specification}保护指定的类的成员的名称(如果他们不会压缩步骤中删除) -keepclasseswithmembernames {class_specification}保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后) -printseeds {filename}列出类和类的成员-keep选项的清单,标准输出到给定的文件 压缩 -dontshrink不压缩输入的类文件 -printusage {filename} -whyareyoukeeping {class_specification} 优化 -dontoptimize不优化输入的类文件 -assumenosideeffects {class_specification}优化时假设指定的方法,没有任何副作用 -allowaccessmodification优化时允许访问并修改有修饰符的类和类的成员 混淆 -dontobfuscate不混淆输入的类文件 -printmapping {filename} -applymapping {filename}重用映射增加混淆 -obfuscationdictionary {filename}使用给定文件中的关键字作为要混淆方法的名称 -overloadaggressively混淆时应用侵入式重载 -useuniqueclassmembernames确定统一的混淆类的成员名称来增加混淆 -flattenpackagehierarchy {package_name}重新包装所有重命名的包并放在给定的单一包中 -repackageclass {package_name}重新包装所有重命名的类文件中放在给定的单一包中 -dontusemixedcaseclassnames混淆时不会产生形形色色的类名 -keepattributes {attribute_name,...}保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses. -renamesourcefileattribute {string}设置源文件中给定的字符串常量

混淆的工具很多,最常用的为retroguard.

Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java .class 文件可以非常轻易地被反编译。反编译工具有很多种,其中非常强大的一种是 jad。

为了避免出现这种情况,保护开发者的劳动,又有一种叫做 Java 混淆器的工具被开发出来。Java 混淆器的作用是对编译好的代码进行混淆,使得其无法被反编译或者反编译后的代码混乱难懂。Java 混淆器也有很多种,其中比较强大的一种是 RetroGuard(只说比较强大是因为我对其功效还是有些怀疑的)。

这里我介绍一下 RetroGuard 的使用方法。

将下载的 .tar.gz 或者 .zip 文件解压。有用的只有 retroguard.jar 一个文件,其它的是源代码和文档。

RetroGuard 是针对 jar 文件做混淆的。使用之前需要先配置一下。可以手工编辑配置文件,更好的方法是使用 RetroGuard 提供的 GUI 工具来生成配置文件。使用方法如下:

java -classpath retroguard.jarxxx.jaryyy.zip... RGgui

然后在 GUI 的 Wizard 中设置各个参数。上面的 -classpath 中应该列出要混淆的 jar 所依赖的所有的包。

RGgui 的详细使用方法可以看 RetroGuard 的文档 docs.html。

配置文件生成后,就可以运行 RetroGuard 进行混淆了。使用方法如下:

java -classpath xxx.jaryyy.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、在包中的所有调试信息(源文件名、行号、变量/参数信息等等)应全部删除。