製品を作成し、そのライセンス キーも生成しましたが、30 日後にそのキーを要求したいと考えています。それに30日を追加して日付を保存するレジストリ値でそれを行いました。しかし、ユーザーがシステムの日付を 30 日前に変更すると、ロジックが機能しないことがわかりました。
システムの日付を確認せず、30 日間の試用期間のみを許可する試用版ソフトウェアの解決策はありますか?
製品を作成し、そのライセンス キーも生成しましたが、30 日後にそのキーを要求したいと考えています。それに30日を追加して日付を保存するレジストリ値でそれを行いました。しかし、ユーザーがシステムの日付を 30 日前に変更すると、ロジックが機能しないことがわかりました。
システムの日付を確認せず、30 日間の試用期間のみを許可する試用版ソフトウェアの解決策はありますか?
毎日の使用後にインクリメントする別のレジストリ キーを持つことができます。そうすれば、コンピュータの日付が変更されたとしても、このキーは、プログラムが 30 日以上実行されていることを示します。
さらに、この値を暗号化して、ユーザーが手動で変更しようとすると、プログラムは値を復号化して有効な数値を取得できなかったため、実行を拒否できます。
再インストールを回避するには、アプリの試用版で保存されたファイルに、アプリの特定のバージョンに固有の情報 (おそらく、インストール時のタイムスタンプ) を追加できます。アプリの試用版がファイルを開こうとすると、この署名がチェックされ、同じインスタンスで作成されていることが確認されます。それ以外の場合、ファイルを開くことは拒否されます。これにより、アプリを再インストールして使い続けることができなくなります。
結局のところ、ユーザーは自分のマシンを完全に制御しており、ユーザーがアプリを使用できるようにする前にこれらの詳細が保持されている Web サービスにアクセスする以外は、おそらくあなたがやりたいことを回避する方法を見つけることができます。 )。おそらく、この余分な問題を進んで乗り越えようとする人たちを止めようとしてそれほど多くのエネルギーを費やすべきではありませんが、その代わりに、その余分な時間/お金/エネルギーを、喜んで支払う人のためにアプリを改善することに費やすべきです.
簡単な解決策が 1 つあります。
レジストリの 2 つの変数を使用します。1. 日付 2. カウンタ
手順:
カウンターを設定する = 1
システム日付を日付にコピー
日付が現在の日付と異なるかどうかを毎回確認し、その日付をレジストリの日付にコピーし、カウンターを 1 増やします。日付が同じ場合は、何もしません。
試用期間の有効期限をカウンターで確認できるようになりました
これらのトリックを使用して、ユーザーがシステム日付を以前の日付に変更しても機能します。
レジストリの場合、日付とカウンターを暗号化して、技術者がロジックを認識できないようにすることができます!
乾杯...
追加した
このロジックは、ユーザーが毎日の日付を変更しない場合にのみ失敗します! 繰り返しますが、そのための解決策があります!
それが可能かどうかはわかりませんが、いつでも解決策を得ることができます:
ライセンス コンポーネントを使用できます。自分で作成することも ( LicenseManager クラスを参照)、ベンダーから購入することもできます (たとえば、CryptoLicensing )。
トライアルを最初に開始した日付からユーザーが日付を変更したかどうかを検出する方法が必要です。私が以前に使用したソリューションでは、「最終実行日」と「最初の実行日」を保存しており、クロックが「最終実行日」の 2 日以上に変更された場合は、トライアルを期限切れにします。また、日付を 2 日前に移動し続けることができないように、「実行日」カウンターも必要です (その部分について言及するのを忘れていました)。カウンターは実行ごとに増分されます。
もちろん、このようなソフトウェア ライセンス システムは、レジストリを適切に更新してアンインストールおよび再インストールすることで常に回避できます。ライセンス情報を難読化して複製することで、これを困難にできますが、最終的には発見されます (特に、難読化されていない .NET コードベースを使用します)。
システムの日付/時計を参照せずに 30 日間を処理するのは困難です。アプリが開始された日付のリストを常に保持し、前回と異なるたびに 1 を数えることができます。この方法では、ユーザーはアプリを起動するたびに同じ日付を設定する必要があります。
それ以外に、インターネットにアクセスできる場合は、既知の適切なタイム サーバーに現在の日付を問い合わせることができます。これは切断することで回避できますが、アプリを起動する前に常にインターネット接続を要求できます。
最後に、ハードウェア ドングルなどを介した外部のローカル タイム ソースですが、実際にトライアルを直接管理した方がよい極端な状況に陥っていると思います。
(30日間の試用ではなく)たとえば8時間の試用を許可することが許容される場合、システムDateTimeへの依存を取り除く1つの方法は、毎分起動されるアプリのタイマーを使用することです。これらを数えると、アプリが実行されるたびに、合計使用分数が累積されます。次に、このカウント値をレジストリなどのどこかに保存できます。
最後の実行日を保存し、システム日付がそれより前の場合はいつでもトライアルを期限切れにします。
唯一の安全な方法は、ホストしているサービスに対してアプリを検証することです。ただし、誰もあなたの接続コードをクラックしていないと仮定します;)
レジストリ値/分離ストレージ ファイル/保存された設定をクリアできる限り、試用版を再開できます。それについてできることはあまりありません。そのため、時間ベースの試用期間に加えて、機能を制限した試用版ソフトウェアを選択する人がいます。
それは単純なストア評価の終了日であり、毎日チェックします。日付操作による長時間の使用を避けるために、アプリケーションで時間カウントを維持します。増分してレジストリに書き込み続けます。評価の終了日と時間カウントの両方に対して、24 を超えないようにチェックを行う必要があります (多少の誤差がある場合は 30 になる場合があります)。
インターネット接続を保証できる場合は、オンライン スキームを実装できます (タイム サーバーまたは独自の認証サーバーを確認してください)。もちろん、これは別の依存関係をもたらします。インターネットがなくなると、ユーザーは作業できなくなります。
最終的には、サード パーティのライセンス ソリューションを購入することをお勧めします。それでも壊れないわけではありませんが、多くの時間と労力をかけずに自分でできることよりも堅牢になるでしょう。