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
- Utwórz nowy plik tekstowy (w tym samym notatniku.exe)
- 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
- Zapisz plik z rozszerzeniem .ps1
- 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.
- W naszym przykładzie 32-bitowa wersja pakietu Office jest zainstalowana w 64-bitowym systemie Windows, dlatego uruchamiamy Windows PoweShell (x86).
- Włącz lokalne uruchamianie niepodpisanych skryptów:
Set-ExecutionPolicy RemoteSigned
Po wyświetleniu monitu naciśnij Y i Enter. - Importujemy wcześniej zapisany skrypt za pomocą polecenia i wywołujemy z niego funkcję:
Moduł importu C: \ Tools \ getmsofficekey.ps1; Get-MSOfficeProductKey
- 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)