User Tools

Site Tools


windows:get_the_windows_product_key:using_powershell

Windows - Get the Windows Product Key - Using Powershell

RunProdKey.bat

This runs the powershell script Get-ProductKey.ps1.

@ECHO OFF
Powershell.exe -executionpolicy remotesigned -File  ./Get-ProductKey.ps1

NOTE: This sets the Powershell script bypass for running the powershell script.


Get-ProductKey.ps1

start-process -FilePath "CDKey.vbs" -Wait -Passthru 
$SLS = wmic path SoftwareLicensingService get OA3xOriginalProductKey
$RLS = Get-ItemPropertyValue 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -Name BackupProductKeyDefault
$SLSKey = $SLS.Split(" ",[System.StringSplitOptions]::RemoveEmptyEntries)
$DPID = Get-ItemPropertyValue 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey2' -Name DigitalProductId
$EditionID = Get-ItemPropertyValue 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey2' -Name EditionId
 
function ConvertTo-ProductKey {
	param (
		[parameter(Mandatory = $True, Position = 0)]
		$Registry,
		[parameter()]
		[Switch]$x64
 	)
	begin {
		$map = "BCDFGHJKMPQRTVWXY2346789"
	}
	process {
		$ProductKey = ""
 
		$prodkey = $Registry[0x34 .. 0x42]
 
		for ($i = 24; $i -ge 0; $i--) {
			$r = 0
			for ($j = 14; $j -ge 0; $j--) {
				$r = ($r * 256) -bxor $prodkey[$j]
				$prodkey[$j] = [math]::Floor([double]($r/24))
				$r = $r % 24
    			}
    			$ProductKey = $map[$r] + $ProductKey
    			if (($i % 5) -eq 0 -and $i -ne 0) {
    				$ProductKey = "-" + $ProductKey
    			}
    		}
    		$ProductKey
    	}
}
 
$x = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -name DigitalProductId
key = ConvertTo-ProductKey $x.DigitalProductId
 
$prodKey = "Windows Backup Product Key Default: $RLS `nOEM Software Licensing Service Key: $SLSKey `nDigital Product ID Windows Key: $key"
 
Add-Content .\ProductKey.txt===== Get-ProductKey.ps1 =====
 
<code vb>
    start-process -FilePath "CDKey.vbs" -Wait -Passthru 
    $SLS = wmic path SoftwareLicensingService get OA3xOriginalProductKey
    $RLS = Get-ItemPropertyValue 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -Name BackupProductKeyDefault
    $SLSKey = $SLS.Split(" ",[System.StringSplitOptions]::RemoveEmptyEntries)
    $DPID = Get-ItemPropertyValue 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey2' -Name DigitalProductId
    $EditionID = Get-ItemPropertyValue 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey2' -Name EditionId
 
    function ConvertTo-ProductKey {
    	param (
    		[parameter(Mandatory = $True, Position = 0)]
    		$Registry,
    		[parameter()]
    		[Switch]$x64
    	)
    	begin {
    		$map = "BCDFGHJKMPQRTVWXY2346789"
    	}
    	process {
    		$ProductKey = ""
 
    		$prodkey = $Registry[0x34 .. 0x42]
 
    		for ($i = 24; $i -ge 0; $i--) {
    			$r = 0
    			for ($j = 14; $j -ge 0; $j--) {
    				$r = ($r * 256) -bxor $prodkey[$j]
    				$prodkey[$j] = [math]::Floor([double]($r/24))
    				$r = $r % 24
    			}
    			$ProductKey = $map[$r] + $ProductKey
    			if (($i % 5) -eq 0 -and $i -ne 0) {
    				$ProductKey = "-" + $ProductKey
    			}
    		}
    		$ProductKey
    	}
    }
 
    $x = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -name DigitalProductId
    $key = ConvertTo-ProductKey $x.DigitalProductId
 
    $prodKey = "Windows Backup Product Key Default: $RLS `nOEM Software Licensing Service Key: $SLSKey `nDigital Product ID Windows Key: $key"
 
    Add-Content .\ProductKey.txt $prodKey

$prodKey </code>


CDKey.vbs

This script is run from the Get-ProductKey.ps1 powershell script.

The powershell script finds the keys such as the OEM Key and the registry BackupProductKeyDefault then appends it to the text file.

    Option Explicit
    Dim objshell,path,DigitalID, Result
    Set objshell = CreateObject("WScript.Shell")
    'Set registry key path
    Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
    'Registry key value
    DigitalID = objshell.RegRead(Path & "DigitalProductId")
    Dim ProductName,ProductID,ProductKey,ProductData
    'Get ProductName, ProductID, ProductKey
    ProductName = "Product Name: " & objshell.RegRead(Path & "ProductName")
    ProductID = "Product ID: " & objshell.RegRead(Path & "ProductID")
    ProductKey = "Installed Key: " & ConvertToKey(DigitalID)
    ProductData = ProductName & vbNewLine & ProductID & vbNewLine & ProductKey
    'Save Data to a file
    Save ProductData
    'Convert binary to chars
    Function ConvertToKey(Key)
    Const KeyOffset = 52
    Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert
    'Check if OS is Windows 8
    isWin8 = (Key(66) \ 6) And 1
    Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
    i = 24
    Maps = "BCDFGHJKMPQRTVWXY2346789"
    Do
    Current= 0
    j = 14
    Do
    Current = Current* 256
    Current = Key(j + KeyOffset) + Current
    Key(j + KeyOffset) = (Current \ 24)
    Current=Current Mod 24
    j = j -1
    Loop While j >= 0
    i = i -1
    KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput
    Last = Current
    Loop While i >= 0
 
    If (isWin8 = 1) Then
    keypart1 = Mid(KeyOutput, 2, Last)
    insert = "N"
    KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
    If Last = 0 Then KeyOutput = insert & KeyOutput
    End If
    ConvertToKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)
    End Function
    'Save data to a file
    Function Save(Data)
    Dim fso, fName, txt,objshell,UserName
    Set objshell = CreateObject("wscript.shell")
    fName = ".\ProductKey.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txt = fso.CreateTextFile(fName)
    txt.Writeline Data
    txt.Close
    End Function

References

windows/get_the_windows_product_key/using_powershell.txt · Last modified: 2022/06/14 10:48 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki