web-dev-qa-db-ja.com

WindowsでのC ++プログラムの簡単なライセンス実施テクニック

Window 10でソフトウェアを開発し、C++でVisual Studioを開発しています。ライセンス管理を実装することで、ソフトウェアの使用を一連のコンピュータに制限したいと思います。

私の考えは、CPUタイプ、ハードドライブシリアル番号、MACアドレスなどのシステムからいくつかの重要なパラメーターをクエリし、ハッシュを作成することです。次に、自分のコンピューターでハッシュを取得し、秘密キーを使用してそれを暗号化します。次に、ソフトウェアを使用すると、ハッシュが再生成され、システムで配布された公開キーを使用して、復号化された値と比較されます。

システムを一意に識別するための有効な(そしてアクセスが容易な)値のセットは何でしょうか?理想的には、OSの再フォーマットは許可するが、許可なしにコードを別のシステムにコピーすることは許可しないほど柔軟であることを望みます。

6
Steve

現実的にはありません。ユーザーのハードウェアに基づいてハッシュを作成した場合、ユーザーがハードドライブまたはCPUまたはネットワークカードをアップグレードするとき、または新しいコンピューターの購入を禁止するとき、ソフトウェアは機能しなくなります。ユーザーはそのことにかなり怒るでしょう。私がビジネスでこのようなソフトウェアに遭遇した場合、その開発者からの購入を停止します。私がホームユーザーで、このようなソフトウェアに遭遇した場合、私はそれを私がそれを購入した場所に戻し、二度とそれらから購入することはありません。

ソフトウェアの種類によっては、ドングルmightがより良い解決策です。その後、ユーザーはそれを好きなシステムに移動できますが、ドングルがインストールされているシステムでのみ実行できます。ただし、これがモバイルユーザー向けのソフトウェアである場合は、ドングルを携帯する必要がありません。また、ドングルを紛失したユーザーにも対処する必要があります。

別の解決策は、ユーザーが接続できるライセンスサーバーを用意することです。特定のユーザーのライセンスが使用中の場合、他のユーザーはその同じライセンスでソフトウェアを使用できません。これにより、ユーザーは作業の継続を心配することなく新しいコンピュータに移動できます。これが新しいコンピュータであることを認識し、これが発生した場合は古いコンピュータからの使用を禁止し、移動できる頻度について合理的なポリシーを設定することもできます。これには、稼働中のサーバーが必要であるという問題と、サーバーがダウンしたり会社が廃業したりした場合にユーザーが一時的に停滞する可能性があるという問題があります。

10
user1118321

クラウドベースのライセンス(オンラインライセンスのアクティベーションなど)のために、私は Keygen を構築しました。これは、まさにこの目的のためのソフトウェアライセンスおよび配布APIです。単一のマシンをライセンスに関連付けることを許可するライセンスポリシー、つまり「ノードロック」ポリシーを設定できます。また、次のようなリクエストを行うことで、マシンを現在のユーザーのライセンスに関連付けることができます。

curl -X POST 'https://api.keygen.sh/v1/accounts/example/machines' \
  -H 'Content-Type: application/vnd.api+json' \
  -H 'Accept: application/vnd.api+json' \
  -H 'Authorization: Bearer {TOKEN}' \
  -d '{
        "data": {
          "type": "machines",
          "attributes": {
            "fingerprint": "{MAC_ADDRESS_FINGERPRINT}",
            "platform": "Windows",
            "name": "Office Laptop"
          },
          "relationships": {
            "license": {
              "data": {
                "type": "licenses",
                "id": "4097d726-6cc5-4156-8575-3a96387e19b4"
              }
            }
          }
        }
      }'

マシンを「フィンガープリント」する最も簡単な方法は、MACアドレスを使用することです。その値が変更された場合(たとえば、新しいPCを購入した場合)、古いマシンの関連付けを削除して新しいマシンに置き換えるようユーザーに促すのは簡単です。機械。

これで、現在のマシンのフィンガープリントの範囲内でライセンスキーを検証できます。マシンのフィンガープリントが一致しない場合、検証は無効を返します。

0
ezekg