- Отримуємо ключ активації Windows 8 за допомогою VBScript
- Як дізнатися ключ активації Windows 8 за допомогою Powershell
У цій статті ми поговоримо про те, як можна дізнатися ключ 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
- Створіть новий текстовий файл з ім'ям get_windows_8_key.vbs і збережіть його на робочому столі
- Вставте в нього наступний код 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
- Двічі клацніть по файлу, після чого має з'явитися вікно, з відображеним в ньому ключем продукту. У нашому випадку система активована ключем 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 = "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}}
- Запустіть командний рядок з правами адміністратора і для відкриття консолі 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
Ще одна версія Powershell скрипта з коментарів від akaNeo ## Декларація функції отримання ключа продукту 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Описані вище методики, що дозволяють дізнатися ключ встановленої Windows, працюватимуть на всіх системах з ОС: Windows XP, Vista, Windows 7 і Windows 8.
Як в цьому випадку можна програмно знайти ключ Windows 8, щоб можна було в подальшому при перевстановлення системи її знову активувати?