Wie funktioniert das Auslesen des Windows-Keys über PowerShell?
- Einführung
- Speicherort des Windows-Keys in der Registry
- Auslesen und Entschlüsseln mit PowerShell
- Erklärung des Codes
- Nutzungshinweise
- Zusammenfassung
Einführung
Der Windows-Produktschlüssel (auch als "Windows Key" bezeichnet) ist ein einzigartiger alphanumerischer Code, der zur Aktivierung und Lizenzierung von Microsoft Windows benötigt wird. In vielen Fällen ist dieser Schlüssel in der Windows-Registrierung verschlüsselt abgelegt und nicht direkt ersichtlich. PowerShell bietet jedoch die Möglichkeit, mithilfe von Skripten den Schlüssel auszulesen, indem die verschlüsselte Information aus der Registry ausgelesen und entschlüsselt wird.
Speicherort des Windows-Keys in der Registry
Der digitale Produktschlüssel wird in Windows in der Registry unter folgendem Pfad gespeichert:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatformDort befindet sich der Wert BackupProductKeyDefault (nicht immer vorhanden), der den unverschlüsselten Schlüssel enthält. Häufig ist der Produktschlüssel jedoch nur in verschlüsselter Form unter DigitalProductId gespeichert. Um den echten Windows-Key zu erhalten, muss dieser Wert ausgelesen und anschließend dekodiert werden.
Auslesen und Entschlüsseln mit PowerShell
PowerShell kann verwendet werden, um den Binärwert DigitalProductId auszulesen, der an einer bestimmten Stelle in der Bytefolge den Schlüssel hinterlegt. Anschließend durchläuft ein Dekodieralgorithmus diese Daten, um den lesbaren Produktschlüssel zu erzeugen.
Der folgende PowerShell-Code demonstriert diesen Prozess:
function Get-WindowsKey { $keyPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" $digitalProductId = (Get-ItemProperty -Path $keyPath -Name "DigitalProductId").DigitalProductId $chars = "BCDFGHJKMPQRTVWXY2346789" $keyStartIndex = 52 $keyEndIndex = $keyStartIndex + 15 $decodedKey = "" $pidArray = $digitalProductId for ($i = 0; $i -lt 25; $i++) { $current = 0 for ($j = 14; $j -ge 0; $j--) { $current = ($current * 256) + $pidArray $pidArray = ::Floor($current / 24) $current = $current % 24 } $decodedKey = $chars + $decodedKey if ((($i + 1) % 5) -eq 0 -and $i -ne 24) { $decodedKey = "-" + $decodedKey } } return $decodedKey}$windowsKey = Get-WindowsKeyWrite-Output "Ihr Windows-Produktschlüssel lautet: $windowsKey"Erklärung des Codes
Der Code definiert eine Funktion namens Get-WindowsKey. Diese liest den Wert DigitalProductId aus der Registry aus, der eine Bytefolge enthält, in der der Schlüssel kodiert ist. Der Schlüssel befindet sich ab Byte 52 über 15 Bytes hinweg.
Die Dekodierung basiert auf einer speziellen 24-stelligen Zeichentabelle, die für die Darstellung des Schlüssels genutzt wird. Der Algorithmus funktioniert ähnlich wie eine Umwandlung einer großen Zahl in eine andere Basis (hier 24). Er extrahiert die entsprechenden Ziffern, setzt sie zu Gruppen von fünf Zeichen zusammen und trennt diese Gruppen durch Bindestriche.
Da Windows-Keys in der Regel aus 25 Zeichen bestehen, ist die Schleife auf 25 Iterationen ausgelegt und fügt alle fünf Zeichen einen Bindestrich ein, um das bekannte Format zu erzeugen.
Nutzungshinweise
Dieser Ansatz funktioniert bei den meisten Retail- und Volumenlizenzschlüsseln, die lokal im System gespeichert sind. Auf OEM-Geräten kann der Schlüssel auch im BIOS/UEFI hinterlegt sein, was ein separates Auslesen mit anderen Tools oder WMI-Kommandos erfordern kann.
Das Auslesen des Schlüssels mit PowerShell erfordert Administratorrechte, da der Zugriff auf die Windows-Registry eingeschränkt ist.
Zusammenfassung
Das Auslesen des Windows-Keys über PowerShell wird durch das Auslesen und Dekodieren des Registry-Werts DigitalProductId ermöglicht. Mit einem dekodierenden Script kann der verschlüsselte Produktschlüssel extrahiert und in das lesbare Format umgewandelt werden. Dies erlaubt es Anwendern und Administratoren, den eigenen Windows-Produktschlüssel ohne zusätzliche Software herauszufinden.
