0

この問題に対する私の最初の解決策は、OS/BIOS タイマーを使用し、暗号化された日付ファイルでチェックすることです (以下の疑似コードを参照)。

public void CheckFrequently()
{ 
   DateTime registeredDate = ReadFromBiosOrOSTimer(); 
   DateTime readEncryptedDate = ReadFromEncryptedFile(); 

   if(registeredDate >= readEncryptedDate) 
   { 
      ShowExpireDateForm();
      CloseProgram();
   }
}

この場合、ユーザーが OS/BIOS タイマーを簡単に変更でき、私の方法が機能しないことは明らかです。

私の質問は次のとおりです。

  1. ユーザーの OS/BIOS タイマー変更の問題を修正する方法はありますか?
  2. 有効期限を .Net プロジェクトに設定するより良い方法はありますか?
4

1 に答える 1

4

(私の答えは、ある種の「期限切れの」プログラムが必要だと仮定しています。)

究極の兄貴分としての答えは、信頼できる時刻を外部ソース (Web サービスなど) から取得することです。もちろん、接続性 (またはその欠如) により、これが不可能になる場合があります。

それ以外に、誰かが時計をごまかす場合、有効期限が近づいている可能性が高いことを知っており、現在の時刻のタイムスタンプを定期的にどこかに書き込みます。(システム コールを介して) 取得された時間が最後のタイムスタンプよりも短い場合に遭遇した場合、誰かが時計をだまそうとしている可能性があり、適切なエラー メッセージでセッション/インスタンスを無効にすることができます。「期限切れ」のケースを検出したら、スイッチを切り替えて実行を拒否するのは簡単です。

そうは言っても、このような対抗策は、十分に決定的な敵によって常に打ち負かされる可能性が最も高い.

于 2012-07-16T16:38:01.103 に答える