[Wabbajack] schrieb:
Das Script spuckt mir leider nur "BBBBB-BBBBB-BBBBB-BBBBB-BBBBB" aus.
Das passiert immer dann, wenn für das Ausführen des Codes die enstprechende Berechtigung fehlt.
Man benötigt für das Auslesen des Produktschlüssels keine externen Tools. Auch das Installieren von Systemanalyseanwendungen ist nicht unbedingt notwendig, jedenfall nicht, wenn man nur den Key auslesen möchte.
Man verwendet dafür PowerShell und ich werde gleich den entsprechenden Code hier einstellen. Dauert aber noch einen Augenblick.
Auch die Verwendung eines .vbs-Codes ist so eine Sache. Würde ich anderen, aus Sicherheitsaspekten, auch nicht allgemein empfehlen, auch wenn ich selbst Skripte dieser Art verwenden würde.
------------------------------------------------------------------------------------------------------
Um diesen Prozess durchführen zu können, muss man im System mit Adminrechten angemeldet sein.
Vorgehensweise wie folgt:
PowerShell aufrufen
-> Suche -> powershell
den Fund mit rechter Maustaste markieren und "Als Administrator ausführen" anklicken.
Danach erfolgt die erste Eingabe. Damit setzt man die Ausführungsrichtlinie für PS fest:
PowerShell:
Set-ExecutionPolicy -Scope "LocalMachine" -ExecutionPolicy "RemoteSigned" -Force
Später sollte man die Richtlinie wieder auf standard setzen:
PowerShell:
Set-ExecutionPolicy -Scope "LocalMachine" -ExecutionPolicy "Restricted" -Force
Jetzt den gesamten Code, wie nachfolgend zu sehen, kopieren und in die PS-Konsole einsetzen.
-> Entertaste drücken
PowerShell:
$CPN = "$Env:COMPUTERNAME"
Function ConvertToKey([String]$CPN)
{
$RegKey = [WMIClass] ("\\" + $CPN + "\root\default:StdRegProv")
$RegVal = [Byte[]]($RegKey.GetBinaryValue(2147483650,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","DigitalProductId").uValue)
$Chars = [Char[]]("B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9")
$KeyStartIndex = [Int]52
$KeyEndIndex = [Int]($KeyStartIndex + 15)
$DecodeLength = [Int]29
$DecodeStringLength = [Int]15
$DecodedChars = New-Object Char[] $DecodeLength
$HexPid = New-Object System.Collections.ArrayList
For ($i = $KeyStartIndex; $i -Le $KeyEndIndex; $i++){[Void]$HexPid.Add($RegVal[$i])}
For ($i = $DecodeLength - 1; $i -Ge 0; $i--)
{
If (($i + 1) % 6 -Eq 0){$DecodedChars[$i] = '-'}
Else
{
$DigitMapIndex = [Int]0
For ($j = $DecodeStringLength - 1; $j -Ge 0; $j--)
{
$ByteValue = [Int](($DigitMapIndex * [Int]256) -Bor [Byte]$HexPid[$j]);
$HexPid[$j] = [Byte] ([Math]::Floor($ByteValue / 24));
$DigitMapIndex = $ByteValue % 24;
$DecodedChars[$i] = $Chars[$DigitMapIndex];
}
}
}
$STR = ""
$DecodedChars | ForEach {$STR+=$_}
$STR
}
$PrKey1Gen = "TY4CG-JDJH7-VJ2WF-DY4X9-HCFC6"
$PrKey2Gen = "VK7JG-NPHTM-C97JM-9MPGT-3V66T"
$PrID = (Get-WmiObject "Win32_OperatingSystem").SerialNumber
[String]$OemKey = (Get-WmiObject -Query "Select * from SoftwareLicensingService").OA3xOriginalProductKey
If ([String]::IsNullOrEmpty($OemKey))
{
$DigiID = ConvertToKey .
$ProdKey = $DigiID
If ($ProdKey -Eq "$PrKey1Gen" -Or $ProdKey -Eq "$PrKey2Gen")
{
$ProdKey = "$ProdKey (Generiert)"
}
Else
{
$ProdKey = "$ProdKey (Retail)"
}
}
Else
{
$ProdKey = "$OemKey (OEM)"
}
cls
[String]$Value = "ProduktID.........: $PrID`r`n" `
+ "Produkt-Schlüssel.: $ProdKey"
$Value
Sowohl der Produktschlüssel, als auch die ProduktID sollten jetzt korrekt ausgegeben worden sein.
Dieser Code funktioniert bei Windows Vista und neuer.
Bei Windows 10 wird ebenfall der korrekte Key ausgegeben. Entweder der generierte, oder der echte Key.
Ist der Key bei Komplettgeräten im UEFI-Bios hinterlegt, funktioniert das Auslesen mit diesem Code ebenfalls.
Alles, wie immer, ohne Gewähr und auf eigenes Risiko.