У цій статті ми поговоримо про те, як можна дізнатися ключ Windows 8, за допомогою якого активована система. Нагадаємо, в Windows 8, як і в попередніх ОС сімейства Microsoft – ключ продукту являє собою послідовність з 25 символів, розділених на 5 груп по 5 символів в кожній (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX). Даний ключ використовується для активації всіх версій Windows 8.
При активації Windows 8 потрібно враховувати наступні моменти:
- Ключ Windows 8 можна використовувати тільки для активації тієї редакції Windows 8, для якої він призначений, і не для якої іншої (тобто за допомогою ключа Windows 8 Pro не вийде активувати Windows 8 home).
- OEM ключ можна використовувати для активації OEM-ної копії Windows 8 на тому ж самому комп’ютері, на якому він був активований вперше і ні на якому іншому
- ключем роздрібна торгівля можна активувати Windows 8 на будь-якому комп’ютері, але тільки на одному одночасно
При покупці роздрібна торгівля версії Windows 8 ключ продукту поставляється у вигляді наклейки, яку можна наклеїти на системний блок або ноутбук, в разі покупці пристрою з попередньо встановленою Windows 8, OEM– ключ вже буде приклеєний до корпусу девайса. Ця наклейка називається Сертифікат справжності (COA).
Однак нерідко трапляється, що з якої-небудь «трагічної причини», текст на такий ліцензійної наклейці стає нечитабельним (пролився кави, стерся про коліна, просто загубився і т.д.). Як в цьому випадку можна програмно знайти ключ Windows 8, щоб можна було в подальшому при перевстановлення системи її знову активувати? Крім того може виникнути необхідність перевірки системи на ліцензійність і збіг встановленого в системі ключа і ключа на наклейці.
Ключ активації Windows 8 зберігається в системному реєстрі, але не у відкритому вигляді, а в зашифрованому (кодування основа 24). І в принципі його можна звідти витягти, розшифрувати і переписати на папірець. Інформація про ключі зберігається в ключі реєстру HKLM SOFTWARE Microsoft Windows NT CurrentVersion DigitalProductId, Нам потрібно лише його витягти і розшифрувати.
У загальному випадку активоване ключ можна витягти через WMI. Зробити це можна без використання сторонніх програм засобами, засобами вже наявними в складі ОС Windows 8: VBScrit і Powershell. Нижче наведемо обидва способи, що дозволяють визначити ключ Windows 8.
Отримуємо ключ активації Windows 8 за допомогою VBScript
- Створіть новий текстовий файл з ім’ям get_windows_8_key.vbs і збережіть його на робочому столі
- Вставте в нього наступний код
Set WshShell = CreateObject("WScript.Shell") regKey = "HKLMSOFTWAREMicrosoftWindows NTCurrentVersion" DigitalProductId = WshShell.RegRead(regKey & "DigitalProductId") Win8ProductName = "Windows Product Name: " & WshShell.RegRead(regKey & "ProductName") & vbNewLine Win8ProductID = "Windows Product ID: " & WshShell.RegRead(regKey & "ProductID") & vbNewLine Win8ProductKey = ConvertToKey(DigitalProductId) strProductKey ="Windows 8 Key: " & Win8ProductKey Win8ProductID = Win8ProductName & Win8ProductID & strProductKey MsgBox(Win8ProductKey) MsgBox(Win8ProductID) 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 8 Release Preview.
Готовий vbs скрипт можна скачати тут: get_windows_8_key_vbs.zip.
Як дізнатися ключ активації Windows 8 за допомогою Powershell
Дізнатися ключ встановленою Windows 8 можна також за допомогою Powerhell.
- Створіть файл з розширенням get_windows_8_key.ps1 і скопіюйте в нього наступний код:
function Get-WindowsKey { ## get the Windows Product Key from any PC param ($targets = ".") $hklm = 2147483650 $regPath = "SoftwareMicrosoftWindows NTCurrentVersion" $regValue = "DigitalProductId" Foreach ($target in $targets) { $productKey = $null $win32os = $null $wmi = [WMIClass]"\$targetrootdefault:stdRegProv" $data = $wmi.GetBinaryValue($hklm,$regPath,$regValue) $binArray = ($data.uValue)[52..66] $charsArray = "B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9" ## decrypt base24 encoded binary data For ($i = 24; $i -ge 0; $i--) { $k = 0 For ($j = 14; $j -ge 0; $j--) { $k = $k * 256 -bxor $binArray[$j] $binArray[$j] = [math]::truncate($k / 24) $k = $k % 24 } $productKey = $charsArray[$k] + $productKey If (($i % 5 -eq 0) -and ($i -ne 0)) { $productKey = "-" + $productKey } } $win32os = Get-WmiObject Win32_OperatingSystem -computer $target $obj = New-Object Object $obj | Add-Member Noteproperty Computer -value $target $obj | Add-Member Noteproperty Caption -value $win32os.Caption $obj | Add-Member Noteproperty CSDVersion -value $win32os.CSDVersion $obj | Add-Member Noteproperty OSArch -value $win32os.OSArchitecture $obj | Add-Member Noteproperty BuildNumber -value $win32os.BuildNumber $obj | Add-Member Noteproperty RegisteredTo -value $win32os.RegisteredUser $obj | Add-Member Noteproperty ProductID -value $win32os.SerialNumber $obj | Add-Member Noteproperty ProductKey -value $productkey $obj } }
- Запустіть командний рядок з правами адміністратора і для відкриття консолі PoSh виконайте в ній команду powershell
- У вікні потрібно дозволити виконання непідписаних скриптів командою:
Set-ExecutionPolicy RemoteSigned
- виконайте команди
Import-Module d:myfile.ps1; Get-WindowsKey
- В результаті у вікні Powershell відобразиться ключ встановленою Windows
- Якщо потрібно дізнатися ключі активації на віддалених комп’ютерах, скористайтеся командою Get-WindowsKey «computer1», «serv-dc2», «romp-buh02»
Готовий powershell скрипт знаходиться тут: get_windows_8_key_ps.zip
## Декларация функции получения ключа продукта Windows
## Скрипт предназначен PowerShell версии 2.0 (актуальна для всех версии Windows)
Function Get-WindowsProduct {
## Функция возвращает ключ установленной Windows с любой машины в сети, плюс краткую инфу по установленной версии. Вызов без ключей подразумевает обращение к хосту
param ($Targets = [System.Net.Dns]::GetHostName())
function PIDDecoderFromRegistry($digitalProductId) {
New-Variable -Name base24 -Value 'BCDFGHJKMPQRTVWXY2346789' ## -Option Const ## <24> символа использующиеся в ключах продукта Windows и Office
New-Variable -Name decodeStringLength -Value 24 ## -Option Const ## ‘Чистая’ длина зашифрованного ключа продукта
New-Variable -Name decodeLength -Value 14 ## -Option Const ## Длина зашифрованного ключа продукта в байтах (символы хранятся в полубайтах)
New-Variable -Name decodedKey -Value ([System.String]::Empty) ## Строка содержащая расшифрованный ключ продукта
## Проверка, содержит ли ключ продукта ‘N’ (такое возможно для Windows 8 и Office 15)
$containsN = ($digitalProductId[$decodeLength] / 8) -bAnd 1 ## ($digitalProductId[$decodeLength] -shr 3) -bAnd 1 ## PS 4.0
$digitalProductId[$decodeLength] = [System.Byte]($digitalProductId[$decodeLength] -bAnd [System.Convert]::ToByte('F7', 16)) ## 247
## Собственно процесс расшифровки
for ($i = $decodeStringLength; $i -ge 0; $i--)
{
$digitMapIndex = 0
for ($j = $decodeLength; $j -ge 0; $j--)
{
$digitMapIndex = $digitMapIndex * 256 -bXor $digitalProductId[$j] ## $digitMapIndex -shl 8 -bXor $digitalProductId[$j] ## PS 4.0
$digitalProductId[$j] = [System.Math]::Truncate($digitMapIndex / $base24.Length)
$digitMapIndex = $digitMapIndex % $base24.Length
}
$decodedKey = $decodedKey.Insert(0, $base24[$digitMapIndex])
}
## Удаление первого символа в ключе и помещение ‘N’ в нужную позицию
if ([System.Boolean]$containsN)
{
$firstLetterIndex = 0
for ($index = 0; $index -lt $decodeStringLength; $index++)
{
if ($decodedKey[0] -ne $base24[$index]) {continue}
$firstLetterIndex = $index
break
}
$keyWithN = $decodedKey
$keyWithN = $keyWithN.Remove(0, 1)
$keyWithN = $keyWithN.Substring(0, $firstLetterIndex) + 'N' + $keyWithN.Remove(0, $firstLetterIndex)
$decodedKey = $keyWithN;
}
$returnValue = $decodedKey
## Вставка тире через каждые пять символов
for ($t = 20; $t -ge 5; $t -= 5)
{
$returnValue = $returnValue.Insert($t, '-')
}
return $returnValue
}
## Main
New-Variable -Name hklm -Value 2147483650 ## -Option Const
New-Variable -Name regPath -Value 'SoftwareMicrosoftWindows NTCurrentVersion' ## -Option Const
New-Variable -Name regValue -Value 'DigitalProductId' ## -Option Const
Foreach ($target in $Targets) {
$win32os = $null
$wmi = [WMIClass]"\$targetrootdefault:stdRegProv"
$binArray = $wmi.GetBinaryValue($hklm,$regPath,$regValue).uValue[52..66]
$win32os = Get-WmiObject -Class 'Win32_OperatingSystem' -ComputerName $target
$product = New-Object -TypeName System.Object
## Конструктор
$product | Add-Member -MemberType 'NoteProperty' -Name 'Computer' -Value $target
$product | Add-Member -MemberType 'NoteProperty' -Name 'Caption' -Value $win32os.Caption
$product | Add-Member -MemberType 'NoteProperty' -Name 'CSDVersion' -Value $win32os.CSDVersion
$product | Add-Member -MemberType 'NoteProperty' -Name 'OSArch' -Value $win32os.OSArchitecture
$product | Add-Member -MemberType 'NoteProperty' -Name 'BuildNumber' -Value $win32os.BuildNumber
$product | Add-Member -MemberType 'NoteProperty' -Name 'RegisteredTo' -Value $win32os.RegisteredUser
$product | Add-Member -MemberType 'NoteProperty' -Name 'ProductID' -Value $win32os.SerialNumber
$product | Add-Member -MemberType 'NoteProperty' -Name 'ProductKey' -Value (PIDDecoderFromRegistry($binArray))
Write-Output $product
}
} ## End Get-WindowsProduct
Описані вище методики, що дозволяють дізнатися ключ встановленої Windows, працюватимуть на всіх системах з ОС: Windows XP, Vista, Windows 7 і Windows 8.