保护Java应用程序 - 防止修补类

时间:2016-06-04 12:30:47

标签: java licensing obfuscation java-security

我们正在尝试使用从我们的应用程序中的不同位置调用的自定义LicenseManager来保护Java应用程序。

LicenseManager看起来像这样

public class LicenseManager {    
    public static void verify() {
        // throw Exception in case license is not valid
    }
}

当然是一个简单的方法来解决问题。应用程序将使用此应用程序替换LicenseManger并将其添加到类路径

public class LicenseManager {    
    public static void verify() {
        // NEVER throw an Exception!!!
    }
}

因此,为防止对LicenseManager进行修补,我们将以下代码添加到调用LicenseManager.verify()的应用程序的所有部分:

    if (!LicenseManager.class.getProtectionDomain().getCodeSource().getLocation().sameFile(this.getClass().getProtectionDomain().getCodeSource().getLocation())) {
        throw new RuntimeException("Invalid license");
    }

这基本上确保了LicenseManager的代码源位置和剩余应用程序的代码源是相同的。

这有意义吗?有没有办法静止" hack"使用这种方法的LicenseManager?

编辑: 我们还使用Java String(https://jfxstore.com/stringer/)进行字符串混淆和代码IntegrityProtection。这使得很难对应用程序进行反编译。

此外,对LicenseManager.verify()的调用遍布整个应用程序(数百个地方!),因此修改所有这些地方将需要做很多工作。

0 个答案:

没有答案