본문으로 건너뛰기
HWID Checker

CMD와 PowerShell에서 HWID 시리얼 확인하는 방법: Windows 하드웨어 ID 완벽 해설

CMD와 PowerShell에서 SMBIOS UUID, 메인보드, BIOS, 디스크, RAM, CPU ProcessorId, MAC, MachineGuid 등 HWID 시리얼을 확인하고, 출력 예시와 각 값이 바뀌는 조건까지 알아봅니다.

HWID Checker · 2026년 9월 4일 · 15 분 분량

‘내 HWID’를 출력하는 단일 명령어는 없습니다. 검은 창을 열고 입력을 시작하기 전에 가장 먼저 알아야 할 사실입니다. Windows는 하나의 하드웨어 ID를 저장하지 않습니다. 대신 펌웨어 UUID, 메인보드 시리얼, BIOS 시리얼, 디스크별 시리얼, 메모리 모듈별 시리얼, CPU 시그니처, 네트워크 어댑터별 MAC 주소, 소프트웨어에서 생성한 몇 가지 GUID 등 10여 개의 개별 식별자를 제공합니다. ‘내 HWID’를 다루는 프로그램은 각각 이 값 중 일부를 선택해 저마다의 방식으로 조합합니다.

따라서 CMD에서 HWID 시리얼을 확인하는 방법을 검색하는 사람이 실제로 필요한 것은 어떤 시리얼이 있는지, 각각을 읽는 명령어는 무엇인지, 출력은 어떻게 표시되는지, 어떤 요인으로 값이 바뀌는지 정리한 목록입니다. 이 가이드가 바로 그 내용을 다룹니다. 기존 명령 프롬프트(cmd.exe)와 PowerShell을 모두 설명하는 이유는 현재 Windows에서 둘 다 필요하기 때문입니다. 예전 CMD 명령어 중 상당수는 wmic을 기반으로 하지만, Microsoft는 Windows 11 기본 설치에서 이를 제거했으며 현재 지원되는 대체 수단은 PowerShell cmdlet입니다.

여기에서 소개하는 작업은 모두 읽기 전용입니다. 명령어는 Windows와 펌웨어가 이미 제공하는 값을 조회할 뿐이며, 아래의 어떤 작업도 식별자를 수정하거나 무작위화하거나 위조하지 않습니다. 명령어는 2026년 9월 4일을 기준으로 Microsoft의 Windows 10 22H2 및 Windows 11 24H2/25H2 문서와 대조해 확인했습니다.

빠른 답변: 전체 명령어 표

명령어만 필요하다면 아래 표를 확인하세요. 각 행은 하나의 식별자를 나타냅니다. ‘레거시 CMD’ 열에는 포럼 게시물에서 여전히 볼 수 있는 예전 wmic 형식을 참고용으로 실었습니다. 현재는 PowerShell 열의 명령어를 사용하는 것이 좋습니다.

