Как узнать ключ Windows 8

В этой статье мы поговорим о том, как можно узнать ключ 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 на том же самом компьютере, на котором он был активирован впервые и ни на каком другом
  • Ключом retail можно активировать Windows 8 на любом компьютере, но только на одном одновременно

При покупке retail версии Windows 8 ключ продукта поставляется в виде наклейки, которую можно наклеить на системный блок или ноутбук, в случае покупке устройства с предустановленной Windows 8,  OEM— ключ уже будет приклеен к корпусу девайса. Эта наклейка называется Certificate of Authenticity (COA).

Как узнать ключ windows 8

Однако нередко случается, что по какой-либо «трагической причине», текст на такой лицензионной наклейке становится нечитаемым (пролился кофе, стерся об коленки, просто потерялся и т.д.). Как в этом случае можно программно найти  ключ Windows 8, чтобы можно было в дальнейшем при переустановке системы ее вновь активировать? Кроме того может возникнуть необходимость проверки системы на лицензионность и совпадение установленного в системе ключа и ключа на наклейке.

Ключ активации Windows 8 хранится в системном реестре, но не в открытом виде, а в  зашифрованном (кодировка base 24). И в принципе его можно оттуда извлечь, расшифровать и переписать на бумажку. Информация о ключе хранится в ключе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId, нам нужно лишь его извлечь и расшифровать.

Ключ Windows 8 хранится в реестре

В общем случае активированный ключ можно извлечь через WMI. Сделать это можно без использования сторонних программ средствами, средствами уже имеющимися в составе ОС Windows 8:VBScrit и Powershell. Ниже приведем оба способа, позволяющих определить ключ Windows 8.

Получаем ключ активации Windows 8 с помощью VBScript

  1. Создайте новый текстовый файл с именем get_windows_8_key.vbs и сохраните его на рабочем столе
  2. Вставьте в него следующий код
    Set WshShell = CreateObject("WScript.Shell")
    regKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
    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
  3. Дважды щелкните по файлу, после чего  должно появиться окно, с отображенным в нем ключом продукта. В нашем случае система активирована ключом Windows 8 Release Preview.

Получить ключ windows 8 с помощью vbs

Готовый vbs скрипт можно скачать тут:get_windows_8_key_vbs.zip.

Как узнать  ключ активации Windows 8 с помощью Powershell

Узнать ключ установленной Windows 8 можно также с помощью Powerhell.

  1. Создайте файл с расширением get_windows_8_key.ps1 и скопируйте в него следующий код:
    function Get-WindowsKey {
    ## get the Windows Product Key from any PC
     
    param ($targets = ".")
    $hklm = 2147483650
    $regPath = "Software\Microsoft\Windows NT\CurrentVersion"
    $regValue = "DigitalProductId"
    Foreach ($target in $targets) {
    $productKey = $null
    $win32os = $null
    $wmi = [WMIClass]"\\$target\root\default: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
    }
    }
  2. Запустите командную строку с правами администратора и для открытия консоли PoSh выполните в ней команду powershell
  3. В появившемся окне нужно разрешить выполнение неподписанных скриптов командой:
    Set-ExecutionPolicy RemoteSigned
  4. Выполните команды
    Import-Module d:\myfile.ps1;
    Get-WindowsKey
  5. В результате в окне Powershell отобразится ключ установленной Windowsкак найти ключ windows 8 с помощью powershell
  6. Если нужно узнать ключи активации на удаленных компьютерах,  воспользуйтесь командой Get-WindowsKey «computer1″, «serv-dc2″, «romp-buh02″

Готовый powershell скрипт находится тут:get_windows_8_key_ps.zip

Еще одна версия Powershell скрипта из комментариев от akaNeo
 
 
<pre escaped="true" lang="powershell">## Декларация функции получения ключа продукта 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 'Software\Microsoft\Windows NT\CurrentVersion' ## -Option Const
 
New-Variable -Name regValue -Value 'DigitalProductId' ## -Option Const
 
Foreach ($target in $Targets) {
 
$win32os = $null
 
$wmi = [WMIClass]"\\$target\root\default: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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.