В работе использовался windows'кий инструмент: wbemtest.exe
В главном классе вызов:
В конечном итоге получим уникальный ключ HWID )
C#:
namespace UniversallHD
{
using System;
using System.Management;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
public class HardwareID
{
public static string GET_ID = ReturnHWID().Result;
private static async Task<string> ReturnHWID()
{
var Sb = new StringBuilder();
Task.WaitAll((Task)Task.Run(() =>
{
using (ManagementObjectCollection ProcessorWin = new ManagementObjectSearcher("SELECT * FROM Win32_Processor").Get())
{
foreach (ManagementObject obj in ProcessorWin)
{
Sb.Append(obj["ProcessorId"].ToString().Substring(0, 4));
break;
}
}
using (ManagementObjectCollection BiosWin = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS").Get())
{
foreach (ManagementObject bios_Collection in BiosWin)
{
Sb.Append(bios_Collection["Version"].ToString().Substring(0, 4));
break;
}
}
using (ManagementObjectCollection HardDrive = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive").Get())
{
foreach (ManagementObject hdd_Collection in HardDrive)
{
Sb.Append(hdd_Collection["Signature"].ToString().Substring(0, 4));
break;
}
}
}));
try
{
byte[] bytes, hashedBytes;
bytes = Encoding.UTF8.GetBytes(Sb?.ToString());
using (var Hash = SHA256.Create())
{
hashedBytes = Hash.ComputeHash(bytes);
}
return await Task.FromResult(Convert.ToBase64String(hashedBytes).Substring(0x19));
}
catch { return GET_ID; }
}
}
}
В главном классе вызов:
C#:
namespace UniversallHD
{
using System;
using System.Text;
internal static partial class Program
{
public static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
Console.Title = "Уникальный ключ HWID";
Console.WriteLine($"Ваш ключ: {HardwareID.GET_ID}");
Console.ReadKey();
Console.Clear();
Main();
}
}
}