この記事をもとに簡単なライセンスシステムを実装したいと考えています。
すべて正常に動作します。しかし、今は有効期限を追加したいのですが、方法がわかりません。
誰かが有効期限を追加する方法を説明できますか? 実装方法を正確に知ることは重要ではありませんが、その背後にあるアルゴリズムを理解する必要があります:)
この記事をもとに簡単なライセンスシステムを実装したいと考えています。
すべて正常に動作します。しかし、今は有効期限を追加したいのですが、方法がわかりません。
誰かが有効期限を追加する方法を説明できますか? 実装方法を正確に知ることは重要ではありませんが、その背後にあるアルゴリズムを理解する必要があります:)
最も便利な方法は、キーがまだ有効かどうかをチェックするサーバーを用意することです。そのため、偽造することは困難です。
ただし、(何らかの理由で)「オンライン」手法を使用したくない場合は、クライアントが使用するデータのどこかに有効期限を保存する必要があります。暗号化することはできますが、ソフトウェアには復号化キーが含まれている必要があります。ある時点で、アプリケーションは現在の日付と有効期限の日付を比較する必要があるためです。
他の人が言ったように、これを壊すのを難しくするために多くのエネルギーを費やすのは簡単ですが、遅かれ早かれ、「それは日付に入っているかどうか」という単純な比較に行き着き、そのコードは常に「if (!in_date) exit_with_message("License expired...");
ithを置き換えることで壊れていif (false) ...
ます。したがって、何百もの異なる場所でそのようなことを行い、コードを場所ごとに非常に異なって見えるようにしない限り [同じ関数を呼び出さないでください、同じメッセージを使用しないでください、同じ計算を使用しないでください。同じ結果を使用しないでください、など]
仕事で使用していたコンパイラを自宅のマシンで使用したいと思っていました [自宅から仕事関連のプロジェクトを行うため!]。「デモライセンス」が組み込まれていたので試すことができましたが、10000行のソースコードで停止しました。そこで、バイナリで 10000 のすべての出現を探しました。10000 を含む 3 つの場所があったと思います。1 つを変更し、10000 行を超えるテストサンプルをコンパイルしようとしましたが、それでも失敗しました。元に戻し、次のものを変更しました。コーダーはそれをもっと難しくすることができたかもしれませんが、私が十分に興味を持っていれば、それも修正できたと確信しています. これは、2 番目のライセンスを取得したり、自宅のマシンにライセンス サーバーをインストールしたりするよりもはるかに簡単でした。
また、このようなものを壊す人のほとんどは、お金のためではなく、挑戦のためにやっているということも覚えておいてください。そして、それが難しい場合、それはより大きな動機になります!
編集:
私はこのようなことをします:
1) 以下を含む license.dat を作成します。
2) ソフトウェアをロードするとき (またはソフトウェアで定期的に)、license.dat をロードします。
3) ライセンス ファイルのハッシュを確認します。
4) 現在の日付が有効期限よりも後かどうかを確認します。
5) チェックがすべてうまくいった場合は続行し、そうでない場合は関連するメッセージを表示して終了します。
正確に日付を保存/暗号化する方法については、私にはアドバイスできません。time_t
1 つのオプションは、 (秒単位の時間)に基づいて、適切に「スクランブル」された 64 ビット整数です。暗号化は、おそらく「タイムスタンプであることを明らかにしないでください」というケースのほうが多いでしょうが、ハッシュは実際にタイムスタンプを保護しているものです。