Lis
26
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



Listopad 26th, 2011 o godzinie 6:16 pm
A dlaczego to tylko .NET 4? Przecież ten kod zadziała spokojnie w 2.0.
Paweł
Listopad 27th, 2011 o godzinie 12:29 am
szkoda że WMI jest wolny jak żółw lądowy
Grudzień 1st, 2011 o godzinie 2:42 am
[...] 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 [...]