Sprzętowy identyfikator w C#

Napisał bartek w kategorii C#, Programowanie
, ,

Sprzętowy identyfikator komputera

Krótki snippet w C# dla .NET 4 (jak skorygowali mnie koledzy, zadziała także od .NET 2) pobierający sprzętowy identyfikator maszyny, wykorzystując interfejs WMI, podobne algorytmy stosowane są w aplikacjach, których klucze licencyjne przypisywane są do jednego komputera

using System.Management;
using System.Security.Cryptography;
 
/// <summary>
/// pobiera sprzętowy identyfikator maszyny korzystając z interfejsu WMI
/// </summary>
/// <returns>identyfikator sprzętowy w formie hasha SHA1</returns>
public static String hardwareId()
{
    // tymczasowy string
    String tempString = "";
 
    // "baza danych", z której pobieramy informacje o systemie
    String wmiScope = @"root\CIMV2";
 
    // tabela zapytań WMI i pobieranych elementów
    String[,] wmiQueries = new String[,]
    {
        { "SELECT ProcessorId FROM Win32_Processor", "ProcessorId" },
        { "SELECT Caption FROM Win32_Processor", "Caption" },
        { "SELECT Manufacturer FROM Win32_Processor", "Manufacturer" },
        { "SELECT Caption FROM Win32_BIOS", "Caption" }
    };
 
    // wywołujemy kolejne zapytania WMI
    for (int i = 0; i < wmiQueries.GetLength(0); i++)
    {
        try
        {
            // wykonaj zapytanie WMI
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiScope, wmiQueries[i, 0]);
 
            // zbuduj string z kolejnymi elementami odpowiedzi po zapytaniach WMI
            foreach (ManagementObject obj in searcher.Get())
            {
                tempString += obj[wmiQueries[i, 1]].ToString();
            }
        }
        catch (ManagementException exception)
        {
            // loguj błąd odczytu danych z WMI
        }
    }
 
    // generuj hash SHA1 ze wszystkich zebranych danych WMI
    SHA1 hash = SHA1CryptoServiceProvider.Create();
 
    // ciąg znaków zamień na tablicę bajtów
    byte[] plainTextBytes = Encoding.ASCII.GetBytes(tempString);
 
    // oblicz hash SHA1
    byte[] hashBytes = hash.ComputeHash(plainTextBytes);
 
    // konwertuj hash SHA1 na postać tekstową (i usuń zbędne znaki "-")
    tempString = BitConverter.ToString(hashBytes).Replace("-", "");
 
    return tempString;
}

Więcej o WMI na CodeProject:
http://www.codeproject.com/KB/system/WQLByExample.aspx


Podobne wpisy:

  • Brak podobnych wpisów!

3 Komentarzy do “Sprzętowy identyfikator w C#”

  1. Paweł Napisał:

    A dlaczego to tylko .NET 4? Przecież ten kod zadziała spokojnie w 2.0.

    Paweł

  2. bi Napisał:

    szkoda że WMI jest wolny jak żółw lądowy

  3. Security News » Wykrywanie VMware w C# Napisał:

    [...] to wygląda tak, że kupujący po zakupie oprogramowania otrzymuje licencję zablokowaną na sprzętowy identyfikator jednego komputera, który okazuje się być obrazem VMware i tak później oprogramowanie jest dystrybuowane (czytaj [...]

Napisz Komentarz