Как узнать свой ключ продукта (активации) в Windows

В этой статье мы рассмотрим способы, позволяющие извлечь ключ продукта, с помощью которого активирована Windows на вашем устройстве, без использования сторонних утилит или программ. Ключ Windows представляет последовательность из 25 символов, разделенных на 5 групп по 5 символов в каждой ( XXXXX-XXXXX-XXXXX-XXXXX-XXXXX ), который используется для активации ОС и подтверждения легальность лицензии.

  • На старых моделях компьютеров/ноутбуков с предустановленной Windows, на корпус устройства могла быть приклеена наклейка COA (Certificate of Authenticity), содержащую OEM информацию вендора, версию и ключ продукта Windows (но это встречалось только на совсем старых устройствах с предустановленной Windows 7 и 8.1)
  • Где-то с 2012 года, вместо использования физических наклеек, Microsoft внедрила возможность записи ключа продукта в конфигурацию BIOS/UEFI компьютера.

Извлекаем OEM ключ Windows зашитый в UEFI/BIOS

На многих ноутбукам с предустановленной Windows (OEM устройства), ключ активации прописывается вендором в конфигурации BIOS (ключ хранится в специальной SLIC таблице) или UEFI (OEM embedded key в таблице ACPI MSDM).

Такой вшитый OEM ключ автоматически считывается установщиком Windows. Windows Setup по ключу сам определяет соответствующую редакцию, автоматически устанавливает и активирует ее (при этом окно выбора редакции просто скрывается).

Извлечь такой вшитый ключ OEM из прошивки UEFI/BIOS можно через WMI класс SoftwareLicensingService. Откройте консоль PowerShell с правами администратора и выполните:

Get-CimInstance SoftwareLicensingService | Select -Expand OA3xOriginalProductKey

Команда покажем OEM ключ Windows, хранящийся в UEFI.

Если команда ничего не вернула, значит на этом устройстве, отсутствуют ключи в прошивке BIOS/UEFI. Скорее всего система активирована retail ключом.

Если на устройстве установлена Linux, можно извлечь ключ Windows из ACPI таблицы в UEFI, выполнив команду:

$ sudo strings /sys/firmware/acpi/tables/MSDM | tail -1

Скрипты для получить ключа активации Windows

Даже если у вас в BIOS/UEFI прописан ключ продукта, фактический ключ, используемый для активации Windows, может отличаться. Установленный ключ продукта хранится в зашифрованном виде в реестре Windows в параметре DigitalProductID (HKLMSOFTWAREMicrosoftWindows NTCurrentVersion). Для кодировки значения используется простой алгоритм base 24, который является легко декодируемым.

Ниже представлен код VBS скрипта, который извлекает значение DigitalProductID и декодирует его возвращая в открытом виде ключ, использовавшийся для активации Windows. Создайте текстовый файл get_windows_key.vbs, сохраните его на рабочем столе, вставьте в него следующий код и дважды щелкните по VBS файлу, чтобы запустить.

Set WshShell = CreateObject("WScript.Shell") regKey = "HKLMSOFTWAREMicrosoftWindows NTCurrentVersion" DigitalProductId = WshShell.RegRead(regKey & "DigitalProductId") WinProductName = "Windows Product Name: " & WshShell.RegRead(regKey & "ProductName") & vbNewLine WinProductID = "Windows Product ID: " & WshShell.RegRead(regKey & "ProductID") & vbNewLine WinProductKey = ConvertToKey(DigitalProductId) strProductKey ="Windows  Key: " & WinProductKey WinProductID = WinProductName & WinProductID & strProductKey  MsgBox(WinProductKey) MsgBox(WinProductID) Function ConvertToKey(regKey)     Const KeyOffset = 52  
isWin8 = (regKey(66) 6) And 1 regKey(66) = (regKey(66) And &HF7) Or ((isWin8 And 2) * 4) j = 24 Chars = "BCDFGHJKMPQRTVWXY2346789" Do Cur = 0 y = 14 Do Cur = Cur * 256 Cur = regKey(y + KeyOffset) + Cur regKey(y + KeyOffset) = (Cur 24) Cur = Cur Mod 24 y = y -1 Loop While y >= 0 j = j -1 winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput Last = Cur Loop While j >= 0 If (isWin8 = 1) Then keypart1 = Mid(winKeyOutput, 2, Last) insert = "N" winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then winKeyOutput = insert & winKeyOutput End If a = Mid(winKeyOutput, 1, 5) b = Mid(winKeyOutput, 6, 5) c = Mid(winKeyOutput, 11, 5) d = Mid(winKeyOutput, 16, 5) e = Mid(winKeyOutput, 21, 5) ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e End Function

Команда выведет версию Windows и используемые для активации ключ продукта.

В новых версиях Windows 11 компонент движка VBScript может быть отключен, поэтому вместо VBS скрипта для получения ключа установки Windows можно воспользоваться такой PowerShell функцией:

function Get-WindowsProduct { param ($Targets = [System.Net.Dns]::GetHostName())     function PIDDecoderFromRegistry($digitalProductId) {         $base24 = 'BCDFGHJKMPQRTVWXY2346789'; $decodeStringLength = 24; $decodeLength = 14; $decodedKey = ''         $containsN = ($digitalProductId[$decodeLength] / 8) -band 1         $digitalProductId[$decodeLength] = [byte]($digitalProductId[$decodeLength] -band 0xF7)         for ($i = $decodeStringLength; $i -ge 0; $i--) {             $digitMapIndex = 0             for ($j = $decodeLength; $j -ge 0; $j--) {                 $digitMapIndex = $digitMapIndex * 256 -bxor $digitalProductId[$j]                 $digitalProductId[$j] = [math]::Truncate($digitMapIndex / $base24.Length)                 $digitMapIndex = $digitMapIndex % $base24.Length             }             $decodedKey = $base24[$digitMapIndex] + $decodedKey         }         if ($containsN) {             $firstLetterIndex = $base24.IndexOf($decodedKey[0])             $decodedKey = $decodedKey.Remove(0,1); $decodedKey = $decodedKey.Substring(0,$firstLetterIndex) + 'N' + $decodedKey.Remove(0,$firstLetterIndex)         }         for ($t = 20; $t -ge 5; $t -= 5) { $decodedKey = $decodedKey.Insert($t, '-') }         return $decodedKey     }     $hklm = 2147483650; $regPath = 'SoftwareMicrosoftWindows NTCurrentVersion'; $regValue = 'DigitalProductId'     foreach ($target in $Targets) {         $wmi = [WMIClass]"\$targetrootdefault:stdRegProv"         $binArray = $wmi.GetBinaryValue($hklm,$regPath,$regValue).uValue[52..66]         $win32os = Get-WmiObject -Class 'Win32_OperatingSystem' -ComputerName $target         $product = [PSCustomObject]@{             Computer = $target             Caption = $win32os.Caption             CSDVersion = $win32os.CSDVersion             OSArch = $win32os.OSArchitecture             BuildNumber = $win32os.BuildNumber             RegisteredTo = $win32os.RegisteredUser             ProductID = $win32os.SerialNumber             ProductKey = PIDDecoderFromRegistry $binArray         }         Write-Output $product     } } 

Скопируйте указанный код в консоль PowerShell (или сохранится код в PS1 файл скрипта PowerShell), а потом выполните команду Get-WindowsProduct , чтобы вызвать функцию. Команда выведет в консоль информацию о версии Windows и используемый для активации ключ.

В моем случае для активации Windows 10 Pro использовался публичный GVLK ключ W269N-WFGWX-YVC9B-4J6C9-T83GX (https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys?tabs=windows1110ltsc%2Cwindows81%2Cserver2025%2Cversion1803 ), это означает что компьютер активирован на KMS сервере.

Оба скрипта для получения ключа из установленной Windows, работают на всех версиях, начиная с XP и заканчивая 11.

Если скрипты вернули, что ваш ключ BBBBB-BBBBB-BBBBB-BBBBB-BBBBB , это указывает что для активации Windows использоваться кооперативный ключ многократной активации (MAK). Такой ключ в целях безопасности не сохраняется в реестре в отркытом виде. Или такой ключ указывает, что версия вашей ОС была бесплатно обновлена с предыдущей версии ОС (например Windows 8.1 до Windows 10). А для устройства была выпущена цифровая лицензия.

Для извлечения ключа с офлайн системы (вышедшего из строя компьютера, диск с Windows на котором остался исправным), можно использовать бесплатную утилиту ProduKey от NirSoft (она позволяет выбрать каталог Windows, в котором нужно выполнить поиск ключа).


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *