Wie kann ich den Windows-Key aus einer Windows-Image-Datei (WIM) auslesen?
- Vorbereitung: WIM-Datei mounten
- Windows-Produktschlüssel in der Registry finden
- SOFTWARE-Hive aus dem Image laden und Produktschlüssel auslesen
- Produktschlüssel decodieren
- Zusammenfassung
Um den Windows-Produktschlüssel aus einer Windows-Image-Datei (WIM) zu extrahieren, benötigt man ein Verständnis darüber, wie der Key in der Installation bzw. im Image gespeichert ist und welche Tools verwendet werden können, um auf die entsprechenden Informationen zuzugreifen. Windows-Keys sind normalerweise in der Registry des installierten Systems hinterlegt. In einer WIM-Datei ist die Registry als Teil der gemounteten Image-Struktur enthalten, sodass man die relevanten Registry-Daten extrahieren und daraus den Produktschlüssel auslesen kann.
Vorbereitung: WIM-Datei mounten
Zunächst muss das Windows-Image (WIM-Datei) auf dem lokalen System eingebunden (gemountet) werden. Dazu kann man das Kommandozeilentool DISM (Deployment Image Servicing and Management) verwenden. Mit DISM hängt man das Image in einen leeren Ordner ein, sodass man auf dessen Dateisystem zugreifen kann. Dies ist notwendig, um die Registry-Dateien im Image zu erreichen.
Ein Beispielkommando, um ein Image in den Ordner C:\mount einzuhängen, sieht folgendermaßen aus:
dism /Mount-Wim /WimFile:C:\Pfad\zu\deiner\install.wim /Index:1 /MountDir:C:\mountHierbei ist wichtig, den exakten Pfad zur WIM-Datei anzugeben und gegebenenfalls den korrekten Index zu wählen, falls mehrere Windows-Versionen im Image enthalten sind.
Windows-Produktschlüssel in der Registry finden
Der Windows-Key befindet sich in der Registry unter dem Pfad:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
In diesem Unterschlüssel gibt es einen Wert namens DigitalProductId, in dem der Produktschlüssel binär kodiert ist. Um diesen auszulesen, müssen Sie die zugehörige Registry-Hive aus dem gemounteten Image öffnen. Im gemounteten Ordner finden Sie die Registry-Hive-Datei als SYSTEM und SOFTWARE unter \Windows\System32\config\. Für den Key ist die SOFTWARE Datei relevant.
SOFTWARE-Hive aus dem Image laden und Produktschlüssel auslesen
Öffnen Sie die Registry-Editor (regedit) als Administrator und gehen Sie dort auf HKEY_LOCAL_MACHINE. Dann wählen Sie Datei > Struktur laden und wählen im gemounteten Pfad die Datei SOFTWARE, z.B. C:\mount\Windows\System32\config\SOFTWARE. Als Name können Sie z. B. TempWim vergeben.
Nun können Sie innerhalb von HKEY_LOCAL_MACHINE\TempWim\Microsoft\Windows NT\CurrentVersion den Wert DigitalProductId sehen. Dieser Wert muss nun interpretiert werden, um den klartextlichen Produktschlüssel zu erhalten, da er binär kodiert ist.
Produktschlüssel decodieren
Da der Xbox-Key im Wert DigitalProductId binär vorliegt, benötigen Sie ein Skript oder Tool, das diese binären Daten in einen lesbaren Produktschlüssel umwandelt. Ein klassischer Ansatz ist ein Powershell-Skript oder ein kleines Programm, das die Kodierung umkehrt. Dieses decodiert die Information aus dem DigitalProductId Byte-Array und gibt den Schlüssel in der üblichen Formatierung (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX) aus.
Ein Beispiel für ein Powershell-Skript, das den Key aus einem Offline-Registry-Hive ausliest, wäre:
function Convert-ProductKey { param ( ]$DigitalProductId) $keyOffset = 52 $chars = "BCDFGHJKMPQRTVWXY2346789" $isWin8OrUp = (($DigitalProductId / 6) -band 1) -eq 1 $DigitalProductId = ($DigitalProductId -band 0xF7) -bor ((($isWin8OrUp) -band 2) * 4) $decodedKey = "" $keyChars = 25 $keyArray = 0..$keyChars | ForEach-Object { 0 } for ($i = $keyChars - 1; $i -ge 0; $i--) { $current = 0 for ($j = 14 + $keyOffset; $j -ge $keyOffset; $j--) { $current = $current * 256 -bxor $DigitalProductId $DigitalProductId = ::Floor($current / 24) $current = $current % 24 } $keyArray = $current } for ($i = 0; $i -lt $keyChars; $i++) { $decodedKey += $chars ] if (((($i + 1) % 5) -eq 0) -and ($i -ne $keyChars -1)) { $decodedKey += "-" } } return $decodedKey}# Beispielaufruf:# Öffnen Sie zuerst die Hive in PowerShell, z.B.:reg load HKLM\TempWim "C:\mount\Windows\System32\config\SOFTWARE"# Dann lesen Sie den Wert aus:$digitalProductId = (Get-ItemProperty -Path "HKLM:\TempWim\Microsoft\Windows NT\CurrentVersion").DigitalProductId
# Dann rufen Sie die Funktion auf:$windowsKey = Convert-ProductKey $digitalProductIdWrite-Output $windowsKey# Anschließend entladen Sie die Hive:reg unload HKLM\TempWim$digitalProductId = (Get-ItemProperty -Path "HKLM:\TempWim\Microsoft\Windows NT\CurrentVersion").DigitalProductId
Dieses Skript zeigt den allgemeinen Ablauf, wie aus dem Offline-Registry-Hive eines gemounteten WIM-Images der Windows-Key extrahiert wird.
Zusammenfassung
Die Vorgehensweise zum Auslesen des Windows-Produktschlüssels aus einer WIM-Datei erfordert zuerst das Mounten des Images mittels DISM, um Zugriff auf das Dateisystem und speziell die Registry-Hive-Dateien zu erhalten. Anschließend muss die SOFTWARE-Datei in die lokale Registry geladen werden, um den Binärwert DigitalProductId auszulesen. Da dieser Wert nicht direkt lesbar ist, muss er anhand eines Skripts dekodiert werden, um den eigentlichen Windows-Produktschlüssel in Klartext zu erhalten. Am Ende wird die geladene Hive wieder entladen, um das System nicht zu verändern.