キーまたはライセンスを持つマシンでのみ実行されるデスクトップアプリケーションを作成したいと思います。これはどのように達成できますか?
これはあなたがそれをどれだけ安全にしたいかに完全に依存します...
Javaの問題は、逆コンパイルできることです。したがって、誰かが望む場合は、ソフトウェアをダウンロードして逆コンパイルしてから、設定したセキュリティをすべて削除することができます(その後必要に応じて再配布してください)。
これは、マスマーケットに行って販売することを計画している場合にのみ問題になりますが、実際には著作権侵害が問題になります。
これについて心配していない場合は、オンラインまたはオフラインで確認できます。
私が働いている会社はオンライン方式を使用しています。いくつかの手順があります。
編集:古い方法はメンテナンスの悪夢だったので、私はこれがどのように機能するかを変更しました。
name
company
email
key
。つまり、JDU8-AJS9-88DF-SASF-ASF9
よく見かけるようなもの。キーを生成するには、同じハッシュ関数を使用してから、ハッシュをサーバーにアップロードします。
オフラインにしたい場合は、私が推測するコードにハッシュを含めて、そこでチェックすることができます。
ただし、私は決してセキュリティの専門家ではなく、博士号の一部として会社のために開発しているだけであることを指摘しておく必要があります。これが私がやった方法です。
編集:この画像は役立つかもしれません:
2番目の編集:
プロセスに「オフライン検証」を含めました。これは実際にはオフライン検証ではなく、ユーザーをプロキシとして使用するだけです。ユーザーは別の方法でインターネットにアクセスする必要があります。
それはこのように動作します:
プログラムがオンラインで正常に検証されるたびに、ライセンスファイルにオフラインアクセスパスワードも追加されます。これは、一時的なインターネットのダウンタイムに対して堅牢であり、インターネットが1週間/月/どのくらいの時間ダウンした場合にのみ機能を停止します。のために働くように設定します。
オンラインでmacIPを搭載したマシンのライセンスを追跡できます。 Windowsでもレジストリに書き込むことができますが、APIはありませんが、それでも実行できます。レジストリを読むために以下のスニペットを見つけてください-
public static final String readRegistry(String location, String key){
try {
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec("reg query " +
'"'+ location + "\" /v " + key);
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String output = reader.getResult();
// Output has the following format:
// \n<Version information>\n\n<key>\t<registry type>\t<value>
if( ! output.contains("\t")){
return null;
}
// Parse out the value
String[] parsed = output.split("\t");
return parsed[parsed.length-1];
}
catch (Exception e) {
return null;
}
}
また、難読化する場合は、クラスレベルで proGuard を使用します。
それはあなたが持つことを計画している顧客の数と配布モードにも依存します。ライセンスサーバーを使用できますが、これには顧客のインターネット接続が必要です。 USBドングルを使用してライセンスを管理することもできます。
シンプルさ、労力、価格の間で妥協するために必要な完璧なシステムはありません。