設備唯一標識方法(Unique Identifier):如何在 Windows 系統上獲取設備的唯一標識

来源:https://www.cnblogs.com/BoiledYakult/archive/2023/03/10/17203116.html
-Advertisement-
Play Games

唯一的標識一個設備是一個基本功能,可以擁有很多應用場景,比如軟體授權(如何保證你的軟體在授權後才能在特定機器上使用)、軟體 License,設備標識,設備身份識別等。 ...


原文地址 設備唯一標識方法(Unique Identifier):如何在 Windows 系統上獲取設備的唯一標識 zz

唯一的標識一個設備是一個基本功能,可以擁有很多應用場景,比如軟體授權(如何保證你的軟體在授權後才能在特定機器上使用)、軟體 License,設備標識,設備身份識別等。下麵列舉一下各種方法的優劣:

(1)網卡 MAC 地址

MAC 地址可能是最常用的標識方法,但是現在這種方法基本不可靠:一個電腦可能存在多個網卡,多個 MAC 地址,如典型的筆記本可能存在有線、無線、藍牙等多個 MAC 地址,隨著不同連接方式的改變,每次 MAC 地址也會改變。而且,當安裝有虛擬機時,MAC 地址會更多。MAC 地址另外一個更加致命的弱點是,MAC 地址很容易手動更改。因此,MAC 地址基本不推薦用作設備唯一 ID。

(2)CPU ID

在 Windows 系統中通過命令行運行 “wmic cpu get processorid” 就可以查看 CPU ID。

目前 CPU ID 也無法唯一標識設備,Intel 現在可能同一批次的 CPU ID 都一樣,不再提供唯一的 ID。而且經過實際測試,新購買的同一批次 PC 的 CPU ID 很可能一樣。這樣作為設備的唯一標識就會存在問題。

(3)硬碟序列號

在 Windows 系統中通過命令行運行 “wmic diskdrive get serialnumber” 可以查看。

硬碟序列號作為設備唯一 ID 存在的問題是,很多機器可能存在多塊硬碟,特別是伺服器,而且機器更換硬碟是很可能發生的事情,更換硬碟後設備 ID 也必須隨之改變,不然也會影響授權等應用。因此,很多授權軟體沒有考慮使用硬碟序列號。而且,不一定所有的電腦都能獲取到硬碟序列號。

(4)自定義演算法生成唯一 ID

可以使用自製的一個特定演算法(如 GUID、或者一定位數的隨機數)生成唯一的 ID,然後寫入到註冊表或者設備上,作為其唯一 ID。

這種方法不依賴任何硬體特征,唯一性也可以自己完全控制,不過純軟體的實現缺點是這個 ID 很容易偽造,也很容易擦除;而且很可能還需要線上驗證,後臺存儲所有 ID 的伺服器必須保持線上。

(5)Windows 的產品 ID(ProductId)

在 “控制面板 \ 系統和安全 \ 系統” 的最下麵就可以看到激活的 Windows 產品 ID 信息,另外通過註冊表 “HKEY_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion” 也可以看到看到 “ProductId” 欄位。

不過這個產品 ID 並不唯一,不同系統或者機器重覆的概率也比較大。虛擬機中克隆的系統,使用同一個鏡像安裝激活的系統,其產品 ID 就可能一模一樣。經過實測,筆者在兩台 Thinkpad 筆記本上發現其 ProductId 完全一樣。

(6)MachineGUID

Windows 安裝時會唯一生成一個 GUID,可以在註冊表 “HKEY_MACHINE\SOFTWARE\Microsoft\Cryptography” 中查看其 “MachineGuid” 欄位。

這個 ID 作為 Windows 系統設備的唯一標識不錯,不過值得註意的一點是,與硬體 ID 不一樣,這個 ID 在重裝 Windows 系統後應該不一樣了。這樣授權軟體在重裝系統後,可能就需要用戶重新購買授權。

(7)主板 smBIOS UUID

在 Windows 系統中通過命令行運行 “wmic csproduct get UUID” 可以查看。

主板 UUID 是很多授權方法和微軟官方都比較推崇的方法,即便重裝系統 UUID 應該也不會變(筆者沒有實測重裝,不過在一臺機器上安裝雙系統,獲取的主板 UUID 是一樣的,雙系統一個 windows 一個 Linux,Linux 下用 “dmidecode -s system-uuid” 命令可以獲取 UUID)。

但是這個方法也有缺陷,因為不是所有的廠商都提供一個 UUID,當這種情況發生時,wmic 會返回 “FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF”,即一個無效的 UUID。

(8)外置密碼設備提供唯一 ID

這種方法很多,比如 U 盾裡面可以提供唯一的密鑰標識,可信計算密碼晶元裡面的背書密鑰 EK 等都是唯一固定在安全硬體裡面的,而且通過良好的密碼演算法生成,唯一性和差異性都可以保證,安全性也更高。

