【问题标题】:Obfuscate Class Names With Main Methods使用主要方法混淆类名
【发布时间】:2015-04-04 14:15:43
【问题描述】:

我正在使用ProGuard 来混淆可执行的.jar 文件。当我使用Procyon 反编译代码时,具有主要方法的类仍然具有其原始名称。这是由于

-keepclasseswithmembers public class * {
    public static void main(java.lang.String[]);
}

在默认配置中。

如果我删除它,ProGuard 将不会处理。有没有办法用主要方法混淆类名,还是有充分的理由反对它?

【问题讨论】:

    标签: java proguard


    【解决方案1】:

    如果你用 main 方法混淆了类名,你就不能再调用那个类来运行 jar。

    理论上,您可以修改 jar 中的 MANIFEST.MF 以引用混淆的类名,但我不确定这样做的好处,因为很清楚您此时调用的是什么。

    此外,您可以从不混淆main(String[]) 方法名称本身,否则java 根本无法找到并运行您的应用程序。这是反对它的一个很好的理由:)

    如果你想混淆类成员的rest,但保留类名和main方法本身,你可以这样做

    -keep public class mypackage.MyMain {
        public static void main(java.lang.String[]);
    }
    

    根据first example in proguard manual

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-04
      • 2014-01-13
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2012-05-04
      相关资源
      最近更新 更多