【问题标题】:Java AOT + loading java classes dynamicallyJava AOT + 动态加载 java 类
【发布时间】:2009-05-18 20:54:32
【问题描述】:

我正在为我的应用程序构建一个插件系统。我已经读到任何人都可以对 .class 文件进行反编译,因此我不得不使用 Ahead-Of-Time 编译器(对吗?)。问题是我需要动态加载一些插件类。现在我正在将所有 .class 文件加载到一个文件夹中,并调用一个静态方法(我从不创建对象)作为插件系统。

当我的所有源代码都已完成 AOT 时,我可以加载这些类吗? 我应该以另一种方式解决问题吗? Java 是适合我的语言吗?

【问题讨论】:

    标签: java class compilation


    【解决方案1】:

    提前编译不是为了阻止人们反编译。我认为您应该为此目的使用混淆器。

    插件系统的动态加载类应该适用于混淆器和 AOT。

    【讨论】:

    • 谢谢,在部署我的应用程序之前,我会进一步研究混淆器。 Unill 然后我将忽略“问题”:)
    • 实际上,AOT 编译器确实会阻止反编译(通过将字节码转换为本地机器码)。请参阅 Excelsior JET 产品页面上的功能 #2:excelsior-usa.com/jet.html
    • 它们会阻止 Java 字节码的反编译,但有决心/有经验的攻击者可以对本机代码进行逆向工程。
    • 正确。毕竟,黑客从第一天开始就破解 C/C++ 程序。然而,与 Java 字节码相比,破解优化本机代码的时间/成本要高得多,即使它被混淆了。
    【解决方案2】:

    Tahit Akhtar 是对的。你需要一个混淆器。您必须对其进行配置,以免混淆程序用于动态加载和调用插件的类和方法的名称。也就是说,插件的公共 SPI 不能被混淆,但它们的实现可以。

    【讨论】:

      【解决方案3】:

      除非你的类包含一些真正绝密的功能,否则我会说放弃混淆......

      我正在为自己构建一个插件框架,并且我有相同的想法来阻止对插件代码的访问(因为所有敏感的东西都会在那里)但我放弃了,现在你能想到的所有东西都已经发布了在网络上,软件开发没有更多秘密了;)

      【讨论】:

      • 确实如此。正如我旁注的那样,我只会将我的应用程序部署给受信任的客户,所以没有什么可担心的。
      猜你喜欢
      • 2011-04-04
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2011-02-19
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多