IT정보공유/C#

C# PC 고유키 고유아이디를 만들어 라이센스키 등으로 활용하는 법

알지오™ 2023. 6. 13.

컴퓨터마다 고유한 정보를 갖고 있습니다. 우리는 이 정보들을 가지고 컴퓨터와 컴퓨터를 서로 구분할 수 있습니다. 수많은 컴퓨터들마다 고유한 키를 부여하고 싶거나 컴퓨터를 구분짓고 싶을 때 어떤 정보들을 활용해야 할지 알아보도록 합시다.

 

컴퓨터 식별 방법 3가지

일반적으로 PC의 고유정보를 얻기 위해서 할 수 있는 것들은 아래와 같이 3가지 방법이 있습니다. 항목들을 보시면 아시겠지만 하드웨어의 고유정보를 활용하는 방법이고요. OS를 다시 설치해도, 레지스트리가 변경되어도 변할 수 없는 정보들을 활용하게 됩니다.

 

  • MAC Address
  • 하드디스크 시리얼번호
  • BIOS ID
  • Windows UUID

 

C# MAC 어드레스 구하기

LAN 카드마다 고유한 맥어드레스가 있기 때문에 랜카드 정보를 활용하여 컴퓨터를 식별할 수 있습니다. 단점은 랜카드가 바뀌면... 식별이 불가능해집니다.

using System;
using System.Net.NetworkInformation;

class Program
{
    static void Main()
    {
        string macAddress = GetMacAddress();
        Console.WriteLine("MAC Address: " + macAddress);
    }

    static string GetMacAddress()
    {
        string macAddress = string.Empty;
        NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

        foreach (NetworkInterface networkInterface in networkInterfaces)
        {
            if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||
                networkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
            {
                macAddress = networkInterface.GetPhysicalAddress().ToString();
                break;
            }
        }

        return macAddress;
    }
}

 

C# 하드디스크 시리얼번호 구하기

하드디스크가 만들어질때 시리얼번호가 롬에 저장되어 있습니다. 이 정보를 읽어와 고유의 식별정보로 활용하는 방법입니다. Mac address를 이용할 때와 마찬가지로 하드디스크가 변경되면 사용이 불가능해집니다.

 

using System;
using System.Management;

class Program
{
    static void Main()
    {
        string serialNumber = GetHardDiskSerialNumber();
        Console.WriteLine("Hard Disk Serial Number: " + serialNumber);

        // 다른 작업 수행
    }

    static string GetHardDiskSerialNumber()
    {
        string serialNumber = string.Empty;
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_DiskDrive WHERE MediaType = 'Fixed hard disk media'");

        foreach (ManagementObject managementObject in searcher.Get())
        {
            serialNumber = managementObject["SerialNumber"].ToString();
            break;
        }

        return serialNumber;
    }
}

C# BIOS ID 가져오기

컴퓨터 메인보드의 BIOS 정보를 읽어옵니다. 역시나 다른 고유정보 식별방식과 마찬가지로 메인보드를 교체하면 사용이 불가해집니다.

using System;
using System.Management;

class Program
{
    static void Main()
    {
        string biosId = GetBiosId();
        Console.WriteLine("BIOS ID: " + biosId);
    }

    static string GetBiosId()
    {
        string biosId = string.Empty;
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BIOS");

        foreach (ManagementObject managementObject in searcher.Get())
        {
            biosId = managementObject["SerialNumber"].ToString();
            break;
        }

        return biosId;
    }
}

C# UUID 구하기 (Universally Unique Identifier)

윈도우 OS 자체적으로 발급되는 고유키라고 생각하시면 될것 같습니다. 128비트로 구성된 숫자값이며 하드웨어, 시스템구성등에 따라 고유하게 생성되어 집니다. 단점은 매우매우 희박한 확률로 중복될 수도 있다고 합니다. 다만 실질적으로 우리에게 그런일이 일어날 확률은 로또 맞을 확률만큼도 안되니 걱정안하셔도 됩니다..

using System;
using System.Management;

class Program
{
    static void Main()
    {
        string uniqueId = GetUniqueComputerId();
        Console.WriteLine("Unique ID: " + uniqueId);

        // 다른 작업 수행
    }

    static string GetUniqueComputerId()
    {
        string uniqueId = string.Empty;
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UUID FROM Win32_ComputerSystemProduct");

        foreach (ManagementObject managementObject in searcher.Get())
        {
            uniqueId = managementObject["UUID"].ToString();
            break;
        }

        return uniqueId;
    }
}

 

지금까지 라이센스키 발급이나 컴퓨터 식별을 위한 딱 하나뿐인 식별정보를 구하는 방법을 알아보았습니다. 샘플코드를 통해 보시면 짐작하셨겠지만 C#에서는 ManagementObjectSearcher 클래스와 ManagementObject 클래스를 잘 활용하면 됩니다. 도움이 되셨길 바랍니다.

 

ManagementObjectSearcher 참고사항

해당 클래스를 사용하기 위해서는 dll 참조가 되어야 하고, System.Management.dll 을 프로젝트 참조에 추가해줘야 합니다.

System.Management dll 참조 추가

댓글

💲 추천 글