Как узнать ключ активации установленной системы на Windows 10, 8.1, 8, 7, Vista

001

Довольно специфическая тема и нужна очень и очень редко, но так как этот сайт и создавался как архив полезных знаний, данная статья обязательно должна была здесь появиться. Итак, кому может понадобиться данная статья? В первую очередь тем, кто потерял или уничтожил свой ключ продукта. Та же наклейка на ноутбуках со временем может стереться, и это создаст определенную долю проблемы при переустановке системы, так как придется покупать новую лицензионную систему. Именно в данном случае понадобится данная статья, так как вы с помощью пары кликов сможете увидеть и перезаписать в более надежное место ваш ключ Windows. Работает на любой операционной системе, в том числе на Windows 8.1 и 8. После прочтения данной статьи вам можно быть интересна статья об отключении запроса ключа активации во время установки системы.

Инструкция состоит из двух частей:
1) Определение ключа Windows через VBScript.
2) Определение ключа активации Windows с помощью PowerShell.

Определение ключа установленной системы Windows через VBScript.

1) Создаем в любом удобном месте текстовый файл. Называем его WindowsKey (в конце данного способа доступен для скачки готовый файл, но все же рекомендую создавать файл самому, так как при архивации почему-то теряется кодировка и не всегда ее получается восстановить).

Создаем в любом удобном месте текстовый файл. Называем его WindowsKey.

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) Меняем расширение файла на .vbs. По ссылке доступна инструкция по изменению расширения файла.

Меняем расширение файла на .vbs

4) Открываем файл двойным кликом. Появится окно с вашим ключом активации.

Открываем файл двойным кликом. Появится окно с вашим ключом активации.

Нажимаете ОК и появляется окно с более подробной информацией.

Нажимаете ОК и появляется окно с более подробной информацией.

Для упрощения своей жизни, вы можете скачать готовый файл по ссылке: WindowsKey.vbs

2) Определение ключа активации Windows с помощью PowerShell.

Есть ещё и альтернативный способ — это использование оболочки PowerShell. Но для начала нам нужно подготовить модуль для неё.

1) Создаем текстовый файл и называем его module (готовый файл модуля: module.ps1).

Создаем текстовый файл и называем его module.

2) Открываем его текстовым редактором и вставляем следующий код:

## Декларация функции получения ключа продукта 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

Сохраняем файл.

Вставляем код и сохраняем файл

3) Меняем расширение файла на .ps1 (инструкция по смене расширения файла).

Меняем расширение файла на .ps1

4) Открываем командную строку от имени администратора. В Windows 8 и 8.1 для этого кликаем правой клавишей по углу «Пуск» и выбираем «Командная строка (Администратор)» в более ранних системах пользуемся поиском в меню пуск, вводим cmd.exe и запускаем файл от имени администратора (правой клавишей).

Открываем командную строку от имени администратора. В Windows 8 и 8.1 для этого кликаем правой клавишей по углу "Пуск" и выбираем "Командная строка (Администратор)" в более ранних системах пользуемся поиском в меню пуск, вводим cmd.exe и запускаем файл от имени администратора (правой клавишей).

4) Запускаем оболочку PowerShell введя команду powershell. В начале строки появляются буквы PS.

Запускаем оболочку PowerShell введя команду powershell. В начале строки появляются буквы PS.

5) Даём разрешение на выполнение неподписанных скриптов, для этого вводим команду:

Set-ExecutionPolicy RemoteSigned

И жмём Enter.

Даём разрешение на выполнение неподписанных скриптов

6) Далее подключаем наш модуль, вводим команду типа:

Import-Module "*путь_до_вашего_файла*"

В моем случае это будет выглядеть вот так Import-Module «D:\Windows key\module.ps1» и жмём Enter.
Если вы создавали файл с помощью блокнота, а не скачали готовый файл доступный по ссылке в первом пункте, то с большой долей вероятности у вас показало следующую ошибку:
Если у вас показало следующую ошибку
Нажмите по файлу модуля правой клавишей и выберите «Изменить»:

013

Запустится PowerShell ISE. В нём сразу жмите кнопку «Сохранить» и закрывайте программу, он изменит кодировку.

Запустится PowerShell ISE. В нём сразу жмите кнопку "Сохранить" и закрывайте программу, он изменит кодировку

После этого модуль подключится без ошибок.

После этого модуль подключится без ошибок.

7) Вводим команду на выполнение скрипта:

Get-WindowsProduct

Скрипт отобразит в командной строке подробную информацию об активации системы.

Скрипт отобразит в командной строке подробную информацию об активации системы.

Альтернативный скрипт для PowerShell работающий на Windows 7 и более ранних системах.

На более старых системах последний скрипт может работать некорректно, поэтому предоставляю другой вариант скрипта: moduleWin7.ps1

На этом всё. Надеюсь эта статья оказалась вам полезной, нажмите одну из кнопок ниже, чтобы рассказать о ней друзьям. Также подпишитесь на обновления сайта, введя свой e-mail в поле справа или подписавшись на группу в Вконтакте.

Спасибо за внимание :)

Материал сайта Skesov.ru