このようなものを実装する方法はたくさんありますが、それほど難しくないはずの方法を次に示します。
ブラックリストに登録されたライセンスキーのハッシュを含むファイルをホストする、どこかに公開されているWebサイトが必要です。このファイルの管理方法はユーザー次第ですが、ファイル自体に必要なのは1行あたり1つのハッシュのみです。
その後、定期的に、ソフトウェアはこのファイルのダウンロードを開始し(ほとんどのサーバー側言語がこれを提供します)、インストールされたライセンスキーのハッシュを検索します。見つかった場合、アプリケーションは、ブラックリストが削除されるまで死ぬ必要があることを知っています。
これには、MD5または同様のものと秘密があれば十分です。あなたはより手の込んだものを取得し、アプリケーションにあなたのサイトにリクエストを送信させ、その場でデータベースでそれを調べますが、ファイル(私はおそらくうまくいけば短いリストになると思いますが)は小さいままであり、最も簡単な方法。
難しい部分は、アプリケーションを停止したままにすることです。結局のところ、これを内部のどこかに保存する必要があります。つまり、明白すぎる場合は簡単に破壊される可能性があり、あまり明白ではない場合でも、適切なテーブルを復元することで簡単に元に戻すことができます/ファイル。したがって、2番目の保護方法もお勧めします。
このメソッドは、テーブルまたはファイルに「LIVE」または「DEAD」(または十分に類似したもの)を格納しますが、再びハッシュします。これは、ソルトとタイムスタンプでハッシュ化する必要があります。アプリケーションのページが実行されるたびに、ハッシュ値の「LIVE」+ salt + timestampでこの値を確認し、有効なタイムスタンプ範囲(たとえば、1日、2日、1週間、1か月など)を許可します。範囲が広いほど、パフォーマンスが低下することに注意してください。)。一致する(または一致するものが見つかる)限り、アプリは動作します。そうでない場合、特殊ファイルまたはテーブルの値が「LIVE」であっても、タイムスタンプがしきい値を超えてしまうため、バックアップから復元しようとすると、デッドのままになります。
要約すると(これは、何らかの種類のチェックサムや他の方法など、ライセンスキーの有効性をチェックするプログラム的な方法があることを前提としています)。
- CheckBlacklist
- ライセンスキーをソルト付きハッシュに変換する
- サーバーからブラックリストファイルをリクエストする
- 私のハッシュはファイルにありますか?
- YESの場合、「DEAD」のハッシュ+ salt +タイムスタンプを保存します(1日に切り捨てられ、時間+日+分を保存する必要はありません)
- NOの場合、「LIVE」+ソルト+タイムスタンプのハッシュを保存(切り捨て)
- IsKeyAlive
- 「LIVE」+ salt +切り捨てられたタイムスタンプからハッシュを作成
- DeadAliveハッシュを読み込む
- 彼らは同意しますか?
- はいの場合、私たちは生きています。TRUEを返します。
- NOの場合、死んでいる可能性がありますが、タイムスタンプウィンドウ内にいる可能性があります。
- タイムスタンプから1日を減算し、ハッシュを繰り返します。
- 今同意しますか?
- はい?TRUEを返す
- タイムスタンプに日を追加し、ハッシュを繰り返します
- 今同意しますか?
- はい?TRUEを返す
- この時点で、一致するタイムスタンプの範囲を超えています。FALSEを返します。(殺害アプリ)
さて、善は、これが失敗する可能性がある百万と一つの方法があることを知っています。考えられるすべての方法を検討し、信頼できるシステム(ブラックリストファイルをダウンロードできない場合にクライアントが正しいと想定するシステムを含む)を構築します。テスト、テスト、テストを行い、展開する前にさらにテストを行います。失敗した場合、クライアントの信頼が失われるためです。