0

アプリケーションのさまざまな場所から呼び出されるカスタム LicenseManager を使用して、Java アプリケーションを保護しようとしています。

ライセンスマネージャーは次のようになります

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 のコード ソースの場所と残りのアプリケーションのコード ソースが同じであることを確認できます。

これは理にかなっていますか?このアプローチで LicenseManager を「ハッキング」する方法はありますか?

編集:文字列の難読化とコードの IntegrityProtection にJava String ( https://jfxstore.com/stringer/ )も使用しています。これにより、アプリケーションの逆コンパイルが困難になります。

また、LicenseManager.verify() の呼び出しはアプリケーション全体 (何百もの場所!) に分散しているため、それらすべての場所を変更するのは大変な作業になります。

4

0 に答える 0