ソフトウェアのライセンス供与の問題はまだ解決されていません。少なくとも、ユーザーに不便を与えず、主要なインフラストラクチャに投資せずに安全にライセンスを供与することは解決されていません。
ライセンス ステータスを保存する場所/メカニズムはほとんど関係ありません。レジストリはテキスト ファイルよりも安全ではありません。コンテンツにアクセスするのに数秒かかり、レジストリのリモート バックウォーターにエントリを「隠す」ことはできません。あまり役に立ちません。
おそらく、あなたのソフトウェアにはある種の持続性があります(データベース?ファイルシステム?)。同じ永続化メカニズムを使用して、登録ステータスを保存できます。
もちろん、ソフトウェアが読み取り/書き込みできるものはすべて、ソフトウェアへの不正アクセスを試みる人々によってアクセスされる可能性があります。したがって、レコードを暗号化できます。次に、その暗号化メカニズムのキーを管理するという問題があります。現時点では、これに対する堅牢なソリューションはありません。
そのため、インターネット上に「ライセンス サーバー」が存在する可能性があります。ソフトウェアがマシンの一意の識別子(MAC アドレスなど) を読み取り、それをライセンス サーバーに送信して、サーバーにライセンス ステータスを返させる場合があります。繰り返しますが、これを回避するのは非常に簡単であり、ユーザーがソフトウェアを使用するためにオンラインである必要があります。
あなたのソフトウェアがユーザーにとって少しでも魅力的であれば、ハッカーはライセンス キーの保護を数日で破り、詳細な手順をインターネットに投稿します。Apple は Iphone/Ipad のソフトウェアを保護するために多大な努力を払っていますが、脱獄アプリはそれらのロックを解除します。
私の意見では、あなたのソフトウェアが数千万ドルの収益に値するものでない限り、ユーザーの生活をできるだけ楽にし、セキュリティ面についてあまり心配しないでください - 市販のものを使用してください (@bunting が推奨するような) 、またはテキストファイルで解決します。
具体的には、次のことを行います。
- アプリケーションの起動時に有効なライセンス ファイルの存在を確認する
- ライセンス ファイルが存在しない場合は、ユーザーにライセンス キーの入力を求める
- そのキーをライセンスキーと比較してください
- アプリディレクトリのファイルシステムに「有効な」ファイルを書き込みます。または、既存の構成ファイルを変更します。
これは簡単に破ることができます。一歩先を行くことができますように。
まず、Java アプリは逆コンパイルしやすく、攻撃者は「ライセンス」定数を簡単に読み取ることができます。これを困難にするには、難読化ツールを使用する必要があります (不可能ではありません)。
次に、ローカル ライセンス データを暗号化できます。これも、完全にカジュアルなハッカーにとっては難しくなります。暗号化方式にローカル データを含めることで、ハッカーがアプリケーションを有効なライセンス キーで再配布できないようにすることができます (たとえば、ライセンス キーにマシンの MAC アドレスを掛けることにより)。
どちらの場合も、ライセンスをアプリに「配線」しています。ハッカーがアプリケーションのライセンス キーを投稿する掲示板があり、新しいキーを使用してアプリの新しいバージョンを発行する以外に対応することはできません。