Как да разберете ключа за активиране на инсталиран MS Office

Ключ за инсталиране на Microsoft Office след активирането на продукта продължава да се съхранява в системния регистър. За защита ключът на продукта не се съхранява на открито, а в криптиран чрез кодиране Base64 а. Този метод на кодиране не е устойчив, така че е лесно да го извлечете с помощта на обикновен скрипт (разгледахме подобна техника в статията, която описва как да извлечете инсталационния ключ на Windows 8). В тази статия ще покажем как да вземем кода за активиране на вече инсталирано копие на MS Office с помощта на PowerShell и vbs скриптове, без да използваме помощни програми на трети страни.

Тези скриптове са удобни за използване при загуба на документи или стикери с инсталационни ключове за Microsoft Office.

Първо, помислете за скрипта за извличане на ключ PowerShell

  1. Създайте нов текстов файл (в същия notepad.exe)
  2. Копирайте следния код в него:
    функция Get-MSOfficeProductKey param ([string []] $ computerName = ".") $ product = @ () $ hklm = 2147483650 $ path = "SOFTWARE \ Microsoft \ Office" foreach ($ компютър в $ computerName) $ wmi = [WMIClass] "\\ $ computer \ root \ default: stdRegProv" $ subkeys1 = $ wmi.EnumKey ($ hklm, $ path) foreach ($ subkey1 in $ subkeys1.snames) $ subkeys2 = $ wmi.EnumKey ($ hklm, "$ path \ $ subkey1") foreach ($ subkey2 в $ subkeys2.snames) $ subkeys3 = $ wmi.EnumKey ($ hklm, "$ path \ $ subkey1 \ $ subkey2") foreach ($ subkey3 в $ subkeyys3 .snames) $ subkeys4 = $ wmi.EnumValues ​​($ hklm, "$ path \ $ subkey1 \ $ subkey2 \ $ subkey3") foreach ($ subkey4 в $ subkeys4.snames) if ($ subkey4 -eq "digitalproductid") $ temp = "" | изберете ComputerName, ProductName, ProductKey $ temp.ComputerName = $ computer $ productName = $ wmi.GetStringValue ($ hklm, "$ path \ $ subkey1 \ $ subkey2 \ $ subkey3", "name name") $ temp.ProductName = $ productName. sValue $ data = $ wmi.GetBinaryValue ($ hklm, "$ path \ $ subkey1 \ $ subkey2 \ $ subkey3", "digitalproductid") $ valueData = ($ data.uValue) [52 ... 66] # дешифриране base24 кодирани двоични данни $ productKey = "" $ chars = "BCDFGHJKMPQRTVWXY2346789" за ($ i = 24; $ i -ge 0; $ i--) $ r = 0 за ($ j = 14; $ j -ge 0; $ j- -) $ r = ($ r * 256) -bxor $ valueData [$ j] $ valueData [$ j] = [math] :: Орязване ($ r / 24) $ r = $ r% 24 $ productKey = $ chars [$ r] + $ productKey if (($ i% 5) -eq 0 -и $ i -ne 0) $ productKey = "-" + $ productKey $ temp.ProductKey = $ productKey $ product + = $ temp $ продукт 
  3. Запишете файла с разширението .ps1
  4. В зависимост от версията на MS Office: ако използвате 32-битова версия на Office, стартирайте 32-битовата конзола PowerShell като администратор. В случай че използвате 64-битов Office, стартирайте 64-битната конзола PowerShell.Съвети. Office 2007 и по-нови са само 32-битови. Office 2010, 2013 и 2016 - има и 32, и 64 бита. 64-битова версия на Office не може да бъде инсталирана на 32-битов Windows.
  5. В нашия пример 32-битова версия на Office е инсталирана на 64-битов Windows, така че стартираме Windows PoweShell (x86).
  6. Активиране на локално стартиране на неподписани скриптове:Set-ExecutionPolicy RemoteSignedКогато бъдете подканени, натиснете Y и Enter.
  7. Импортираме предварително запазения скрипт с командата и извикваме функцията от нея:Импорт-модул C: \ Tools \ getmsofficekey.ps1; Get-MSOfficeProductKey
  8. На екрана трябва да се появи знак, съдържащ информация за всички инсталирани версии на Office. Полето ProductName ще съдържа името на инсталирания продукт, а полето ProductKey ще съдържа ключа за активиране.

