我遇到過以某種方式與儲存媒體綁定的許可證系統。雖然基於檔案系統上的 UUID 相當簡單,但我不認為情況是這樣(見下文)。此行為的典型範例如下:
- 每次啟動時,都會產生一個 id 檔案。
- 系統將檢查密鑰檔案中的許可證。如果 key 與 id 匹配,那麼一切都很好。
- 如果沒有密鑰,或密鑰與 ID 不符(例如從不同系統複製),則許可證無效。
我觀察到以下行為:
- 完全擦除CF卡並重新安裝會產生相同的id文件,因此不需要新的金鑰文件。
- 在不同的 CF 上使用相同的金鑰不起作用,因為它與新 id 檔案的內容不符。
這讓我得出結論,有一種方法可以以某種方式取得 CF 卡的唯一 ID。如何在 Linux 中實現這一目標?
附:我故意省略了產品本身的任何細節,因為我更想知道像這樣的系統如何建立 CF 卡的唯一 ID。
答案1
該卡將以唯讀方式記錄有大量資訊。
文章讀取內部SD卡訊息有這樣說:
內部 SD 卡訊息
有關 SD 卡的資訊編碼在其內部卡註冊表中。其中之一是卡片識別 (CID)暫存器,一個16位元組的代碼,包含唯一識別SD卡的信息,包括卡序號(PSN)、製造商ID號(MID)和製造日期(MDT)。 CID 暫存器在卡片製造時設置,設定後不能更改。 (根據SD卡規格,該資訊只能寫入一次,但是如果卡片不符合規格,則該資訊可能會被更改!)
如何從 SD 卡讀取 CID
讀取 CID 的一種方法是使用具有 SD 卡插槽的筆記型電腦。筆記型電腦中的讀卡機通常透過 PCI 匯流排(或 IDE 匯流排)直接連接。這不適用於 USB 讀卡機,因為檢索卡片資訊的命令會被讀卡機攔截且無法理解。並非所有具有內建卡片插槽的電腦都可以工作,某些內建讀卡機是透過 USB 匯流排連接的。
假設您擁有適當的硬件,可以使用多種方法來獲取卡片資訊。使用Linux,讀取內部SD卡資訊很簡單。插入卡片並查看下方
/sys/block/mmcblk0/device/
(此位置可能會根據您的裝置而變更)。您將看到幾個可用的屬性,其中包括 CID 暫存器及其內部資訊。
答案2
正如其他人評論的那樣,這可能與 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 )