Как узнать свой ключ продукта (активации) в 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.

PowerShell OA3xOriginalProductKey- извлечь ключ Windows из прошивки UEFI/BIOS

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

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

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

Linux получить ключ для Windows из ACPI таблицы MSDM

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

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

DigitalProductID параметр реестра содержит ключ Windows в кодировке

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

Set WshShell = CreateObject("WScript.Shell")
regKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
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 и используемые для активации ключ продукта.

VBScript для извлечения ключа 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 = 'Software\Microsoft\Windows NT\CurrentVersion'; $regValue = 'DigitalProductId'
foreach ($target in $Targets) {
$wmi = [WMIClass]"\\$target\root\default: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 и используемый для активации ключ.

PowerShell функция Get-WindowsProduct

В моем случае для активации 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 сервере.

Публичные GVLK для KMS активации Windows

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

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

Windows активирована с цифровой лицензией

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

ProduKey от NirSof - извлечь ключ Windows из офлайн системы


Предыдущая статья Следующая статья


Комментариев: 141 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)