Categories: windows

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

В общем случае активированный ключ можно извлечь через 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.

Готовый 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
  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
admin

Recent Posts

How to back up and restore the ESXi host configuration

Original https://kb.vmware.com/s/article/2042141 Backing up ESXi host configuration data To synchronize the configuration changed with persistent…

11 месяцев ago

vCenter Converter Standalone download

vCenter Converter Standalone 6.6.0 download (далее…)

12 месяцев ago

VMware remote console (VMRC) 12 download

VMware remote console (VMRC) 12.0.5 download Last version: VMware Remote Console 12.0.5  28 NOV 2023…

2 года ago

Mysql calculate row size for all tables

SELECT col_sizes.TABLE_SCHEMA, col_sizes.TABLE_NAME, SUM(col_sizes.col_size) AS EST_MAX_ROW_SIZE FROM ( SELECT cols.TABLE_SCHEMA, cols.TABLE_NAME, cols.COLUMN_NAME, CASE cols.DATA_TYPE WHEN…

2 года ago

Mysql change date format in database

UPDATE DB SET column = DATE(STR_TO_DATE(column, '%Y-%d-%m')) WHERE DATE(STR_TO_DATE(column, '%d-%m-%Y')) <> '0000-00-00'

2 года ago

esxi debian lvm extend partition

echo 1 > /sys/class/block/sda/device/rescan #maybe run under root> sudo fdisk /dev/sda2 > d > 2…

2 года ago