35

質問:次のように、ネットワーク化されたクライアントごとに一意の ID を考え出す必要があります。

  • クライアント ソフトウェアがターゲット コンピューターにインストールされると、それ (ID) は持続する必要があり、ソフトウェアが同じコンピューターと同じ OS インストールに再インストールされた場合でも持続する必要があります。
  • ハードウェア構成がほとんどの方法で変更された場合 (マザーボードの変更を除く)、変更しないでください。
  • クライアント ソフトウェアがインストールされたハード ドライブが、同一のハードウェア構成 (または可能な限り類似した構成) を持つ別のコンピューターに複製される場合、クライアント ソフトウェアはその変更を認識する必要があります。

少しの説明と裏話:

この質問は基本的に古くからの質問であり、ソフトウェアのコピー防止のトピックにも触れています。その分野で使用されているメカニズムのいくつかがここで言及されているためです。この時点で、コピー防止スキームを探しているわけではないことを明確にしておく必要があります。読んでください。:)

私は、ローカル ネットワークで動作するはずのクライアント サーバー ソフトウェアに取り組んでいます。私が解決しなければならない問題の 1 つは、ネットワーク内の一意の各クライアントを識別することです (それほど大きな問題ではありません)。これにより、特定の属性をすべての特定のクライアントに適用し、特定のクライアントの展開ライフタイム中にそれらの属性を保持および適用できます。クライアント。

解決策を探していたときに、次のことに気付きました。

  • Windows アクティベーション システムは、ハードウェアの変更に非常に敏感なある種の重いフィンガープリンティング メカニズムを使用します。
  • ディスク イメージング ソフトウェアは、すべてのボリューム ID (フォーマット時に各パーティションに結び付けられる) と、インストール プロセス中、最初の実行中、またはその他の方法で一意に生成されたカスタム ID に沿ってコピーします。ハードドライブ上にあるため、2 つを混同するのは非常に簡単です。

この種の問題に対する明らかな選択は、BIOS 識別子を見つけることです (ただし、これが同一のマザーボード モデルで一意であるかどうかは 100% 確実ではありません)。 、そしてそれは変更できません(少なくとも、ユーザー空間プログラムを使用することによってはできません)。それ以外はすべて、信頼性が低い (MAC の複製など) か、要求が高すぎる (構成の変更に敏感すぎるという点で) 失敗します。

私が尋ねたい副次的な質問は、私はそれを正しく、アーキテクチャ的に行っていますか? おそらく、私が達成しなければならないタスクのためのより良いツールがあるでしょう...

私が念頭に置いていた別のアプローチは、サーバーが接続されたクライアント ID の内部ルックアップ テーブルを維持するハンドシェイク メカニズムに似たものです (完全にソフトウェア ベースで、任意の時点で一意ではない場合もあります)。接続時に重複した ID が提供された場合、ハンドシェイク中に別の ID を考え出します。残念ながら、このアプローチは、有効期間中に属性を特定のクライアントに結び付けるという要件の 1 つにはうまく対応できません。

4

4 に答える 4

10

探しているのはWindows WMIです。マザーボード ID (同じタイプのマザーボード全体一意) または他の多くの種類の一意の識別子を取得し、UHID を生成するための巧妙なシード関数を考え出すことができます。おっと、頭字語を作っただけですか?

また、特にマザーボード (BIOS) ID を取得するために探している場合:

WMI class: Win32_BIOS
Namespace: \Root\Cimv2

ドキュメント: http://msdn.microsoft.com/en-us/library/aa394077(VS.85).aspx
サンプル コード: http://msdn.microsoft.com/en-us/library/aa390423%28VS.85 %29.aspx

編集:言語を指定しませんでした(C++を想定しました)が、これはJava(COMドライバーを使用)および任意の.NET言語でも実行できます。

于 2010-05-16T00:00:22.853 に答える
9

要件に対応する一意の ID を作成する必要があるように思えます。この ID は、ユーザーにとって重要な情報 (ソフトウェアおよびハードウェア コンポーネントに関する情報) からハッシュ(MD5、SHA1、SHA512 など)として構築できます。

秘密鍵でそのようなハッシュに署名し、開始時にソフトウェアがキー (署名付きハッシュ値) が署名されていることを確認すると、ソリューションをより安全にすることができます (ソフトウェアと共に公開鍵のみをインストールする必要があります)。この種のソリューションをさまざまなオンライン サービスで拡張することはできますが、法人顧客はオンライン サービスがあまり良くないことに気付く可能性があります。

于 2010-05-15T23:57:28.420 に答える
4

MAC MAC
に頼るな!これまで。永続的ではありません。ユーザーは簡単に変更できます ( 30 秒以内)。

ボリューム ID ボリューム ID
に依存しないでください。これまで。永続的ではありません。ユーザーは簡単に変更できます。ドライブをフォーマットするだけでも変わります。

WMI
WMI はサービスです。簡単に無効にすることができます。実際、私はそれを試してみましたが、多くのコンピューターで が無効になっているか壊れていることがわかりました (はい、かなり頻繁に壊れています)。

ライセンス サーバー
検証サーバーに接続すると、次の理由で多くの問題が発生する可能性があります。
* 顧客が常にインターネットに接続しているとは限りません。
* 顧客は、検証サーバーに接続できるようにするために、プログラムに入力する必要がある特別な設定 (ルーター/NAT/プロキシ/ゲートウェイ) で接続する場合があります。
* 一部のプログラムを除くすべてのプログラムをブロックするファイアウォールの背後にある可能性があります (私の場合)。場合によっては、ファイアウォールが管理されていないことがあります (ほとんどの企業ユーザーに有効です)。
*ライセンス サーバーをエミュレートするローカルの偽の Web サーバーにプログラムをリダイレクトするのは非常に簡単です。

ハードウェア データ
強力な保護が必要な場合は、ハードウェアに頼る必要があります。ユーザーが編集できないもの。Intel/AMD CPU で使用可能な CPU ID 命令や、ドライブの IDE インターフェイスに書き込まれたシリアル番号のようなもの。
CPU ID と HDD ID は永続的です。コンピュータをフォーマットして Windows を再インストールした後でも、それらは変更されません。

それは実行可能です。たとえば、このライブラリはコンピューターのハードウェア ID を読み取ります。コンパイルされたデモと sourcecode/ DLLがあります。免責事項: リンクは商用製品につながります (19 ユーロ/ロイヤリティなし)。

于 2011-01-07T13:51:32.340 に答える
4

多くのプログラムは、ライセンス コードを作成するために hostId を使用します (FlexLM に基づくプログラムなど)。オペレーティングシステムに応じてMatlabが何をするかを見てください:

http://www.mathworks.com/support/solutions/en/data/1-171PI/index.html

この質問も見てください:

UNIX ライクなシステムから一意の ID を取得する

いくつかのプログラムがハード ドライブのシリアル番号に基づいてライセンスを取得しているのを見たことがありますが、おそらくそれは変更される可能性が低いものです。イーサネット カードの MAC を使用することを提案する人もいますが、これは再プログラムできます。

于 2010-05-20T15:31:32.360 に答える