這種方法需要在計算設備連接外置密碼晶元,增加經濟負擔和開發成本。而且,即便這種方法也存在欺騙攻擊和代理攻擊等破解方法。

當然還有很多其它方法,如可以獲取音效卡、CPU 模式和頻率、IDE 控制器、記憶體等其他信息。甚至,可以收集設備的軟硬體配置,通過統計方法和機器學習方法進行分類識別設備。學術上,還有各種密碼演算法,硬體不可克隆函數 PUF 等唯一標識的方法可以使用。

從軟體授權這個簡單的應用來看,購買外置密碼設備硬體太過昂貴,可以採用簡單的組合方法,推薦使用主板 UUID 作為主標識,當 UUID 返回無效的值時,可以進一步採用 CPU ID、BIOS 序列號、MachineGUID 等方式作為次標識,這基本可以解決問題。

其實設備唯一標識其實也是指紋的一種,想要使用標識或者指紋時,首先必須明確自己的真實意圖,是要標識一個用戶(這樣可以使用身份證、指紋、手機驗證等方式),還是要標識一個設備(本文列舉的各種設備 ID)。根據自己的真實意圖才能進一步思考具體使用的方式,不忘初衷。

不過,不管使用怎樣的硬體信息或者牛氣的演算法來進行用戶或者設備的標識,還是一句老話 “道高一尺,魔高一丈”,都是可以被攻破的,即便你的標識偽造不了、克隆不了,攻擊者也可以使用其它攻擊方式,如逆向你的驗證 check 代碼,然後將其修改掉,使其 check 失靈。因此,無論設備標識或者用戶標識,很多情況下可能只防君子、不防小人,甚至悲觀者認為這些手段都是防止合法用戶的,影響用戶使用的方便性,大可以取消掉。筆者認為,沒有必要這麼悲觀,知識產權等信息是尊敬人的價值和勞動的表現,即便不能完全防止小人,我們也要通過這些方法將一般的小人排除在技術門檻之外,並儘量增加高級小人破解時的代價。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在 C# 使用 Solr 搜索 sitecore 的配置信息文件可直接丟進 <Instance>\App_Config 下,sitecore 會自動檢測配置文件更新並載入到記憶體中。 通常情況下,配置信息文件是放在 <Instance>\App_Config\Include\<Project> 下,< ...
  • 1. EF Core簡介Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的常用 Entity Framework 數據訪問技術。 EF Core 可用作對象關係映射程式 (O/RM),這可以實現以下兩點: 使 .NET 開發人員能夠使用 .NET 對象處理資料庫 ...
  • 如果熟悉 GIthub 我們經常可以在一些開源項目的 PR 上看到會配置測試的驗證以及覆蓋率的報告,並且可以強制覆蓋率不低於設定的值才可以進行 Merge PR。 1.測試 創建一個 xUnit 單元測試項目。 Class /// <summary> /// Represents a class w ...
  • 在合宙上買了一片1.54寸的墨水屏一直在吃灰, 這次趁點亮的機會把AIR32F103上的驅動示例給做了. 將微雪的墨水屏驅動移植到 AIR32F103 上, 代碼已經提交到 GitHub 倉庫, 如果需要驅動其它型號的墨水屏, 編輯 EPD_Config.h 將 #define EPD_1IN54 ... ...
  • LVGL是嵌入式設備中常用的圖形顯示庫, 這篇基於 256K Flash 的 AIR32F103CCT6 和 SPI介面的 ST7735 128x160 LCD屏, 介紹 LVGL 在無系統環境和FreeRTO環境, 帶DMA和不帶DMA方式的集成步驟 ...
  • 準備工作:樹莓派4B一個,記憶體不小於16G的TF卡一個,樹莓派的充電線一個,筆記本電腦一臺,網線一根,讀卡器一個 #1、格式化TF卡 建議選擇16G以上的TF卡,下載格式化工具 選擇要格式化的TF所在的分區 滑鼠右鍵點擊箭頭所指的區域選擇刪除分區,將boot和rootfs兩個分區都刪除乾凈,點擊保存 ...
  • 編譯安裝 HAProxy 新版 LTS 版本,編譯安裝 Keepalived 開啟HAProxy多線程,線程數與CPU核心數保持一致,並綁定CPU核心 因業務較多避免配置文件誤操作,需要按每業務一個配置文件並統一保存至/etc/haproxy/conf.d目錄中 基於ACL實現單IP多功能變數名稱負載功能, ...
  • 一、 activebackup - 主備模式 一個網卡處於活動狀態,另一個處於備份狀態,所有流量都在主鏈路上處理,當活動網卡down掉時,啟用備份網卡。 實驗環境VMware虛擬機; 這裡我要實現雙網卡綁定主備模式,並且當主卡故障恢復後,活動埠自動切回主卡(調整prio優先順序實現),如果不加優先順序 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...