質問

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

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

少しの説明と裏話:

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

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

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

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

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

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

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

役に立ちましたか?

解決

あなたの要件に対応する固有IDを構築すべきであるように私には思えます。このIDはあなたのための重要な情報(ソフトウェアおよびハードウェア・コンポーネントに関するいくつかの情報)からのハッシュの(MD5のように、SHA1またはSHA512)として構成することができます。

キー( に署名したハッシュ値)が署名されていることあなたは、あなたがあなたの秘密鍵で、このようなハッシュに署名し、あなたのソフトウェアが起動時に確認した場合に安全な、よりあなたのソリューションを作ることができる(公開鍵のみである必要がありますお使いのソフトウェアと一緒にインストールされます)。一つは、別のオンラインサービスとソリューションのような種類を拡張することができますが、企業のクライアントはとても素敵ではないオンラインサービスを見つけることができます。

他のヒント

あなたが探していることは 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 /ライブラリ/ aa390423%28VS.85%29.aspxする

編集:あなたは、言語を指定していない(と私はC ++を仮定)が、これも同様に、(COMドライバで)Javaで行われ、任意の.NET言語することができます<。 / P>

多くのプログラムは、(のFlexLMに基づくもののような)ライセンスコードをビルドするために、ホストIDを使用します。 MATLABが作動するシステムに依存しない何を見てます:

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

また、この質問を見てます:

は、UNIXライクなシステムからの一意のIDを取得します

私も変更になりにくいことですが、ハードドライブのシリアル番号、多分にそのライセンスを基づかいくつかのプログラムを見たら。いくつかは、あなたのイーサネットカードのMACを使用することをお勧めしますが、それは再プログラムすることができます。

マック
MACに頼らないでください!これまで。それは永続的なものではありません。ユーザーは簡単に変更できます (30秒以内).

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top