Jak znaleźć klucz aktywacyjny zainstalowanego pakietu MS Office

Klucz instalacyjny pakietu Microsoft Office aktywacja produktu jest nadal przechowywana w rejestrze systemu. Dla ochrony klucz produktu nie jest przechowywany w otwartym, ale w zaszyfrowanym przez kodowanie Base64 forma Ta metoda kodowania nie jest trwała, więc łatwo ją wyodrębnić za pomocą prostego skryptu (w artykule opisującym sposób wyodrębnienia klucza instalacyjnego systemu Windows 8 przeanalizowaliśmy podobną technikę). W tym artykule pokażemy, jak uzyskać kod aktywacyjny już zainstalowanej kopii pakietu MS Office za pomocą skryptów PowerShell i vbs bez użycia narzędzi innych firm.

Skrypty te są wygodne w użyciu w przypadku utraty dokumentów lub naklejek za pomocą kluczy instalacyjnych pakietu Microsoft Office.

Najpierw rozważ skrypt pobierania klucza programu PowerShell

  1. Utwórz nowy plik tekstowy (w tym samym notatniku.exe)
  2. Skopiuj do niego następujący kod:
    funkcja Get-MSOfficeProductKey parametr ([ciąg []] $ nazwa_komputera = ".") $ produkt = @ () $ hklm = 2147483650 $ ścieżka = foreach "SOFTWARE \ Microsoft \ Office" ($ komputer w $ nazwa_komputera) $ wmi = [WMIClass] "\\ $ computer \ root \ default: stdRegProv" $ subkeys1 = $ wmi.EnumKey ($ hklm, $ path) foreach ($ subkey1 w $ subkeys1.snames) $ subkeys2 = $ wmi.EnumKey ($ hklm, „$ path \ $ subkey1”) foreach ($ subkey2 w $ subkeys2.snames) $ subkeys3 = $ wmi.EnumKey ($ hklm, "$ path \ $ subkey1 \ $ subkey2") foreach ($ subkey3 w $ subkeys3 .snames) $ subkeys4 = $ wmi.EnumValues ​​($ hklm, „$ path \ $ subkey1 \ $ subkey2 \ $ subkey3”) foreach ($ subkey4 w $ subkeys4.snames) if ($ subkey4 -eq „digitalproductid”) $ temp = "" | wybierz ComputerName, ProductName, ProductKey $ temp.ComputerName = $ computer $ productName = $ wmi.GetStringValue ($ hklm, „$ ścieżka \ $ subkey1 \ $ subkey2 \ $ subkey3”, „nazwa produktu”) $ temp.ProductName = $ productName. sValue $ data = $ wmi.GetBinaryValue ($ hklm, „$ path \ $ subkey1 \ $ subkey2 \ $ subkey3”, „digitalproductid”) $ valueData = ($ data.uValue) [52 ... 66] # odszyfruj dane binarne zakodowane w base24 $ productKey = "" $ chars = "BCDFGHJKMPQRTVWXY2346789" dla ($ i = 24; $ i -ge 0; $ i--) $ r = 0 dla ($ j = 14; $ j -ge 0; $ j- -) $ r = ($ r * 256) -bxor $ valueData [$ j] $ valueData [$ j] = [matematyka] :: Obetnij ($ r / 24) $ r = $ r% 24 $ productKey = $ chars [$ r] + $ productKey if (($ i% 5) -eq 0 - i $ i -ne 0) $ productKey = "-" + $ productKey $ temp.ProductKey = $ productKey $ produkt + = $ temp $ produkt 
  3. Zapisz plik z rozszerzeniem .ps1
  4. W zależności od wersji MS Office: jeśli używasz 32-bitowej wersji pakietu Office, uruchom 32-bitową konsolę PowerShell jako administrator. W przypadku korzystania z 64-bitowego pakietu Office uruchom 64-bitową konsolę PowerShell.Porady. Pakiet Office 2007 i starsze są tylko 32-bitowe. Office 2010, 2013 i 2016 - dostępne są wersje 32- i 64-bitowe. 64-bitowej wersji pakietu Office nie można zainstalować w 32-bitowym systemie Windows.
  5. W naszym przykładzie 32-bitowa wersja pakietu Office jest zainstalowana w 64-bitowym systemie Windows, dlatego uruchamiamy Windows PoweShell (x86).
  6. Włącz lokalne uruchamianie niepodpisanych skryptów:Set-ExecutionPolicy RemoteSignedPo wyświetleniu monitu naciśnij Y i Enter.
  7. Importujemy wcześniej zapisany skrypt za pomocą polecenia i wywołujemy z niego funkcję:Moduł importu C: \ Tools \ getmsofficekey.ps1; Get-MSOfficeProductKey
  8. Na ekranie powinien pojawić się znak zawierający informacje o wszystkich zainstalowanych wersjach pakietu Office. Pole ProductName będzie zawierać nazwę zainstalowanego produktu, a pole ProductKey będzie zawierać klucz aktywacyjny.

