PS-Hacking – Microsoft Produktschlüssel auslesen

Servus @all,

wie angekündigt möchte ich ein paar Powershell-Hacks vorstellen. Ich beginne diese Serie mit einem Script, dass euren Microsoft-Produktschlüssel auslesen kann.

Der Produktschlüssel liegt codiert in der Registry. Doch wenn man die „Formel“ zum Entschlüsseln kennt, dann ist nur noch etwas PowerShell-Script erforderlich, um ihn angezeigt zu bekommen:

$out = New-Object PSObject
            
Try {            
    $OSInfo = Get-WmiObject -class Win32_OperatingSystem -ErrorAction Stop  
    $out | Add-Member -MemberType NoteProperty -Name Computername    -Value $env:COMPUTERNAME    
    $out | Add-Member -MemberType NoteProperty -Name OSArchitecture  -Value $OSInfo.OSArchitecture
    $out | Add-Member -MemberType NoteProperty -Name Operatingsystem -Value $OSInfo.Caption
    $out | Add-Member -MemberType NoteProperty -Name SerialNumber    -Value $OSInfo.SerialNumber
    $out | Add-Member -MemberType NoteProperty -Name OSVersion       -Value $OSInfo.Version
    
    If ($OSInfo.OSArchitecture -eq '64-bit') {
        $RegValue = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name DigitalProductId4).DigitalProductID4[0x34..0x42]
    } Else {                        
        $RegValue = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name DigitalProductId).DigitalProductID[0x34..0x42]
    }     
    
    $ProductKey = ""                      
    for ($i = 24; $i -ge 0; $i--) { 
        $r = 0 
        for ($j = 14; $j -ge 0; $j--) { 
            $r = ($r * 256) -bxor $RegValue[$j] 
            $RegValue[$j] = [math]::Floor([double]($r/24)) 
            $r = $r % 24 
        } 
        $ProductKey = "BCDFGHJKMPQRTVWXY2346789"[$r] + $ProductKey 
        if (($i % 5) -eq 0 -and $i -ne 0) { 
            $ProductKey = "-" + $ProductKey 
        } 
    }     
    $out | Add-Member -MemberType NoteProperty -Name ProductKey -Value $ProductKey
} Catch {
    $out | Add-Member -MemberType NoteProperty -Name ErrorMessage -Value $error[0].exception.message     
}        

$out | Format-list | Out-String

Das war auch schon alles. Das Ergebnis sieht dann so aus:

PS-Hacking – Microsoft Produktschlüssel auslesen

Das kann auch ein Standardbenutzer lesen, da der Registry-Schlüssel nicht weiter geschützt ist:

PS-Hacking – Microsoft Produktschlüssel auslesen

In Enterprise-Umgebungen sollte das keine Rolle spielen, da dort sehr wahrscheinlich ein KMS für die Aktivierung der Betriebssysteme verwendet wird – und so eben nur der Setup-Key gelesen werden kann. Den findet ihr auch auf den Seiten bei Microsoft.

Interessanter wird es, wenn man so einen MAK erbeutet. Dann könnte man eigene Systeme lizenzieren.

Einen praktikablen Schutz habe ich bisher noch nicht gefunden. Aber ich bleibe dran!

Stay tuned!