【问题标题】:How to obfuscate an OSGi bundle with ProGuard?如何使用 ProGuard 混淆 OSGi 包?
【发布时间】:2010-10-14 07:45:16
【问题描述】:

我目前正在尝试使用 ProGuard 混淆我的 Eclipse RCP 应用程序。问题是它混淆了包名(My.Package.Class 类变成了 a.b.c 之类的东西),但将包名保留在 MANIFEST.MF 的 Export-Package 部分中。

这导致我的应用程序(实际上是一组 OSGi 捆绑包)无法运行,因为无法解析 MANIFEST.MFs 的 Export-Package 部分中指定的包名称。

有人用 ProGuard 混淆基于 OSGi 的 RCP 应用程序成功了吗?基本上,我看到了两个选择:要么完全关闭包名称混淆,要么混淆 MANIFEST.MF 的 Export-Package 部分,但我找不到实现其中任何一个的方法。 Proguard 似乎只混淆了 MANIFEST.MF 中的 Bundle-Activator 类名,跳过了所有其他部分。提前致谢!

【问题讨论】:

    标签: obfuscation osgi rcp proguard manifest.mf


    【解决方案1】:

    关闭包名混淆;我的意思是,您通过向全世界公布包名称来揭示哪些重要的商业价值?

    如果这确实是个问题,请将所有代码移至完全混淆的库中,并在非混淆插件中使用该库。

    也就是说,请考虑完全不要在混淆上浪费时间。这将花费您的时间和金钱,并且是否有任何好处值得怀疑。当你的竞争对手开始拆解你有价值的工作时,你将编写下一个版本。那何必呢?

    【讨论】:

    • 亚伦,谢谢你的回答!正如我所说,关闭包名称混淆会起作用,但我不知道如何使用 Proguard 实现这一点(以及是否可以实现)...... 混淆或不混淆 - 这不是选择.我们的客户想要这个:)
    • 在这种情况下,请使用我的第二个建议。
    • 谢谢!我遵循了您的建议,将所有模块合并为一个巨型包,从而消除了所有导致麻烦的模块间依赖关系。它奏效了。
    • 捆绑包在嵌入式平台上运行肯定会有一些好处。是的,OSGi 用于嵌入式世界。
    • 我对比我更有经验的用户给出如此糟糕的回答感到震惊。首先 - 混淆对于保护代码免受竞争对手的攻击很重要。第二点 - osgi 是一个非常重要的架构解决方案,具有很多后果和条件。所以很明显,使用混淆 + osgi 将需要特殊的方式,例如将名称密钥存储在每个包的特殊文件中。
    【解决方案2】:

    ProGuard 不支持内置的 OSGi 包混淆。 查看Proguard feature request #135 了解更多信息。

    【讨论】:

      【解决方案3】:

      对 OSGI 声明式服务使用以下保留选项

      #Keep all annotations.
      -keepattributes *Annotation*,Exceptions
      #Keep all interfaces. This is required to run OSGi services.
      -keep public interface *
      #Keep all Component classes
      -keep @org.osgi.service.component.annotations.Component class *
      #Kepp all Component classes member functions with OSGi specific annotations
      -keepclassmembers @org.osgi.service.component.annotations.Component class * {
         #Keep all methods with annotatios Reference.
         @org.osgi.service.component.annotations.Reference *;
         #Keep all methods with annotatios Activate.
         @org.osgi.service.component.annotations.Activate *;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 2012-06-24
        • 2021-08-10
        • 1970-01-01
        • 1970-01-01
        • 2016-04-14
        • 2017-10-29
        相关资源
        最近更新 更多