식별자저장 위치PowerShell(권장)레거시 CMD(Windows 11에는 없을 수 있음)
SMBIOS system UUID메인보드 펌웨어(Get-CimInstance Win32_ComputerSystemProduct).UUIDwmic csproduct get uuid
시스템 시리얼 번호펌웨어(OEM)(Get-CimInstance Win32_ComputerSystemProduct).IdentifyingNumberwmic csproduct get identifyingnumber
BIOS 시리얼펌웨어(Get-CimInstance Win32_BIOS).SerialNumberwmic bios get serialnumber
메인보드 시리얼베이스보드 펌웨어 테이블(Get-CimInstance Win32_BaseBoard).SerialNumberwmic baseboard get serialnumber
섀시 시리얼인클로저 펌웨어 테이블(Get-CimInstance Win32_SystemEnclosure).SerialNumberwmic systemenclosure get serialnumber
물리 디스크 시리얼드라이브 펌웨어Get-PhysicalDisk | Select-Object FriendlyName, SerialNumberwmic diskdrive get model,serialnumber
볼륨 시리얼(하드웨어 아님)파일 시스템 헤더(Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'").VolumeSerialNumbervol C:
RAM 모듈 시리얼DIMM SPD 칩Get-CimInstance Win32_PhysicalMemory | Select-Object DeviceLocator, SerialNumberwmic memorychip get devicelocator,serialnumber
CPU ProcessorIdCPUID 명령(Get-CimInstance Win32_Processor).ProcessorIdwmic cpu get processorid
MAC 주소네트워크 어댑터 펌웨어/드라이버Get-NetAdapter | Select-Object Name, MacAddress, Statusgetmac /v
모니터 시리얼(EDID)디스플레이 펌웨어모니터 섹션 참조없음
MachineGuid레지스트리, Windows 설치 시 설정(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Cryptography').MachineGuidreg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid
Windows Product ID레지스트리/라이선스(Get-CimInstance Win32_OperatingSystem).SerialNumberwmic os get serialnumber
ComputerHardwareIds레지스트리, SMBIOS에서 파생(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\SystemInformation').ComputerHardwareIdsreg query "HKLM\SYSTEM\CurrentControlSet\Control\SystemInformation" /v ComputerHardwareIds

이후에는 각 행을 차례로 살펴보며 값의 의미, 정상적인 결과와 잘못된 결과의 형태, 값을 바꾸는 작업을 설명합니다. 한 섹션만 읽는다면 실제로 ‘HWID’를 구성하는 시리얼은 무엇인가?를 읽어보세요.

CMD인가 PowerShell인가? 같은 검은 창에 두 언어가 있는 이유

cmd.exe와 PowerShell은 모두 텍스트 콘솔이며, Windows 11에서는 보통 같은 Windows Terminal 앱 안에서 열립니다. 그래서 명령어를 서로 바꿔 쓸 수 있다고 생각하기 쉽지만, 그렇지 않습니다.

  • **cmd.exe**는 dir, reg, vol, getmac, systeminfo와 과거의 wmic 같은 배치 방식 명령어를 실행합니다. 개체 파이프라인이 없으며 출력은 일반 텍스트입니다.
  • PowerShell(Windows에는 Windows PowerShell 5.1이 기본 제공되고 PowerShell 7은 별도 설치)은 Get-CimInstance, Get-PhysicalDisk 같은 cmdlet을 실행합니다. 출력이 개체이므로 Select-Object로 필터링할 수 있습니다.

HWID 조회에서 이 차이가 중요한 이유는 wmic.exe 때문입니다. 2024년 이전에 작성된 ‘CMD에서 HWID 확인’ 튜토리얼은 거의 모두 wmic csproduct get uuid, wmic bios get serialnumber 등을 사용합니다. WMIC는 2016년에 사용 중단이 선언되었고, Windows 11 24H2에서는 기본적으로 비활성화된 선택적 ‘Feature on Demand’가 되었으며, 현재 완전히 제거되는 중입니다. Windows 11을 새로 설치한 컴퓨터에서는 대개 다음 메시지가 표시됩니다.

'wmic' is not recognized as an internal or external command,
operable program or batch file.

그 아래의 WMI 클래스(Win32_BIOS, Win32_BaseBoard 등)는 여전히 존재합니다. 사라진 것은 예전 명령줄 클라이언트뿐입니다. 그래서 이 글의 모든 PowerShell 명령어는 Get-CimInstance를 사용합니다. 지원되는 CIM 인터페이스를 통해 동일한 클래스를 읽는 방식입니다. 기존 스크립트에서 wmic을 계속 사용해야 한다면 WMIC 문제 해결 가이드에서 마이그레이션 방법을 자세히 확인할 수 있습니다.

PowerShell 명령어를 사용하기 위해 CMD를 종료할 필요는 없습니다. 이 글의 PowerShell 한 줄 명령어는 다음처럼 감싸면 명령 프롬프트나 .bat 파일에서 실행할 수 있습니다.

powershell -NoProfile -Command "(Get-CimInstance Win32_BaseBoard).SerialNumber"

다운로드 가능한 BAT 스크립트도 정확히 이 방식으로 작동합니다. 식별자마다 PowerShell을 한 번씩 호출하는 일반 텍스트 배치 파일이므로 실행 전에 모든 줄을 직접 확인할 수 있습니다.

관리자 권한이 필요한가요? 이 글에서 다루는 모든 작업에는 필요하지 않습니다. SMBIOS 테이블, 디스크 시리얼, 메모리 SPD 데이터, CPUID, 관련 레지스트리 키는 모두 표준 사용자 세션에서 읽을 수 있습니다. 명령어가 Access denied를 반환한다면 일반적인 권한 문제라기보다는 원격 컴퓨터를 대상으로 실행 중이거나 제한된 기업 정책 환경에서 실행 중일 가능성이 거의 확실합니다.

SMBIOS system UUID

정의. 메인보드 제조사가 SMBIOS System Information 테이블(type 1)에 저장하는 128비트 식별자입니다. 펌웨어 수준의 값이고 OS를 다시 설치해도 유지되며 읽기 쉬워서, 별다른 설명 없이 ‘HWID’라고 할 때 가장 흔히 의미하는 값입니다.

(Get-CimInstance Win32_ComputerSystemProduct).UUID

일반적인 출력:

4C4C4544-0034-5A10-8047-B8C04F4E3232

해석 방법. 위 예시와 같이 Dell 컴퓨터에서는 UUID의 일부가 서비스 태그에서 파생되므로 Dell 두 대가 같은 값을 가질 수 없습니다. 많은 소비자용 메인보드에서는 공장에서 기록한 무작위 값입니다. 어느 쪽이든 비밀 정보는 아닙니다. 로컬 접근 권한이 있는 사람은 누구나 읽을 수 있고 암호화되어 있지도 않습니다.

잘못된 결과와 그 의미.

  • 00000000-0000-0000-0000-000000000000 또는 FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF — 펌웨어가 필드를 채우지 않았습니다. 일부 저가형 메인보드, BIOS 칩 교체 후의 컴퓨터, 최소 SMBIOS 구성만 제공하는 일부 가상 머신에서 흔합니다.
  • 03000200-0400-0500-0006-000700080009 — 레퍼런스 BIOS에서 널리 알려진 기본 자리표시자입니다. 고유하지 않으며 수천 개의 메인보드가 같은 값을 보고합니다.
  • 빈 값 — 보통 UUID를 제공하지 않는 가상화 플랫폼입니다.

값이 바뀌는 조건. 메인보드를 교체할 때 바뀝니다. 일반적인 BIOS 재플래시는 값을 유지하지만, 일부 메인보드에서 CMOS/NVRAM을 완전히 초기화하거나 서비스 센터에서 보드를 교체하면 새 값이 생길 수 있습니다. Windows 재설치로는 바뀌지 않습니다. VM에서는 하이퍼바이저가 값을 설정하며, VM을 복제할 때 재생성되는지는 플랫폼에 따라 다릅니다.

같은 클래스에서 IdentifyingNumber는 OEM 시스템 시리얼입니다. 노트북 바닥의 스티커에 인쇄된 문자열과 같습니다.

Get-CimInstance Win32_ComputerSystemProduct |
  Select-Object Vendor, Name, IdentifyingNumber, UUID

BIOS 시리얼 번호

정의. SMBIOS System Information 테이블이 Win32_BIOS 클래스를 통해 보고하는 시리얼입니다. 완제품 PC와 노트북에서는 거의 항상 위의 IdentifyingNumber와 동일합니다. 조립식 데스크톱에서는 메인보드 제조사가 기록한 값인데, 유용하지 않은 값인 경우가 많습니다.

(Get-CimInstance Win32_BIOS).SerialNumber

정상적인 값부터 쓸모없는 값까지 일반적인 출력:

5CG1234XYZ                    ← HP laptop, real serial
To Be Filled By O.E.M.        ← common on ASRock/ASUS retail boards
Default string                 ← common on MSI/Gigabyte retail boards
System Serial Number           ← another placeholder

마지막 세 값은 오류가 아닙니다. 리테일 메인보드는 다른 사람이 시스템을 조립할 목적으로 판매되므로 보드 제조사가 ‘시스템’ 시리얼을 시스템 통합업체에서 입력하도록 비워 두지만, 실제로는 아무도 입력하지 않습니다. BIOS 시리얼을 고유 키로 사용하는 소프트웨어는 이런 컴퓨터를 모두 같은 컴퓨터로 인식합니다. 이것이 ‘중복 하드웨어’ 오탐이 발생하는 실제 원인입니다.

값이 바뀌는 조건. UUID와 마찬가지로 메인보드를 교체할 때 바뀝니다. 정상적인 상황에서는 BIOS 업데이트로 바뀌지 않습니다.

메인보드(베이스보드) 시리얼

정의. SMBIOS Baseboard 테이블(type 2)의 시리얼입니다. BIOS/시스템 시리얼과 달리 조립된 시스템이 아닌 보드 자체를 식별하므로 리테일 메인보드에서도 대개 값이 입력되어 있습니다.

Get-CimInstance Win32_BaseBoard |
  Select-Object Manufacturer, Product, SerialNumber

일반적인 출력:

Manufacturer                 Product            SerialNumber
------------                 -------            ------------
ASUSTeK COMPUTER INC.        ROG STRIX B650-A   230412345678901

잘못된 결과. To Be Filled By O.E.M., Default string, None 또는 전부 0인 시리얼입니다. BIOS 시리얼보다는 드물지만, 특히 매우 저렴한 보드와 펌웨어를 업데이트하기 전까지 Default string을 반환하는 일부 Gigabyte 모델에서 발생합니다.

값이 바뀌는 조건. 보드를 교체할 때만 바뀝니다. 이 때문에 메인보드 시리얼과 SMBIOS UUID는 안티치트 및 라이선스 시스템에서 가장 높은 비중을 두는 식별자입니다.

섀시(시스템 인클로저) 시리얼

정의. SMBIOS Chassis 테이블(type 3)의 시리얼입니다. 노트북과 OEM 데스크톱에서는 대개 시스템 시리얼과 일치합니다. 조립 PC에서는 거의 항상 자리표시자입니다. 케이스에는 펌웨어가 없고 메인보드 제조사는 사용자가 어떤 케이스를 샀는지 알 수 없기 때문입니다.

(Get-CimInstance Win32_SystemEnclosure).SerialNumber

이 값은 보조 정보로 취급해도 됩니다. 일부 HWID 도구가 읽기 때문에 포함했으며, Default string이 표시되어도 이상한 일이 아닙니다.

물리 디스크 시리얼 — vol이 디스크 시리얼이 아닌 이유

가장 많은 혼동이 생기는 부분입니다. Windows는 사람들이 모두 ‘디스크 시리얼’이라고 부르는 완전히 다른 두 값을 제공합니다.

하드웨어 시리얼(일반적으로 필요한 값)

모든 SSD와 HDD에는 제조사가 할당해 드라이브 펌웨어에 저장한 시리얼 번호가 있습니다. 드라이브 라벨에 인쇄되어 있고 SATA 또는 NVMe identify 명령을 통해 보고됩니다.

현재 Windows에서 가장 확실하게 읽는 방법은 Storage 모듈입니다.

Get-PhysicalDisk | Select-Object DeviceId, FriendlyName, MediaType, SerialNumber

일반적인 출력:

DeviceId FriendlyName                 MediaType SerialNumber
-------- ------------                 --------- ------------
0        Samsung SSD 990 PRO 2TB      SSD       S6Z2NJ0T123456A
1        WDC WD40EZAZ-00SF3B0         HDD       WD-WX12D34ABCDE

표준 WMI 클래스도 사용할 수 있으며, 레거시 wmic diskdrive 명령이 사용하던 방식입니다.

Get-CimInstance Win32_DiskDrive | Select-Object Model, SerialNumber

사용 중 마주칠 수 있는 특이 사항.

  • 앞뒤 공백. 일부 드라이버는 고정 길이에 맞추기 위해 시리얼에 공백을 채웁니다. 값을 비교할 때 .Trim()을 사용하지 않으면 실제로는 같은 값이 잘못 불일치로 판정될 수 있습니다.
  • 구형 시스템의 바이트 순서가 뒤바뀐 16진수. Windows 7 이하에서 Win32_PhysicalMedia는 두 문자씩 순서를 바꾼 16진수 형태로 시리얼을 반환했습니다. 현재 Windows는 정상 문자열을 반환하지만, 수년 전에 기록한 값과 비교할 때 뒤섞여 보이는 이유가 바로 이것입니다.
  • USB, RAID 또는 일부 NVMe 드라이브에서 빈 값. RAID 컨트롤러 뒤의 드라이브는 물리 드라이브가 아닌 컨트롤러의 가상 디스크를 보고하고, USB 인클로저는 내부 시리얼을 숨기기도 합니다. 일반적으로 Get-PhysicalDisk가 Win32_DiskDrive보다 잘 처리하지만 둘 다 하드웨어 RAID 너머를 볼 수는 없습니다.
  • 가상 머신. 하이퍼바이저가 합성 시리얼을 할당하며, 가상 디스크를 다시 만들면 값이 바뀝니다.

값이 바뀌는 조건. 드라이브를 교체할 때만 바뀝니다. 포맷, 파티션 재구성, 새 드라이브로의 복제(복제본에는 새 드라이브의 시리얼이 있음), Windows 재설치로는 바뀌지 않습니다. 펌웨어 업데이트로도 바뀌지 않습니다.

볼륨 시리얼(일반적으로 원하지 않는 값)

vol C:
 Volume in drive C is Windows
 Volume Serial Number is 8A3F-1C2B

이 8자리 16진수 값은 볼륨을 포맷할 때 파일 시스템 헤더에 기록됩니다. 드라이브 펌웨어에 저장되지 않으며 하드웨어와 아무 관련이 없습니다. 파티션을 다시 포맷하면 새 값이 생성됩니다. 디스크를 섹터 단위로 복제하면 복제본에도 원본과 같은 볼륨 시리얼이 들어갑니다.

1990~2000년대의 일부 구형 라이선스 방식은 C: 볼륨 시리얼을 키로 사용했습니다. 그래서 지금도 HWID 관련 논의에 등장합니다. 쉽게 바꿀 수 있기 때문에 최신 안티치트와 DRM은 대개 이를 무시합니다. 도구가 ‘디스크 시리얼’로 8A3F-1C2B 같은 값을 보고한다면 드라이브가 아닌 볼륨 시리얼을 읽은 것입니다.

스크립트에서 필요한 경우 사용할 PowerShell 명령어:

(Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'").VolumeSerialNumber

이 명령은 하이픈이 없는 8A3F1C2B를 반환합니다.

RAM 모듈 시리얼

정의. 각 메모리 모듈에는 부품 번호, 제조사, 그리고 대부분의 경우 시리얼 번호가 담긴 SPD(Serial Presence Detect) 칩이 있습니다. Windows는 Win32_PhysicalMemory를 통해 이를 제공합니다.

Get-CimInstance Win32_PhysicalMemory |
  Select-Object DeviceLocator, Manufacturer, PartNumber, SerialNumber

일반적인 출력:

DeviceLocator Manufacturer PartNumber           SerialNumber
------------- ------------ ----------           ------------
DIMM_A2       Corsair      CMK32GX5M2B5600C36   00000000
DIMM_B2       Corsair      CMK32GX5M2B5600C36   00000000

시리얼을 살펴보세요. 소비자용 메모리에서는 00000000, 빈 값 또는 모든 모듈에서 같은 값이 나오는 일이 매우 흔합니다. 시리얼을 기록하지 않는 제조사도 있고, SPD 시리얼 필드를 SMBIOS로 전달하지 않는 메인보드도 있습니다. 서버 및 워크스테이션 메모리는 실제 고유 시리얼을 보고할 가능성이 훨씬 높습니다.

값이 바뀌는 조건. 모듈을 추가, 제거 또는 교체할 때입니다. XMP/EXPO 프로필을 바꿔도 변하지 않습니다. 또한 DeviceLocator(슬롯 이름)는 메인보드마다 다르므로 같은 모듈을 다른 슬롯으로 옮기면 시리얼 자체는 그대로여도 슬롯과 시리얼의 연결 관계가 바뀝니다. 단순하게 구현된 HWID 시스템에서 자주 문제가 되는 세부 사항입니다.

CPU ProcessorId — 시리얼 번호가 아닌 값

정의. Windows가 CPUID 명령에서 조합하는 16자리 16진수 값으로, 프로세서 시그니처(제품군, 모델, 스테핑)와 기능 플래그로 구성됩니다.

Get-CimInstance Win32_Processor | Select-Object Name, ProcessorId
Name                                       ProcessorId
----                                       -----------
AMD Ryzen 7 7800X3D 8-Core Processor       178BFBFF00A60F12

거의 모든 HWID 튜토리얼이 잘못 설명하는 핵심이 있습니다. ProcessorId는 개별 칩의 고유값이 아닙니다. 스테핑이 같고 마이크로코드에 표시되는 기능 세트가 동일한 모든 Ryzen 7 7800X3D는 같은 178BFBFF00A60F12를 반환합니다. Intel은 개인정보 보호 문제로 2000년 Pentium III 이후 CPUID에서 칩별 프로세서 시리얼 번호(PSN)를 제거했고, AMD는 이를 출시한 적이 없습니다. 오늘날 Windows가 보고하는 것은 모델 식별자이지 개별 장치 식별자가 아닙니다.

그렇다고 쓸모없는 것은 아닙니다. CPU를 다른 모델로 교체하지 않는 한 변하지 않으므로 복합 해시의 안정적인 구성 요소이며, 컴퓨터의 전체 구성을 구분하는 데 도움이 됩니다. 다만 동일한 프로세서를 사용하는 모든 컴퓨터 중 단 한 대를 이 값만으로 식별할 수는 없습니다.

값이 바뀌는 조건. CPU를 다른 모델이나 스테핑으로 교체할 때입니다. 보고되는 기능 플래그를 변경하는 마이크로코드 업데이트는 이론적으로 하위 비트를 바꿀 수 있지만 실제로는 드뭅니다.

MAC 주소

정의. 각 네트워크 어댑터에 기록된 48비트 주소로, 여섯 쌍의 16진수로 표시됩니다. 유선 Ethernet, Wi-Fi, Bluetooth 어댑터가 각각 고유한 주소를 갖습니다.

CMD 전용 명령어도 여전히 작동하며 알아둘 만합니다.

getmac /v /fo list

PowerShell을 사용하면 어댑터 이름과 상태를 한 화면에서 확인할 수 있습니다.

Get-NetAdapter | Select-Object Name, InterfaceDescription, MacAddress, Status
Name      InterfaceDescription                     MacAddress        Status
----      --------------------                     ----------        ------
Ethernet  Realtek Gaming 2.5GbE Family Controller  04-42-1A-9B-3C-7D Up
Wi-Fi     Intel(R) Wi-Fi 6E AX211 160MHz           A0-B1-C2-D3-E4-F5 Up

HWID에서 중요한 특이 사항.

  • 가상 어댑터. VPN 클라이언트, Hyper-V, VMware, WSL2, Docker는 모두 자체 MAC을 가진 가상 어댑터를 추가합니다. 소프트웨어 설치에 따라 생겼다가 사라지므로 ‘모든 MAC 주소’를 포함하는 HWID는 불안정합니다. Get-NetAdapter -Physical을 사용하면 물리 어댑터만 필터링할 수 있습니다.
  • 임의 하드웨어 주소. Windows 10과 11은 네트워크별로 Wi-Fi MAC을 무작위화할 수 있습니다(설정 → 네트워크 및 인터넷 → Wi-Fi → 임의 하드웨어 주소). 이 기능을 켜면 Wi-Fi 네트워크마다 표시되는 MAC이 달라집니다. 유선 어댑터는 이 설정의 영향을 받지 않습니다.
  • 관리자가 변경 가능. 대부분의 드라이버는 장치 관리자 → 고급 → Network Address에서 MAC을 재정의할 수 있습니다. 해킹이 아니라 정상적으로 문서화된 기능이며, MAC만으로는 식별자가 취약한 주된 이유입니다.

값이 바뀌는 조건. 어댑터 교체, Wi-Fi 무작위화 활성화, 드라이버 재정의 설정, 가상화 소프트웨어 추가/제거(가상 어댑터의 경우)입니다.

EDID에서 가져오는 모니터 시리얼

대부분의 HWID 가이드는 이를 생략하지만 일부 안티치트 시스템이 읽는 값이므로 전체 목록에는 포함해야 합니다. 모든 모니터는 자체 정보를 설명하는 EDID 블록을 그래픽 카드에 보내며, 이 블록에는 제조사 코드와 대개 시리얼 번호가 들어 있습니다.

Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorID | ForEach-Object {
  [PSCustomObject]@{
    Manufacturer = -join [char[]]($_.ManufacturerName -ne 0)
    Model        = -join [char[]]($_.UserFriendlyName -ne 0)
    Serial       = -join [char[]]($_.SerialNumberID -ne 0)
  }
}
Manufacturer Model          Serial
------------ -----          ------
DEL          DELL S2721DGF  9X2Y3Z4

필드는 0으로 패딩된 바이트 배열이므로 위 코드는 이를 문자로 변환한 뒤 0을 제거합니다. 특히 저가형 제품을 비롯한 일부 모니터는 시리얼로 0 또는 전체 생산분에서 동일한 값을 보고합니다.

값이 바뀌는 조건. 모니터를 교체할 때입니다. 케이블이나 포트를 바꿔도 변하지 않습니다.

MachineGuid — 하드웨어 교체 후에도 유지되는 소프트웨어 ID

정의. Windows가 설치 중 생성하여 HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid에 저장하는 GUID입니다. 하드웨어 정보가 아닙니다. 어떤 부품을 바꿔도 유지되고 읽기 쉬워서 Windows 소프트웨어에서 가장 널리 사용하는 ‘컴퓨터 식별자’입니다.

CMD 명령어:

reg query HKLM\SOFTWARE\Microsoft\Cryptography /v MachineGuid
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography
    MachineGuid    REG_SZ    7e3a1b2c-4d5e-4f60-9a7b-8c9d0e1f2a3b

PowerShell:

(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Cryptography').MachineGuid

값이 바뀌는 조건. Windows 재설치 시 바뀝니다(현재 위치 업그레이드나 레지스트리 하이브를 유지하는 초기화가 아닌 새로 설치). 디스크 이미지를 다른 컴퓨터에 복원하면 동일한 MachineGuid가 새 하드웨어로 옮겨갑니다. 이미지를 사용해 배포하는 조직에서 이 값만을 키로 삼는 소프트웨어가 수백 대를 ‘동일한’ 컴퓨터로 인식하는 일이 생기는 이유입니다.

재설치하면 바뀌지만 하드웨어 변경으로는 바뀌지 않으므로 MachineGuid는 펌웨어 UUID와 반대처럼 동작합니다. 제대로 된 HWID 구현은 둘 다 사용하므로 재설치나 부품 교체 중 한 가지만으로는 ‘새’ 컴퓨터로 판단하지 않습니다.

Windows Product ID

정의. 설정 → 시스템 → 정보에 표시되는 xxxxx-xxxxx-xxxxx-AAOEM 형태의 문자열입니다. 하드웨어가 아닌 Windows 라이선스 채널과 설치를 식별합니다.

(Get-CimInstance Win32_OperatingSystem).SerialNumber

많은 ‘HWID 확인’ 배치 파일에 wmic os get serialnumber가 들어 있어 하드웨어 시리얼로 오해하기 때문에 소개합니다. 이 값은 하드웨어 시리얼이 아니며, Windows를 다시 설치할 때 바뀌고 에디션 변경이나 재인증 시 바뀌기도 합니다.

ComputerHardwareIds — Microsoft 자체 하드웨어 ID

드라이버 개발 분야 밖에서는 거의 언급되지 않지만, Windows의 공식 ‘HWID’에 가장 가까운 값입니다.

Windows Update는 Computer Hardware IDs라는 GUID 집합을 사용해 특정 시스템에 맞는 펌웨어와 드라이버 패키지를 배포합니다. 제조사, 제품명, SKU, 제품군, BIOS 제조사와 버전, 베이스보드 정보 등 SMBIOS 필드를 다양하게 조합해 해시한 값이며 레지스트리에 저장됩니다.

reg query "HKLM\SYSTEM\CurrentControlSet\Control\SystemInformation" /v ComputerHardwareIds
(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\SystemInformation').ComputerHardwareIds
{a8b1c2d3-e4f5-5a6b-9c8d-7e6f5a4b3c2d}
{b9c2d3e4-f5a6-5b7c-8d9e-6f5a4b3c2d1e}
{c0d3e4f5-a6b7-5c8d-9e0f-5a4b3c2d1e0f}
...

이 값은 개별 장치 수준이 아닌 모델 수준입니다. BIOS 버전까지 동일한 같은 모델의 노트북 두 대는 같은 집합을 생성합니다. 하지만 다른 값이 자리표시자처럼 보일 때 일관성을 확인하는 데 유용합니다. HWID 도구도 읽는 펌웨어 문자열에서 파생되기 때문입니다. 여러 컴퓨터가 모든 ComputerHardwareId를 공유한다면 위에서 설명한 SMBIOS UUID 문제나 To Be Filled By O.E.M. 문제 역시 공유할 가능성이 매우 높습니다.

Windows Driver Kit에는 ComputerHardwareIds.exe가 포함되어 있습니다. 이 도구는 동일한 목록과 함께 각 해시에 사용된 정확한 SMBIOS 필드를 출력하므로, 시스템이 어떤 펌웨어 문자열을 제공하는지 정확히 파악할 때 유용합니다.

실제로 ‘HWID’를 구성하는 시리얼은 무엇인가?

이제 질문의 핵심을 살펴보겠습니다. 10여 개의 값을 확인했는데, 그중 어떤 것이 진짜 HWID일까요?

개별적으로는 어느 것도 아닙니다. 안티치트 시스템, 라이선스 서버, 장치 관리 도구에서 사용하는 HWID는 위 값 중 여러 개를 조합한 해시이며, 업체마다 선택하는 값과 해시 방식이 다릅니다. HWID 형식 가이드가 필요한 이유이자, 한 프로그램의 값을 다른 프로그램의 값과 비교할 수 없는 이유입니다.

공개 문서와 리버스 엔지니어링 자료를 토대로 각 값에 일반적으로 부여되는 비중을 대략 정리하면 다음과 같습니다.

식별자일반적인 비중이유
메인보드 시리얼, SMBIOS UUID높음OS 재설치 후에도 유지되고 메인보드 교체 시에만 변경
물리 디스크 시리얼(시스템 드라이브)높음안정적이고 고유하며 읽기 쉬움
MachineGuid중간~높음재설치를 감지하지만 복제 이미지에서는 공유됨
CPU ProcessorId중간안정적이지만 같은 모델의 모든 칩이 공유
물리 MAC 주소낮음~중간쉽게 재정의할 수 있고 Wi-Fi에서 무작위화됨
RAM 시리얼낮음소비자용 메모리에서는 0이거나 중복되는 경우가 많음
모니터 EDID 시리얼낮음일부 안티치트가 읽지만 주변기기는 자주 바뀜
볼륨 시리얼매우 낮음포맷할 때마다 바뀜
BIOS/섀시 시리얼환경에 따라 다름OEM 컴퓨터에서는 유용하지만 리테일 보드에서는 자리표시자

실용적으로는 다음 두 가지 결과를 알 수 있습니다.

  1. 잘 설계된 시스템에서는 부품 하나를 교체해도 HWID가 바뀌는 경우가 드뭅니다. 대부분의 구현은 컴퓨터를 새 장치로 판단하기 전에 일정 개수의 필드 변경을 허용합니다. GPU는 WMI를 통해 시리얼을 제공하지 않으므로 이 글 어디에도 나오지 않으며, GPU 교체는 일반적으로 아무 값도 바꾸지 않습니다.
  2. Windows를 다시 설치하면 MachineGuid와 볼륨 시리얼은 바뀌지만 펌웨어 수준의 값은 아무것도 바뀌지 않습니다. 재설치 후에도 차단이나 라이선스 잠금이 유지된 이유는 메인보드, 디스크, UUID가 그대로이기 때문입니다. HWID 차단 가이드에서 이것이 실제로 어떤 의미인지 자세히 설명합니다.

모든 값을 한 번에 읽기

명령어 14개를 직접 실행하는 것도 한 번이라면 괜찮습니다. 저장하거나 나중에 비교할 단일 보고서가 필요하다면 모두 읽기 전용인 세 가지 방법이 있습니다.

붙여 넣을 수 있는 PowerShell 블록. 비중이 높은 값을 출력하며 자리표시자도 그대로 보여주므로 펌웨어가 실제로 무엇을 보고하는지 확인할 수 있습니다.

$csp = Get-CimInstance Win32_ComputerSystemProduct
$bb  = Get-CimInstance Win32_BaseBoard
[PSCustomObject]@{
  SmbiosUuid    = $csp.UUID
  SystemSerial  = $csp.IdentifyingNumber
  BiosSerial    = (Get-CimInstance Win32_BIOS).SerialNumber
  BoardSerial   = $bb.SerialNumber
  BoardProduct  = $bb.Product
  DiskSerials   = (Get-PhysicalDisk | ForEach-Object { $_.SerialNumber.Trim() }) -join ', '
  CpuId         = (Get-CimInstance Win32_Processor).ProcessorId
  PhysicalMacs  = (Get-NetAdapter -Physical | ForEach-Object MacAddress) -join ', '
  MachineGuid   = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Cryptography').MachineGuid
} | Format-List

BAT 스크립트. 실행하기 전에 파일 내용을 확인하고 싶다면 다운로드 가능한 .bat를 이용하세요. 식별자마다 PowerShell 쿼리 하나를 실행하고 마지막에 일시 중지하는 일반 텍스트 배치 파일입니다. wmic을 사용하지 않고, 해시를 계산하지 않으며, 디스크에 아무것도 쓰지 않습니다.

EXE. Windows용 HWID Checker는 동일한 식별자에 RAM과 볼륨 시리얼을 더해 읽고 출력하며, 안정적인 필드로 SHA-256도 계산하여 시간에 따른 변화를 하나의 문자열로 비교할 수 있게 합니다. 더블 클릭하고 내용을 읽은 뒤 Enter를 누르면 되는 포터블 콘솔 애플리케이션입니다. 이 해시는 당사 도구의 복합 값이며 어떤 게임이나 라이선스 서버에서 사용하는 값도 아닙니다. 다른 소프트웨어가 계산할 값을 예측하는 도구가 아니라, 내 컴퓨터가 지난달과 같은 값으로 읽히는지 확인하는 도구입니다. 실행 전에 파일을 검증할 수 있도록 실행 파일 자체의 SHA-256도 다운로드 페이지에 공개되어 있습니다.

자주 묻는 질문

친구의 ‘HWID checker’ 도구와 결과가 다른 이유는 무엇인가요? 표준이 없기 때문입니다. 그 도구는 다른 필드 집합을 해시했습니다. 해시가 아니라 이 글에서 확인한 원시 값을 비교하세요.

메인보드와 BIOS 시리얼이 둘 다 To Be Filled By O.E.M.으로 표시됩니다. 문제가 있나요? 아닙니다. 리테일 메인보드를 사용하고 있고 시스템 통합업체(바로 사용자 본인)가 OEM 필드를 입력하지 않았을 뿐입니다. 일부 보드 제조사는 값을 설정할 수 있는 DMI 편집 도구를 제공하지만 일반적으로 설정할 이유는 없습니다.

물리적으로 접근할 수 없는 컴퓨터에서도 확인할 수 있나요? 적절한 권한이 있다면 가능합니다. Get-CimInstance -ComputerName <name> Win32_BaseBoard는 WinRM 또는 DCOM을 통해 작동합니다. 이 글에서 Get-CimInstance를 사용하는 모든 명령어는 -ComputerName 또는 -CimSession을 지원합니다.

systeminfo에서 HWID 시리얼을 볼 수 있나요? 아닙니다. 제조사, 모델, BIOS 버전, Windows Product ID는 표시하지만 하드웨어 시리얼 번호는 표시하지 않습니다. 관련 정보를 파악하는 데는 유용하지만 시리얼 조회 명령은 아닙니다.

이 중 어떤 값을 바꿀 수 있나요? 이 글은 식별자 변경을 다루지 않으며 HWID Checker도 어떤 값도 수정하지 않습니다. MAC과 볼륨 시리얼은 설계상 사용자가 변경할 수 있습니다. 펌웨어 값은 변경하도록 만들어진 것이 아니며, 소유한 메인보드에서 값을 변경하는 방법은 Windows가 아닌 펌웨어 제조사에 문의할 문제입니다.

명령어를 실행하면 이 정보가 업로드되나요? 아닙니다. 모든 명령어는 로컬 펌웨어 테이블, 로컬 장치 드라이버 또는 로컬 레지스트리를 읽습니다. 이 가이드의 어떤 작업도 네트워크에 연결하지 않습니다. 다운로드 가능한 EXE와 BAT에도 네트워크 코드가 전혀 없습니다.


프로그램에서 얻은 식별자가 위 항목 중 어느 것과 가장 비슷한지 확인하려면 온라인 HWID 형식 검사기를 사용하세요. UUID, MAC 주소, 16진수 해시, 일반적인 시리얼 패턴을 인식하고 구조를 설명합니다. 값을 어디에도 전송하지 않고 브라우저 안에서 처리합니다.