[Source]: Windows Product Key retrieval

April 12, 2009 12:23 pm · 0 comments

by Black

in Open Source,Source Code

Sometimes, you need to retrieve the Windows Product key just for informational purposes. This is a good piece of source code that is coded by a guy named ‘Parabellum‘. I found it in some forum, where I keep forgetting that.

This script can retrieve the following product keys:
1. Microsoft Windows Product Key
2. Microsoft Office XP
3. Microsoft Office 2003
4. Microsoft Office 2007
5. Microsoft Exchange Product Key

Without further delay, here it is:

'  ##############################################################
'  #                                                            #
'  # VBScript to retrieve Microsoft Product Keys                #
'  # from the registry by decoding DigitalProductID's           #
'  #                                                            #
'  # ---------------------------------------------------------- #
'  # Created by: Parabellum                                     #
'  #                                                            #
'  ##############################################################
'
CONST HKEY_LOCAL_MACHINE = &H80000002
CONST SEARCH_KEY = "DigitalProductID"
Dim arrSubKeys(4,1)
Dim foundKeys
Dim iValues, arrDPID
foundKeys = Array()
iValues = Array()
arrSubKeys(0,0) = "Microsoft Windows Product Key"
arrSubKeys(0,1) = "SOFTWAREMicrosoftWindows NTCurrentVersion"
arrSubKeys(2,0) = "Microsoft Office XP"
arrSubKeys(2,1) = "SOFTWAREMicrosoftOffice10.0Registration"
arrSubKeys(1,0) = "Microsoft Office 2003"
arrSubKeys(1,1) = "SOFTWAREMicrosoftOffice11.0Registration"
arrSubKeys(3,0) = "Microsoft Office 2007"
arrSubKeys(3,1) = "SOFTWAREMicrosoftOffice12.0Registration"
arrSubKeys(4,0) = "Microsoft Exchange Product Key"
arrSubKeys(4,1) = "SOFTWAREMicrosoftExchangeSetup"

' <--------------- Open Registry Key and populate binary data into an array -------------------------->
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\" & strComputer & "rootdefault:StdRegProv")

For x = LBound(arrSubKeys, 1) To UBound(arrSubKeys, 1)
oReg.GetBinaryValue HKEY_LOCAL_MACHINE, arrSubKeys(x,1), SEARCH_KEY, arrDPIDBytes
If Not IsNull(arrDPIDBytes) Then
 call decodeKey(arrDPIDBytes, arrSubKeys(x,0))
Else
 oReg.EnumKey HKEY_LOCAL_MACHINE, arrSubKeys(x,1), arrGUIDKeys
 If Not IsNull(arrGUIDKeys) Then
  For Each GUIDKey In arrGUIDKeys
   oReg.GetBinaryValue HKEY_LOCAL_MACHINE, arrSubKeys(x,1) & "" & GUIDKey, SEARCH_KEY, arrDPIDBytes
   If Not IsNull(arrDPIDBytes) Then
    call decodeKey(arrDPIDBytes, arrSubKeys(x,0))
   End If
  Next
 End If
End If
Next
MsgBox("Finished")

' <----------------------------------------- Return the Product Key --------------------------------------------------->
Function decodeKey(iValues, strProduct)

Dim arrDPID
arrDPID = Array()

' <--------------- extract bytes 52-66 of the DPID -------------------------->
For i = 52 to 66
 ReDim Preserve arrDPID( UBound(arrDPID) + 1 )
 arrDPID( UBound(arrDPID) ) = iValues(i)
Next

' <--------------- Create an array to hold the valid characters for a microsoft Product Key -------------------------->
Dim arrChars
arrChars = Array("B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9")

' <--------------- The clever bit !!! (decode the base24 encoded binary data)-------------------------->
For i = 24 To 0 Step -1
 k = 0
 For j = 14 To 0 Step -1
  k = k * 256 Xor arrDPID(j)
  arrDPID(j) = Int(k / 24)
  k = k Mod 24
 Next
 strProductKey = arrChars(k) & strProductKey
 If i Mod 5 = 0 And i <> 0 Then strProductKey = "-" & strProductKey
Next

ReDim Preserve foundKeys( UBound(foundKeys) + 1 )
foundKeys( UBound(foundKeys) ) = strProductKey
strKey = UBound(foundKeys)
MsgBox strProduct & vbNewLine & vbNewLine & foundKeys(strKey)
End Function
Searches leading to this post:
digitalproductid decoder linux, productkey office getbinaryvalue, scriptable way to grab product keys, vbs retrieve office product key, vbscript get windows product key, vbscript office 2010 key decode

Random Posts

Comments on this entry are closed.

Previous post:

Next post: