【问题标题】:Jar Protection other than obfuscation混淆以外的 Jar 保护
【发布时间】:2016-05-16 06:41:56
【问题描述】:

我有一个棘手的情况,我想保护客户端机器上可用的 jar 文件。

我有一个 java 项目,我正在使用 build.xml 生成 jar 文件,该文件可在客户端机器安装后使用。

现在我需要保护 jar 文件中可用的代码,如果所有客户端/s 将尝试反编译然后查看代码库。

当客户端尝试使用 UI 触发我的项目时,我有一个依赖项,我将在服务器中生成 java 文件,然后 在客户端机器上下载这个 java 文件,然后编译 java文件以获取 .class。下载到客户端的 java 文件将引用 jar 文件及其在 jar 中的功能

我担心如果我使用 proguard 或其他工具进行代码混淆,jar 中的所有函数名称都会更改并且下载的 java 文件将无法在客户端计算机中编译 strong> 由于此 java 文件与 jar 具有的函数调用不匹配。

我无法更改任何正在生成 java 文件并在运行时下载到客户端计算机的服务器端逻辑。

我想要任何我想在不破坏编译的情况下保护客户端机器上的 jar 文件的逻辑。主要是我不希望客户使用他机器中可用的 jar 来查看我的代码。

任何帮助都非常感谢,在此先感谢

【问题讨论】:

  • 您必须告诉混淆器保留您需要在 Java 文件中引用的符号名称。
  • 罐子只是花哨的 zip 文件。除了混淆之外,您无能为力。你应该假设客户端机器上的任何东西都不安全。

标签: java jar obfuscation decompiling java-security


【解决方案1】:

如果您使用 ProGuard,您可能对Processing callback methods 感兴趣:

如果您的应用程序、applet、servlet、库等包含回调 方法,从外部代码(本机代码, 脚本,...),你会想要保留它们,可能还有它们的类 也。它们只是您的代码的入口点,就像主 申请方法。如果它们没有被其他 -keep 保存 选项,类似于以下选项的内容将保留回调 类和方法:

-keep class mypackage.MyCallbackClass {
    void myCallbackMethod(java.lang.String); }

这将防止给定的类和方法被删除或重命名。

如果您只想从外部调用有限数量的方法和类,您可以在混淆之前自行重命名(缩小)它们;因此,仅在这些方法上添加您自己的混淆/缩小。然后在您的客户程序中使用这个缩小的名称。其余的由 ProGuard 来混淆。

【讨论】:

    猜你喜欢
    • 2011-11-11
    • 2016-07-28
    • 2018-11-03
    • 1970-01-01
    • 2021-11-28
    • 2012-03-27
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多