17

私は現在、Java を使用してライセンス マネージャーに取り組んでいます。アプリケーションの開始日と終了日を指定して、ライセンス ユーザーに一定時間後にプログラムの再ライセンスを強制できるようにします。

しかし、私が直面している問題は、ライセンスの有効性を維持するために、誰でもシステムの日付と時刻をロールバックできることです。システムの日付と時刻が変更されたことをJavaで検出する方法はありますか。Network Time Protocol を試して、タイム サーバーから現在の日付と時刻を取得しました。

4

5 に答える 5

7

システムにライセンス ファイルを保存している可能性があります。a) ソフトウェアがライセンス ファイルに登録された時刻を含める、b) ファイルにデジタル署名する。

デジタル署名は、ライセンス ファイルが改ざんされたかどうかを示します。そうでない場合は、ソフトウェアが登録された時刻が表示されます。「現在の時刻」が登録された時刻よりも短い場合、ライセンス マネージャーは何かおかしいことが起こっていることを認識し、それに応じて応答できます (実行を拒否する、ライセンスを削除するなど)。

本当に日付範囲を強制したい場合は、各プログラム実行の現在の時刻を別のデジタル署名付きファイルに書き込み、時刻が常に単調に増加することを確認します。

また、アプリケーションが書き込みと読み取りを行うファイルに対して、最後に記録された時間を確認することもできます。このようなファイルの日付が最後に記録された時間よりも新しい場合は、何らかのライセンス ファイルのロールバックを示しています。

これらは、ユーザーが時計をいくらか戻すのを止めることはありませんが、組織的な方法でこれを行うのはかなり難しくなります.

于 2011-06-13T08:51:12.940 に答える
5

基本的にどうしようもないです。ユーザーは自分のコンピューター全体を「復元」して、ソフトウェアが特定の日付に実行されていると見なすことができます。

プログラムにタイムサーバーに時間を要求させることで、それを難し​​くすることができます。(それでも、誰かが本当に古いライセンスを使用したい場合は、そのようなトラフィックをローカル タイム サーバーに再ルーティングできます。)

関連する質問/回答:

于 2011-06-13T08:18:41.973 に答える
4

戦うシナリオがいくつかあります。

  1. 製品をインストールする前にシステム クロックを戻すユーザー、および
  2. インストール後にシステム クロックをロールバックするユーザー。

適用できるセキュリティにはいくつかのレベルがあり、これが重要な問題である場合は、それらすべてを使用することをお勧めします。

最も安全なのは、サーバーなどの外部参照に対して時間をチェックすることです。ネットワーク アクセスがない場合は、上記のローカル メソッドを使用して、ローカル (隠し) ファイルを使用してシステムの時間を追跡し、ロールバックを検出できます。そのようなファイルを複数の場所で複数使用し、相互にクロスチェックすることで、これを検出せずにロールバックすることを任意に難しくすることができます (また、常に定期的に外部サーバーへの接続を試行し続けることができます)。

于 2011-06-14T00:06:36.517 に答える
4

@aioobe が言ったように、アプリケーションは実行中の環境を制御できません。

できること (プログラムがユーザーにとって重要なデータも保持している場合) は、日付/時刻と時間の経過について知っていることを記録することです。たとえば、ロールバックしていないことを確認した後、一定の間隔で現在の時刻を保存できます (ロールバックが検出された場合、暗号化されたコードを含むメッセージを出力して、再ライセンスのために渡すことで、ロールバックが発生したことがわかります)。

プログラムが実行されるたびに増分される「カウンター」を保持することもでき、ライセンスの使用状況を推定する別の方法を提供します。

3 つすべてを使用すると、1 年後、ロールバック後、または x 時間のランタイム後にライセンスがなくなります。

于 2011-06-13T08:39:29.440 に答える
-2

ユーザーのセッション使用状況と到着時間を確認するメールを送信するようにアプリをコーディングします。メール監視を自動化!さもなければ、成功の奴隷になってしまうでしょう。

ホルヘ

于 2015-02-27T04:15:39.073 に答える