Готов скрипт на Powershell можете да изтеглите тук: getmsofficekey-posh.zip

Подобен скрипт, за да получите ключове ProducId и MS Office на Vbscript

Const HKLM = & H80000002 Компютър = "." Задайте objWMIService = GetObject ("winmgmts: \\" & Computer & "\ root \ cimv2") Задайте Obj = objWMIService.ExecQuery ("Изберете * от Win32_OperatingSystem") dim InsDate за всеки елемент в Obj InsDate = item.InstallDate 'Gather' Надпис за системна информация = Item.Caption OSArchitecture = Item.OSArchitecture CSDVersion = Item.CSDVersion Версия = Item.Version Следващ dim NewDate NewDate = mid (InsDate, 9,2) & ":" & mid (InsDate, 11,2) & " : "& mid (InsDate, 13,2) NewDate = NewDate &" "& mid (InsDate, 7,2) &" / "& mid (InsDate, 5,2) &" / "& mid (InsDate, 1, 4) wscript.echo 'vbCrLf & "Офисни ключове" & vbCrLf QueryOfficeProductKeys () Функция DecodeProductKey (arrKey, intKeyOffset) Ако не е IsArray (arrKey), тогава излезте от функцията intIsWin8 = AndShiftRyy (1) intKeyOffset + 14) = arrKey (intKeyOffset + 14) И 247 Или BitShiftLeft (intIsWin8 И 2,2) i = 24 strChars = "BCDFGHJKMPQRTVWXY2346789" strKeyOutput = "" Докато i> 0 intXur 14 intCur = BitShiftLeft (т.е. ntCur, 8) intCur = arrKey (intX + intKeyOffset) + intCur arrKey (intX + intKeyOffset) = Int (intCur / 24) intCur = intCur Mod 24 intX = intX - 1 Wend i = i - 1 strha + 1,1) & strKeyOutput intLast = intCur Wend Ако intIsWin8 = 1 Тогава strKeyOutput = Средно (strKeyOutput, 2, intLast) & „N“ & Право (strKeyOutput, Len (strKeyOutput) - (intLast + 1) GGU EndO strUeOeOUUOOUUOOUUOO str Mid (strKeyOutput, 1.5) & "-" & Mid (strKeyOutput, 6.5) & "- & Mid (strKeyOutput, 11.5) &" - ​​"& Mid (strKeyOutput, 16.5) &" - "& Mid (strKeyOutput, 21,5) DecodeProductKey = strKeyGUIDOutput End Function Function RegReadBinary (strRegPath, strRegValue) Задайте objReg = GetObject (" winmgmts: impersonationLevel = impersonate! \GgggggggggPggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggpgggdggdggggggggggggg "> & Mid (strKeyOutput, 21,5). HKLM, strRegPath, strRegValue, arrRegBinaryData RegReadBinary = arrRegBinaryData Задайте objReg = Нищо Крайна функция Функция BitShiftLeft (intValue, intShift) BitShiftLeft = intValue * 2 ^ intShiftShift Function ftRight = Int (intValue / (2 ^ intShift)) Крайна функция Функция QueryOfficeProductKeys () strBaseKey = "SOFTWARE \" strOfficeKey = strBaseKey & "Microsoft \ Office" Задайте objReg = GetObject ("winmgmtse: impersoLe! \ корен \ подразбиране: StdRegProv ") objReg.EnumKey HKLM, strOfficeKey, arrOfficeVersionSubKeys intProductCount = 1 Ако IsArray (arrOfficeVersionSubKeys) тогава за всеки един strOfficeVersionKey В arrOfficeVersionSubKeys Изберете дело strOfficeVersionKey дело" 11.0 "CheckOfficeKey strOfficeKey &" \ 11.0 \ Регистрация ", 52, intProductCount Дело "12.0" CheckOfficeKey strOfficeKey & "\ 12.0 \ Регистрация", 52, intProductCount Case "14.0" CheckOfficeKey strOfficeKey & "\ 14.0 \ Регистрация", 808, intProductCount Case "15.0" CheckOfficeKey strOfficeKey & 15 \ "80 \" intProductCount End Изберете следващ край Ако strBaseKey = "СОФТУЕР \ Wow6432Node \" strOfficeKey = strBaseKey & "Microsoft \ Office" Задайте objReg = GetObject ("winmgmts: impersonationLevel = impersonate! \\. \ root \ ob": " Reg.EnumKey HKLM, strOfficeKey, arrOfficeVersionSubKeys intProductCount = 1 Ако IsArray (arrOfficeVersionSubKeys) След това за всеки strOfficeVersionKey In arrOfficeVersionSeyKeyeeeeeeeeeeeeeeeeeeee \ 12.0 \ Регистрация ", 52, intProductCount Case" 14.0 "CheckOfficeKey strOfficeKey &" \ 14.0 \ Регистрация ", 808, intProductCount Case" 15.0 "CheckOfficeKey strOfficeKey &" \ 15.0 \ Регистрация ", 808, intProductCount End End Function Next End If "продукт Ключови Sub CheckOfficeKey (strRegPath, intKeyOffset, intProductCount) Set objReg = GetObject (" winmgmts: impersonationLevel = се представяте \\ \ корен \ подразбиране.: StdRegProv ") Офис objReg.EnumKey HKLM, strRegPath, arrOfficeRegistrations If IsArray (arrOfficeRegistrations ) След това за всяка strOfficeRegistration In arrOfficeRegistrations objReg.GetStringValue HKLM, strRegPath & "\" & strOfficeRegistration, "ConvertToEdition", strOfficeEdit йонна objReg.GetBinaryValue HKLM, strRegPath & "\" & strOfficeRegistration "DigitalProductID", arrProductID Ако strOfficeEdition "" А IsArray (arrProductID) След това WriteData "продукт", strOfficeEdition WriteData "Ключ", DecodeProductKey (arrProductID, intKeyOffset) и vbCrLf intProductCount = intProductCount + 1 End If Next End If End Sub Функция RegReadBinary (strRegPath, strRegValue) Задайте objReg = GetObject ("winmgmts: impersonationLevel = impersonate! \\. \ root \ default: StdRegProv,) , arrRegBinaryData RegReadBinary = arrRegBinaryData Задайте objReg = Нищо Крайна функция Функция OsArch () Задайте objShell = WScript.CreateObject ("WScript.Shell") Ако objShell.ExpandEnvironmentStrings ("% ProgramFiles (x86)" "Тогава OsArch =" x86 "Else OsArch =" x64 "Край, ако е зададен objShell = Нищо крайна функция Sub WriteData (strProperty, strValue) WScript.Echo strProperty &": "& Trim (strValue) End Sub 

Готов файл * .vbs файл: get-office-keys-vbs.zip

Ще проверим получения ключ с помощта на стандартна функция, която ви позволява да показвате последните 5 знака от ключа. За 32-битов Office в 64-битов Windows командата е:

cscript "C: \ Program Files (x86) \ Microsoft Office \ Office14 \ OSPP.VBS" / dstatus

Част от ключа трябва да съвпада с предишни данни.

забележка. На екрана на Office 2010, активиран от ключа KMS).

Идентификационен номер на SKU: 6f327760-8c5c-417c-9b61-836a98287e0c
ИМЕ НА ЛИЦЕНЗИЯ: Office 14, издание на OfficeProPlus-KMS_Client
ОПИСАНИЕ НА ЛИЦЕНЗИЯ: Office 14, канал VOLUME_KMSCLIENT
СТАТУТ НА ЛИЦЕНЗИЯ: --- ЛИЦЕНЗИРАН---
КОД НА ГРЕШКА: 0 като лицензиран
Последни 5 знака от инсталиран продуктов ключ: H3GVB
ОСТАВЯЩА ГРАЦИЯ: 178 дни (255897 минути (минути) преди да изтече)