Namestitveni ključ za Microsoft Office po aktivaciji izdelka se še naprej hrani v sistemskem registru. Zaradi zaščite ključ izdelka ni shranjen na odprtem, temveč v šifriranem kodiranju Baza64 obrazec. Ta metoda kodiranja ni obstojna, zato jo je enostavno izvleči s preprostim skriptom (podobno tehniko smo preučili v članku, ki opisuje, kako izvleči namestitveni ključ sistema Windows 8). V tem članku bomo pokazali, kako uporabljati skripte PowerShell in vbs brez uporabe drugih pripomočkov, da dobite aktivacijsko kodo že nameščene kopije MS Office.
Te skripte je priročno uporabljati pri izgubi dokumentov ali nalepk z namestitvenimi ključi za Microsoft Office.
Najprej razmislite o skriptu za iskanje ključa PowerShell
- Ustvari novo besedilno datoteko (v istem notepad.exe)
- Kopirajte vanjo naslednjo kodo:
funkcija Get-MSOfficeProductKey param ([string []] $ computerName = ".") $ product = @ () $ hklm = 2147483650 $ path = "SOFTWARE \ Microsoft \ Office" foreach ($ računalnik v $ computerName) $ wmi = [WMIClass] "\\ $ computer \ root \ default: stdRegProv" $ subkeys1 = $ wmi.EnumKey ($ hklm, $ path) foreach ($ subkey1 v $ subkeys1.snames) $ subkeys2 = $ wmi.EnumKey ($ hklm, "$ path \ $ subkey1") foreach ($ subkey2 v $ subkeys2.snames) $ subkeys3 = $ wmi.EnumKey ($ hklm, "$ path \ $ subkey1 \ $ subkey2") foreach ($ subkey3 v $ subkeyys3 .sname) $ subkeys4 = $ wmi.EnumValues ($ hklm, "$ path \ $ subkey1 \ $ subkey2 \ $ subkey3") foreach ($ subkey4 in $ subkeys4.snames) if ($ subkey4 -eq "digitalproductid") $ temp = "" | izberite ComputerName, ProductName, ProductKey $ temp.ComputerName = $ računalnik $ productName = $ wmi.GetStringValue ($ hklm, "$ path \ $ subkey1 \ $ subkey2 \ $ subkey3", "ime izdelka") $ temp.ProductName = $ productName. sValue $ data = $ wmi.GetBinaryValue ($ hklm, "$ path \ $ subkey1 \ $ subkey2 \ $ subkey3", "digitalproductid") $ valueData = ($ data.uValue) [52 ... 66] # dešifriraj base24 kodirane binarne podatke $ productKey = "" $ chars = "BCDFGHJKMPQRTVWXY2346789" za ($ i = 24; $ i -ge 0; $ i--) $ r = 0 za ($ j = 14; $ j -ge 0; $ j- -) $ r = ($ r * 256) -bxor $ valueData [$ j] $ valueData [$ j] = [math] :: Skrči ($ r / 24) $ r = $ r% 24 $ productKey = $ chars [$ r] + $ productKey, če (($ i% 5) -eq 0 -and $ i -ne 0) $ productKey = "-" + $ productKey $ temp.ProductKey = $ productKey $ product + = $ temp $ izdelek
- Datoteko shranite s pripono .ps1
- Odvisno od različice MS Office: če uporabljate 32-bitno različico sistema Office, zaženite 32-bitno konzolo PowerShell kot skrbnik. Če uporabljate 64-bitni Office, zaženite 64-bitno konzolo PowerShell.Nasveti. Office 2007 in novejši sta le 32-bitni. Office 2010, 2013 in 2016 - obstajata 32 in 64 bit. 64-bitne različice sistema Office ni mogoče namestiti v 32-bitnem sistemu Windows.
- V našem primeru je 32-bitna različica sistema Office nameščena v 64-bitnem sistemu Windows, zato zaženemo Windows PoweShell (x86).
- Omogoči lokalni zagon nepodpisanih skriptov:
Set-ExecutionPolicy RemoteSigned
Ko boste pozvani, pritisnite Y in Enter. - Z ukazom uvozimo predhodno shranjeni skript in iz njega pokličemo funkcijo:
Uvozni modul C: \ Orodja \ getmsofficekey.ps1; Get-MSOfficeProductKey
- Na zaslonu se mora pojaviti znak, ki vsebuje informacije o vseh nameščenih različicah sistema Office. Polje ProductName bo imelo nameščen izdelek, polje ProductKey pa bo vsebovalo aktivacijski ključ.
Pripravljen skript Powershell lahko prenesete tukaj: getmsofficekey-posh.zip
Podoben skript za pridobivanje tipk ProducId in MS Office na Vbscript
Const HKLM = & H80000002 Računalnik = "." Nastavite objWMIService = GetObject ("winmgmts: \\" & računalnik & "\ root \ cimv2") Nastavi Obj = objWMIService.ExecQuery ("Izberi * iz Win32_OperatingSystem") dim InsDate za vsak element v Obj InsDate = item.InstallDate 'Gather Opis informacij o sistemu = Item.Caption OSArchitecture = Item.OSArchitecture CSDVersion = Item.CSDVersion Version = Item.Version Next dim NewDate NewDate = sredina (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 & "Office Ključi" & vbCrLf QueryOfficeProductKeys () Funkcija DecodeProductKey (arrKey, intKeyOffset) Če ni IsArray (arrKey), potem Izhod iz funkcije intIsWin8 = AndShiftRyy (Arhiv) intKeyOffset + 14) = arrKey (intKeyOffset + 14) In 247 ali BitShiftLeft (intIsWin8 in 2,2) i = 24 strChars = "BCDFGHJKMPQRTVWXY2346789" strKeyOutput = "" Medtem ko i> 0 intXur 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 strhe intc + 1,1) & strKeyOutput intLast = intCur Wend Če intIsWin8 = 1 Potem strKeyOutput = Mid (strKeyOutput, 2, intLast) & "N" & Right (strKeyOutput, Len (strKeyOutput) - (intLast + 1) Konec If str str Sredina (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) Nastavite objReg = GetObject (" winmgmts: impersonationLevel = impersonate! \Ggggggggpggggg.ggggggg.ggg.ggggg.gggg.ggggg.ggggg.ggg.ggg.gggg.ggg.gggg.ggg.ggg.ggg.ggg.ggg.gg.ggg.gg.gg.gg.gg.gg.gg.gg.gg.gg.gg.gg.gggggggggg.ggg.gg.gggggggggggg .gggg. HKLM, strRegPath, strRegValue, arrRegBinaryData RegReadBinary = arrRegBinaryData Set objReg = Nič Končna funkcija Funkcija BitShiftLeft (intValue, intShift) BitShiftLeft = intValue * 2 ^ intShift Bit Funkcija ftRight = Int (intValue / (2 ^ intShift)) Končna funkcija Funkcija QueryOfficeProductKeys () strBaseKey = "SOFTWARE \" strOfficeKey = strBaseKey & "Microsoft \ Office" Nastavite objReg = GetObject ("winmgmtse impersoLe! impersoLe! impersoLe! \ koren \ default: StdRegProv ") objReg.EnumKey HKLM, strOfficeKey, arrOfficeVersionSubKeys intProductCount = 1 Če IsArray (arrOfficeVersionSubKeys) nato pa za vsako strOfficeVersionKey V arrOfficeVersionSubKeys Izberite Case strOfficeVersionKey" 11,0 "CheckOfficeKey strOfficeKey &" \ 11.0 \ registraciji ", 52, intProductCount Primer "12.0" CheckOfficeKey strOfficeKey & "\ 12.0 \ Registracija", 52, intProductCount Case "14.0" CheckOfficeKey strOfficeKey & "\ 14.0 \ Registracija", 808, intProductCount Case "15.0" Registracija CheckOfficeKey strOfficeKey & " intProductCount End Izberite Naslednji konec Če je strBaseKey = "SOFTWARE \ Wow6432Node \" strOfficeKey = strBaseKey & "Microsoft \ Office" nastavite objReg = GetObject ("winmgmts: impersonationLevel = impersonate! \\. \ root \ obd. \ \ Reg.EnumKey HKLM, strOfficeKey, arrOfficeVersionSubKeys intProductCount = 1 Če je IsArray (arrOfficeVersionSubKeys) Potem za vsako strOfficeVersionKey v arrOfficeVersionSeyKeyeKeyeeeeeeeeeee 11 \ 12.0 \ Registracija ", 52, intProductCount Case" 14.0 "CheckOfficeKey strOfficeKey &" \ 14.0 \ Registracija ", 808, intProductCount Case" 15.0 "CheckOfficeKey strOfficeKey &" \ 15.0 \ Registracija ", 808, intProductCount Function Izberi Naslednji konec Če konča "Pisarniški Izdelek Ključne Sub CheckOfficeKey (strRegPath, intKeyOffset, intProductCount) Set objReg = GetObject (" winmgmts: impersonationLevel = izdajali \\ \ koren \ privzeto:!. StdRegProv ") objReg.EnumKey HKLM, strRegPath, arrOfficeRegistrations če IsArray (arrOfficeRegistrations ) Potem za vsako strOfficeRegistration v arrOfficeRegistrations objReg.GetStringValue HKLM, strRegPath & "\" & strOfficeRegistration, "ConvertToEdition", strOfficeEdit ioni intProductCount + 1 konec, če je naslednji konec, če konča podfunkcija RegReadBinary (strRegPath, strRegValue) Nastavite objReg = GetObject ("winmgmts: impersonationLevel = impersonate! \\. \ root \ default: StdRegProv,) , arrRegBinaryData RegReadBinary = arrRegBinaryData Nastavi objReg = Nič končne funkcije Funkcija OsArch () Nastavi objShell = WScript.CreateObject ("WScript.Shell") Če objShell.ExpandEnvironmentStrings ("% ProgramFiles (x86)" "Potem OsArch =" x86 "Else OsArch =" x64 "Konec, če nastavite objShell = Nič končne funkcije Sub WriteData (strProperty, strValue) WScript.Echo strProperty &": "& Trim (strValue) End Sub
Pripravljena datoteka * .vbs datoteka: get-office-keys-vbs.zip
Prejeti ključ bomo preverili s standardno funkcijo, ki omogoča prikaz zadnjih 5 znakov ključa. Za 32-bitni Office v 64-bitnem sistemu Windows je ukaz:
cscript "C: \ Program Files (x86) \ Microsoft Office \ Office14 \ OSPP.VBS" / dstatus
Del ključa se mora ujemati s prejšnjimi podatki.
Opomba. Na posnetku zaslona sistema Office 2010, ki ga aktivira tipka KMS).Šifra izdelka: 6f327760-8c5c-417c-9b61-836a98287e0c
IME LICENCE: Office 14, izdaja OfficeProPlus-KMS_Client
OPIS LICENCE: Office 14, kanal VOLUME_KMSCLIENT
STATUS DOVOLJENJA: --- LICENCIRANO---
KODA NAP.: 0 z dovoljenjem
Zadnjih 5 znakov nameščenega ključa izdelka: H3GVB
ODPADNA VREDNOST: 178 dni (255897 minut (-ov), preden poteče)