用主要方法混淆 Class 名称
Obfuscate Class Names With Main Methods
我正在使用 ProGuard
to obfuscate executable .jar
files. When I decompile the code using Procyon
具有主要方法的 classes 仍然具有它们的原始名称。这是由于
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
在默认配置中。
如果我删除它,ProGuard 将不会处理。有没有办法用主要方法混淆 class 名称,或者有充分的理由反对它?
如果您使用 main 方法混淆 class 名称,您将无法再将 class 调用到 运行 jar。
理论上,您可以修改 jar 中的 MANIFEST.MF
以引用混淆的 class 名称,但我不确定这样做的好处,因为您很清楚在那个时候打电话。
此外,您可以 从不 混淆 main(String[])
方法名称本身,或者 java 找不到并且 运行 您的应用程序位于全部。这是反对它的一个很好的理由:)
如果您想混淆 class 成员的 rest,但保留 classname 和 main 方法本身,您可以使用
-keep public class mypackage.MyMain {
public static void main(java.lang.String[]);
}
添加 allowobfuscation
以重命名您的 class 并添加 keepclassmembers
以保留 main
方法名称:
-keep,allowobfuscation public class * { public static void main(java.lang.String[]); }
-keepclassmembers public class * { public static void main(java.lang.String[]); }
并记得 -adaptresourcefilecontents
也使您的 JAR 可运行。
我正在使用 ProGuard
to obfuscate executable .jar
files. When I decompile the code using Procyon
具有主要方法的 classes 仍然具有它们的原始名称。这是由于
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
在默认配置中。
如果我删除它,ProGuard 将不会处理。有没有办法用主要方法混淆 class 名称,或者有充分的理由反对它?
如果您使用 main 方法混淆 class 名称,您将无法再将 class 调用到 运行 jar。
理论上,您可以修改 jar 中的 MANIFEST.MF
以引用混淆的 class 名称,但我不确定这样做的好处,因为您很清楚在那个时候打电话。
此外,您可以 从不 混淆 main(String[])
方法名称本身,或者 java 找不到并且 运行 您的应用程序位于全部。这是反对它的一个很好的理由:)
如果您想混淆 class 成员的 rest,但保留 classname 和 main 方法本身,您可以使用
-keep public class mypackage.MyMain {
public static void main(java.lang.String[]);
}
添加 allowobfuscation
以重命名您的 class 并添加 keepclassmembers
以保留 main
方法名称:
-keep,allowobfuscation public class * { public static void main(java.lang.String[]); }
-keepclassmembers public class * { public static void main(java.lang.String[]); }
并记得 -adaptresourcefilecontents
也使您的 JAR 可运行。