Gotowy skrypt Powershell można pobrać tutaj: getmsofficekey-posh.zip

Podobny skrypt do pobierania kluczy ProducId i MS Office na Vbscript

Const HKLM = & H80000002 Computer = "." Ustaw objWMIService = GetObject ("winmgmts: \\" & Computer & "\ root \ cimv2") Ustaw Obj = objWMIService.ExecQuery („Wybierz * z Win32_OperatingSystem”) przyciemnij InsDate dla każdego elementu w Obj InsDate = item.InstallDate 'Gather Operating Informacje o systemie Caption = Item.Caption OSArchitecture = Item.OSArchitecture CSDVersion = Item.CSDVersion Wersja = Item.Version Następny dim NewDate NewDate = mid (InsDate, 9,2) i „:” i mid (InsDate, 11,2) i „ : "& mid (InsDate, 13,2) NewDate = NewDate &" "& mid (InsDate, 7,2) &" / "& mid (InsDate, 5,2) &" / "& mid (InsDate, 1, 4) wscript.echo 'vbCrLf & "Klucze biurowe" i vbCrLf QueryOfficeProductKeys () Funkcja DecodeProductKey (arrKey, intKeyOffset) Jeśli nie IsArray (arrKey) Następnie wyjdź z funkcji intIsWin8 = BitShiftRight (arrKey) i 1 intKeyOffset + 14) = arrKey (intKeyOffset + 14) i 247 lub BitShiftLeft (intIsWin8 i 2,2) i = 24 strChars = "BCDFGHJKMPQRTVWXY2346789" strKeyOutput = "" Podczas gdy i> -1 intCur = 0 intX = 14 intCur = BitShiftLeft (i ntCur, 8) intCur = arrKey (intX + intKeyOffset) + intCur arrKey (intX + intKeyOffset) = Int (intCur / 24) intCur = intCur Mod 24 intX = intX - 1 Wend i = i - 1 strKeyOutput = Mid (strChars, intCur + 1,1) i strKeyOutput intLast = intCur Wend Jeśli intIsWin8 = 1, to strKeyOutput = Mid (strKeyOutput, 2, intLast) i „N” i prawo (strKeyOutput, Len (strKeyOutput) - (intLast + 1)) End If strKeyGUIDOutput = Mid (strKeyOutput, 1.5) i „-” i Mid (strKeyOutput, 6.5) i „- i Mid (strKeyOutput, 11.5) i„ - ”i Mid (strKeyOutput, 16.5) i„ - "& Mid (strKeyOutput, 21,5) DecodeProductKey = strKeyGUIDOutput Funkcja końcowa Funkcja RegReadBinary (strRegPath, strRegValue) Ustaw objReg = GetObject (" winmgmts: impersonationLevel = personifikacja! \\. \ Root \ default: StegreegegPPer HKLM, strRegPath, strRegValue, arrRegBinaryData RegReadBinary = arrRegBinaryData Set objReg = Nic Funkcja końcowa Funkcja BitShiftLeft (intValue, intShift) BitShiftLeft = intValue * 2 ^ intShift Funkcja końcowaShift BitShiftRight (intValhi ftRight = Int (intValue / (2 ^ intShift)) End Funkcja Funkcja QueryOfficeProductKeys () strBaseKey = "SOFTWARE \" strOfficeKey = strBaseKey & "Microsoft \ Office" Ustaw objReg = GetObject ("winmgmts: impersonationLevel = personifikacja!)! \ root \ default: StdRegProv ") objReg.EnumKey HKLM, strOfficeKey, arrOfficeVersionSubKeys intProductCount = 1 Jeśli IsArray (arrOfficeVersionSubKeys) Następnie dla każdego strOfficeVersionKey W arrOfficeVersionSubKeys Select Case strOfficeVersionKey Case" 11,0 "CheckOfficeKey strOfficeKey &" \ 11.0 \ Registration”, 52, intProductCount Sprawa „12.0” CheckOfficeKey strOfficeKey & "\ 12.0 \ Registration", 52, intProductCount Sprawa "14.0" CheckOfficeKey strOfficeKey & "\ 14.0 \ Registration", 808, intProductCount Sprawa "15.0" CheckOfficeKey strOfficeKey & "\ 15.0 \ Rejestracja", 808, intProductCount End Wybierz Następny koniec Jeśli strBaseKey = "SOFTWARE \ Wow6432Node \" strOfficeKey = strBaseKey & "Microsoft \ Office" Ustaw objReg = GetObject ("winmgmts: impersonationLevel = personifikacja! \\. \ root \ default: StdRegProv" ob Reg.EnumKey HKLM, strOfficeKey, arrOfficeVersionSubKeys intProductCount = 1 If IsArray (arrOfficeVersionSubKeys) Następnie dla każdego strOfficeVersionKey W arrOfficeVersionSeyKeyKeyKeyKeyKey01eyKeyKeyKeyKey 11 Klucz \ 12.0 \ Registration ", 52, intProductCount Case" 14.0 "CheckOfficeKey strOfficeKey &" \ 14.0 \ Registration ", 808, intProductCount Case" 15.0 "CheckOfficeKey strOfficeKey &" \ 15.0 \ Registration ", 808, intProductCount Koniec Wybierz następny koniec Jeśli funkcja kończy się Funkcja „Kluczowe wyrobów Sub CheckOfficeKey (strRegPath, intKeyOffset, intProductCount) Zestaw objReg = GetObject ( "winmgmts: impersonationLevel = podszywać \\ \ root \ default:!. StdRegProv") objReg.EnumKey HKLM, strRegPath, arrOfficeRegistrations If IsArray (arrOfficeRegistrations ) Następnie dla każdego strOfficeRegistration W arrOfficeRegistrations objReg.GetStringValue HKLM, strRegPath & "\" & strOfficeRegistration, "ConvertToEdition", strOfficeEdit jony intProductCount + 1 End If Next End If End Funkcja podrzędna RegReadBinary (strRegPath, strRegValue) Ustaw objReg = GetObject ("winmgmts: impersonationLevel = personifikacja! \\. \ root \ default: StdRegProv,) , arrRegBinaryData RegReadBinary = arrRegBinaryData Ustaw objReg = Nic Funkcja końcowa Funkcja OsArch () Ustaw objShell = WScript.CreateObject ("WScript.Shell") If objShell.ExpandEnvironmentStrings ("% ProgramFiles (x86)%") = "% ProgramFiles () "Następnie OsArch =" x86 "W przeciwnym razie OsArch =" x64 "End If Set objShell = Nic Funkcja końcowa Sub WriteData (strProperty, strValue) WScript.Echo strProperty &": "& Trim (strValue) End Sub 

Gotowy plik * .vbs: get-office-keys-vbs.zip

Otrzymany klucz sprawdzimy za pomocą standardowej funkcji, która pozwala wyświetlić 5 ostatnich znaków klucza. W 32-bitowym pakiecie Office w 64-bitowym systemie Windows polecenie brzmi:

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

Część klucza musi pasować do poprzednich danych.

Uwaga. Na zrzucie ekranu pakietu Office 2010, aktywowanego kluczem KMS).

SKU ID: 6f327760-8c5c-417c-9b61-836a98287e0c
NAZWA LICENCJI: Office 14, OfficeProPlus-KMS_Client edycja
OPIS LICENCJI: Office 14, kanał VOLUME_KMSCLIENT
STATUS LICENCJI: --- LICENCJONOWANY---
KOD BŁĘDU: 0 zgodnie z licencją
Ostatnie 5 znaków zainstalowanego klucza produktu: H3GVB
POZOSTAŁA ŁASKA: 178 dni (255897 minut przed wygaśnięciem)