Windows 7 + Office 2007 Lizenzkey per Script auslesen

Ich habe heute ein Script zusammengebastelt, welches den Windows 7 und den Office 2007 Lizenz-Key des Computers ausliest und ihn in eine Textdatei speichert. Die Textdatei entspricht dem Computernamen zur einfachen Zuordnung von PC und Key. Das Script läuft komplett selbstständig, kann also z.B per Gruppenrichtlinie automatisch ausgeführt werden.
Code-Grundlage ist dieser Forum Post.

Ich habe den Code bereinigt, gekürzt und um die Erkennung von Office 2007 erweitert. Das Script erkennt außerdem, ob das System mit 32bit oder 64bit läuft und passt die Erkennung dementsprechend an.

Hier der verbesserte Code:

On Error Resume Next
Dim WshNetwork
Set WshNetwork = CreateObject("WScript.Network")
cName = WshNetwork.ComputerName
Set WshShell = CreateObject("WScript.Shell")
' detect processor architecture, returns 32 or 64
pa = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth
' get current path
set fso = CreateObject("Scripting.FileSystemObject")
logpath = fso.BuildPath(fso.GetAbsolutePathName("."), "Keys.txt")
'logpath = "\\server\path\to\log.txt" 'for servers

' ----------- Windows 7 Key -----------
wkey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
wdigitalId = WshShell.RegRead(wkey & "DigitalProductId")
wProductName = "Product Name : " & WshShell.RegRead(wkey & "ProductName") & vbNewLine 
wProductId   = "Product Id   : " & WshShell.RegRead(wkey & "ProductId") & vbNewLine 
wProductKey  = "Install Key  : " & Converted(wdigitalId)

windowsData = wProductName & wProductId & wProductKey
' ----------- Windows 7 END -----------

' ----------- Office 2007 Key -----------
'32bit or 64bit?
If pa = "32" Then
	okey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\ Registration\{90120000-0011-0000-0000-0000000FF1CE}\DigitalProductID\"
Else
	okey = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Registration\{91120000-00CA-0000-0000-0000000FF1CE}\"
End if

odigitalId = WshShell.RegRead(okey & "DigitalProductID")    
If (IsEmpty(odigitalId)) Then 
    officeData = "Office 2007 not found"
Else
    oProductKey  = "Install Key  : " & Converted(odigitalId)
    oProductName = "Product Name : " & WshShell.RegRead(okey & "ProductName") & vbNewLine 
    oProductId   = "Product Id   : " & WshShell.RegRead(okey & "ProductId") & vbNewLine 
    officeData = oProductName & oProductId & oProductKey
End If

' ----------- Office 2007 END -----------

Save()

Function Converted(id)
    Const OFFSET = 52
    i = 28
    Chars = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        x = 14
        Do
            Cur = Cur * 256
            Cur = id(x + OFFSET) + Cur
            id(x + OFFSET) = (Cur \ 24) And 255
            Cur = Cur Mod 24
            x = x -1
        Loop While x >= 0
        i = i - 1
        Converted = Mid(Chars, Cur + 1, 1) & Converted
        If (((29 - i) Mod 6) = 0) And (i <> -1) Then
            i = i -1
            Converted = "-" & Converted
        End If
    Loop While i >= 0
End Function

Function Save()
  WScript.Echo "Save to: " & logpath
  Set file = CreateObject("Scripting.FileSystemObject").CreateTextFile(logpath,2,0)
  file.Writeline(FormatDateTime(Date, vbLongDate) & vbNewLine)
  file.Writeline(windowsData & vbNewLine) 'Windows 7
  file.Writeline(officeData & vbNewLine) 'Office 2007
  file.close
End Function

Ergebnis:
windows-7-office-2007-key-reading-decrypting-script

Den Logpath in Zeile 7 müsst ihr anpassen. Ihr könnt diese Zeile auch komplett entfernen und die Zeile 61 anpassen („logpath &“ entfernen), dann wird die Logdatei immer im selben Ordner mit der .vbs erstellt. Dann ist das Script allerdings nicht mehr GPO tauglich. Für GPO Verteilung via Computer-Startscript müsst ihr den Pfad im Script explizit angeben.

Hinweis: Die Erkennung des Windows Keys funktioniert bei der Enterprise Version voraussichtlich nicht. Bei Windows Server 2008 R2 (Standard) funktioniert es.
Es ist etwas erschreckend wie schlecht die Keys geschützt waren. Ich weiß nicht, ob sich diese Methode auch für andere Versionen von Windows oder Office verwenden ließe. Vielleicht ist hier ein ITler mit WinXP, Office 2k3 o.Ä. und schaut mal in der Registry nach.

Schreibe einen Kommentar