web-dev-qa-db-ja.com

ストレージデバイスの一意のID

どういうわけか記憶媒体に結びついているライセンスシステムに出くわしました。これをファイルシステムのUUIDに基づくことはかなり簡単ですが、これが当てはまるとは思いません(以下を参照)。この動作の典型的な例は次のとおりです。

  1. 起動するたびに、IDファイルが生成されます。
  2. システムはキーファイルでライセンスをチェックします。キーがIDと一致する場合は、すべて問題ありません。
  3. キーがない場合、またはキーがIDと一致しない場合(別のシステムからコピーされた場合など)、ライセンスは無効です。

次の動作を確認しました:

  • CFカードを完全に消去して再インストールすると、同じIDファイルが生成されるため、新しいキーファイルは必要ありません。
  • 新しいIDファイルの内容と一致しないため、別のCFで同じキーを使用しても機能しません。

これにより、CFカードの一意のIDを何らかの方法で取得する方法があると結論付けることができます。 Linuxでこれをどのように達成できますか?


PS:このようなシステムがCFカードの一意のIDをどのように構築できるのか、より一般的に疑問に思っているので、製品自体の詳細は意図的に省略しました。

4
Jarmund

カードには、読み取り専用の方法で登録された多くの情報が含まれます。

記事 内部SDカード情報の読み取り は次のように述べています:

内部SDカード情報

SDカードに関する情報は、内部カードレジストリにエンコードされています。これらの1つは、カードID(CID)レジスタ、次の情報を含む16バイトコードです。カードのシリアル番号(PSN)、製造元ID番号(MID)、製造日(MDT)など、SDカードを一意に識別します。 CIDレジスタは、カードの製造時に設定され、設定後に変更することはできません。 (SDカードの仕様によると、情報は一度だけ書き込まれますが、カードが仕様に準拠していない場合、この情報は変更される可能性があります!)

SDカードからCIDを読み取る方法

CIDを読み取る1つの方法は、SDカードスロットを備えたラップトップを使用することです。ラップトップのカードリーダーは通常、PCIバス(またはIDEバス)を介して直接接続されます。カード情報を取得するコマンドが傍受され、によって理解されないため、これはUSBカードリーダーを介して機能しません。カードリーダー:カードスロットが組み込まれているすべてのコンピューターが機能するわけではありません。一部の内部カードリーダーはUSBバスを介して接続されています。

適切なハードウェアがあると仮定すると、カード情報を取得するために使用できるいくつかの方法があります。 Linuxでは、内部SDカード情報の読み取りは簡単です。カードを挿入し、/sys/block/mmcblk0/device/の下を確認します(この場所はデバイスによって異なる場合があります)。 CIDレジスタとその中の情報を含む利用可能ないくつかの属性が表示されます。

2
harrymc

他の人がコメントしているように、それはCFカードが消去された方法に関連している可能性がありますが、ソフトウェアがカードのファームウェアに基づいてCFカードを識別している可能性が高いです-

この情報は通常、「udevinfo」を使用して読み取られます。たとえば、CFカードが/ dev/sdb udevinfo -a -p $(udevinfo -q path -n/dev/sdb)の場合、これには次の情報が含まれている可能性があります。カードを一意に識別します。

:Debianベースのディストリビューションでは_udevadm info_がudevinfoを置き換えます:

udevadm info -a -p $( udevadm info -q path -n /dev/sdb )

4
davidgo