2017-04-14 231 views
-1

我試圖從我的PC上獲取硬盤和主板序列號。它適用於Windows 7及以上版本從PC獲取唯一的硬件ID

但是,CMD中的相同代碼不適用於Windows XP。它顯示OEM來填充或返回無

wmic diskdrive get name,serialnumber,model // This is cmd to get serial num 

在Windows XP中返回錯誤的SERIALNUMBER

wmic baseboard get product,Manufacturer,version,serialnumber // This is cmd to get MotherBoard serialnumber 

在Windows XP和Win 8也回報在SERIALNUMBER錯誤,如「要填寫通過OEM

我正在尋找最佳個人電腦唯一身份證,它可以返回任何操作系統的ID或序列號,應該是唯一的..

請幫幫我

謝謝。

+0

你需要什麼?這是用於許可功能,還是僅僅是一個唯一的客戶端ID?是否需要在操作系統升級或擦除時保持一致?它需要防篡改嗎? –

回答

2

我發現了一個小項目在網上,他們得到:

  • 處理器ID
  • 主板ID
  • 卷序列號
  • MAC地址ID

然後,他們散列它通過MD5但它現在被折舊,所以最好的辦法是做同樣的事情,並散列它通過^ h SHA512

首先,您需要導入和參考,如果沒有自動完成:

Imports System.Management 
Imports System.Security.Cryptography 
Imports System.Text 

然後函數獲得HWID(硬件ID)

Public Function Get_HWID() As String 
    'Information Handler 
    Dim hw As New clsComputerInfo 
    'Decalre variables 
    Dim hdd, cpu, mb, mac As String 
    'Get all the values 
    cpu = hw.GetProcessorId() 
    hdd = hw.GetVolumeSerial("C") 
    mb = hw.GetMotherBoardID() 
    mac = hw.GetMACAddress() 
    'Generate the hash 
    Dim hwid As String = GenerateSHA512String(cpu & hdd & mb & mac) 
    Return hwid 
End Function 

函數生成散列:

Public Shared Function GenerateSHA512String(ByVal inputString) As String 
    Dim sha512 As SHA512 = SHA512Managed.Create() 
    Dim bytes As Byte() = Encoding.UTF8.GetBytes(inputString) 
    Dim hash As Byte() = sha512.ComputeHash(bytes) 
    Dim stringBuilder As New StringBuilder() 
    For i As Integer = 0 To hash.Length - 1 
     stringBuilder.Append(hash(i).ToString("X2")) 
    Next 
    Return stringBuilder.ToString() 
End Function 

最後Class獲取信息息:

Public Class clsComputerInfo 
    Friend Function GetProcessorId() As String 
     Dim strProcessorId As String = String.Empty 
     Dim query As New SelectQuery("Win32_processor") 
     Dim search As New ManagementObjectSearcher(query) 
     Dim info As ManagementObject 
     For Each info In search.Get() 
      strProcessorId = info("processorId").ToString() 
     Next 
     Return strProcessorId 
    End Function 
    Friend Function GetMACAddress() As String 
     Dim mc As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration") 
     Dim moc As ManagementObjectCollection = mc.GetInstances() 
     Dim MACAddress As String = String.Empty 
     For Each mo As ManagementObject In moc 
      If (MACAddress.Equals(String.Empty)) Then 
       If CBool(mo("IPEnabled")) Then MACAddress = mo("MacAddress").ToString() 
       mo.Dispose() 
      End If 
      MACAddress = MACAddress.Replace(":", String.Empty) 
     Next 
     Return MACAddress 
    End Function 
    Friend Function GetVolumeSerial(Optional ByVal strDriveLetter As String = "C") As String 
     Dim disk As ManagementObject = New ManagementObject(String.Format("win32_logicaldisk.deviceid=""{0}:""", strDriveLetter)) 
     disk.Get() 
     Return disk("VolumeSerialNumber").ToString() 
    End Function 
    Friend Function GetMotherBoardID() As String 
     Dim strMotherBoardID As String = String.Empty 
     Dim query As New SelectQuery("Win32_BaseBoard") 
     Dim search As New ManagementObjectSearcher(query) 
     Dim info As ManagementObject 
     For Each info In search.Get() 
      strMotherBoardID = info("SerialNumber").ToString() 
     Next 
     Return strMotherBoardID 
    End Function 
End Class 

我回顧this project

希望的代碼,這可以幫助你,請記得添加引用管理

更多信息:

最常見的ID用於HWID的是:CPU IDMAC addre基於SS的硬件ID和硬盤序列號

HWID不建議作爲一個發牌系統,因爲它是不準確的和不實際的,如果用戶改變計算機或格式建議它更使用的驅動器等證書系統或更復雜的認證。

+0

試過你的代碼...處理器ID是在一些PC上是常見的.....所以它失敗了,對於MAC地址PC需要網絡適配器,所以它失敗了,當我試圖讓主板serialnumber ........它不適用於win 8 –

+0

您是否添加了引用** ....並且您不明白我們將所有值合併爲一個ID,因爲沒有計算機將這四個值相加在一起... 。我在Windows 8上,它工作正常。嘗試瞭解代碼而不是**複製粘貼** – Mederic

+0

我需要它的Windows XP ..讓我試試並通知.... –