Rufen Sie den Windows 8-Produktschlüssel vom Mainboard ab

11

Mein neuer Laptop war mit Windows 8 vorinstalliert. Naiv wie ich bin, habe ich nur die Festplatte formatiert und das gute alte Ubuntu installiert. Jetzt möchte ich Windows 8 für Dual Boot erneut installieren, habe aber keine DVD und lade die ISO herunter. Man benötigt einen Produktschlüssel. Dieser Schlüssel befindet sich nicht mehr auf der Rückseite des Laptops, sondern irgendwo auf dem Mainboard.

Gibt es eine Möglichkeit, den Product Key mit Ubuntu vom Mainboard wiederherzustellen?

Gregor Weber
quelle

Antworten:

16

Normalerweise haben OEM-Hersteller einen Schlüssel elektronisch auf einem ROM vorinstalliert. Windows erkennt dies und aktiviert Ihre Installation automatisch. Normalerweise müssen Sie diesen Code nicht kennen. Möglicherweise sehen Sie jedoch eine Spur davon

sudo dmidecode

aufgeführt als OEM-specific Types, verschlüsselt / verschlüsselt, die es enthalten kann. Große OEMs wie HP und Dell nutzen dies. Fragen Sie auf Windows-Websites nach weiteren Details. Das ist der falsche Ort. Das einzige Detail, an das ich mich erinnere, ist, dass man eine OEM-Version der Windows-Installations-CD benötigt (dh nicht im Einzelhandel erhältlich).

gertvdijk
quelle
Ich erinnere mich, dass ich in der Vergangenheit dmidecode auf einem Lenovo Thinkpad verwendet habe, aber es scheint, dass es auf diesem Lenovo Ideapad nirgendwo den Lizenzschlüssel enthält. Schließlich fand ich es in, /sys/firmware/acpi/tables/MSDMwie von Chuck R in der anderen Antwort unten erwähnt.
Luc
22

Ein anderer Weg, der nicht das Durchsuchen einer Tonne Ausgabe erfordert, ist:

sudo acpidump -b -t MSDM | dd bs=1 skip=56 2>/dev/null;echo

acpidump gibt die Tabelle aus (Standard im Hexdump-Format), aber die Optionen -b weisen sie an, die Rohdaten auszugeben. Da wir nur den letzten Teil der Tabelle benötigen, leiten Sie die Ausgabe in dd weiter, überspringen Sie jedoch den unnötigen Müll. Fügen Sie zum Schluss am Ende ein Echo hinzu, um es terminalfreundlich zu machen = D.

acpidump -t MSDM funktioniert auch, aber der Schlüssel ist über mehrere Zeilen verteilt, was das Kopieren erschwert.


Update dank Lekensteyn:

Neue Versionen von acpidumpUbuntu funktionieren anders als oben beschrieben. Das Flag -b bewirkt acpidumpunter allen Umständen, dass in eine Datei geschrieben wird. Eine alternative Methode ist daher die Verwendung des Befehls

sudo tail -c+57 /sys/firmware/acpi/tables/MSDM

Ein legitimes Windows 8-Installationsprogramm sollte den Schlüssel in der ACPI automatisch erkennen und die Installation mit dem integrierten Schlüssel fortsetzen.

Es sollte jedoch beachtet werden, dass ich diese Methode verwendet habe, um zu versuchen, Win8 in einer VM mit meinem eigenen Produktschlüssel zu installieren. Sie wurde jedoch automatisch deaktiviert, da der Produktschlüssel verwendet wurde. Es nützt also in der ganzen Realität wenig. Da Win8-OEM-Schlüssel so konzipiert sind, dass sie an diesen bestimmten Computer gebunden sind, stoßen Sie auf eine Mauer, wenn Sie Microsoft auffordern, die Registrierung des Schlüssels aufzuheben, damit Sie ihn in einer VM verwenden können, geschweige denn auf einem anderen Computer.

Sie können den Schlüssel nur verwenden, wenn Sie Win8 noch nie gestartet haben oder zu diesem Zeitpunkt nicht mit einem Netzwerk verbunden waren. Sollte Ihre VM / Ihr neuer Computer jemals eine Verbindung zum Netzwerk herstellen dürfen, wird der Schlüssel automatisch registriert, sodass Ihre eigentliche Installation unbrauchbar wird.

Chuck R.
quelle
Ich habe das gerade ausprobiert und der obige Befehl hat einen der Charaktere abgeschnitten. Ich habe benutzt sudo acpidump -b -t MSDM | dd bs=1 skip=56 2>/dev/null;echound den vollen Schlüssel rausgeholt.
Andrew C
Sie haben Recht, tut mir leid. Aktualisiere meine Antwort.
Chuck R
Die -bOption ist spezifisch für das im acpidumpKernelbaum enthaltene Tool. Neuere Ubuntu-Versionen werden mit einem anderen acpidumpTool (von iasl) geliefert, das unterschiedliche Optionen bietet. Ich konnte diesen Befehl nicht testen, aber er sollte funktionieren : sudo acpidump -n HPET | tail -n+2 | xxd -r | head -c+57. Alternative Methode:sudo tail -c+57 /sys/firmware/acpi/tables/MSDM
Lekensteyn
@Lekensteyn Das habe ich kürzlich auch bemerkt, als ich mit MS telefoniert habe. Wenn Sie die Option -b verwenden, wird aus irgendeinem Grund standardmäßig auf eine Datei gestoßen. Ich frage mich, ob es eine Möglichkeit gibt, zu kennzeichnen, dass eine Pipe zerstört wird, wenn keine Daten mehr darauf sind ... ein anderes Thema für einen anderen Tag. Ihr erster Befehl hat bei mir nicht funktioniert, der zweite war jedoch in Ordnung. Ich werde meine Antwort aktualisieren, um sie aufzunehmen =)
Chuck R
1
Verwendete die aktualisierte Version für Ubuntu 16.04 LTS: "sudo tail -c + 57 / sys / firmware / acpi / tables / MSDM" Kann bestätigen, dass ich meinen Windows-Schlüssel von einem Samsung-Laptop erhalten habe =
Valross.nu
8
 sudo tail -c+57 /sys/firmware/acpi/tables/MSDM

Dadurch erhielt ich den Product Key meines OEM Windows 8 auf einem MSI-Laptop.

ViliusK
quelle
3

Sie können diesen Code auch verwenden, der auch funktioniert, wenn die oben genannten nicht für Sie funktionieren oder Sie nur die Hex-Ausgabe mit Ihrem Schlüssel sehen möchten. Es ist ähnlich wie beim Hex-Binäreditor. Windows hat seinen Schlüssel im üblichen Format HAN50-0L00M-4D31T-CR4ZY. 5 Buchstaben oder Zahlen in 5 Gruppen.

$ ls /sys/firmware/acpi/tables
$ sudo hd /sys/firmware/acpi/tables/MSDM

00000000  ha ns oo lo oe at es ap  pl le sa uc ef or li fe  |Key in area|
00000010  cu si ca nb ro ha ms am  cu si ca nb ro ha ms am  |In key area|
00000020  it sj us ho wz ir ol lz  it sj us ho wz ir ol lz  |Area in key|
00000000  ha ns oo lo oe at es ap  pl le sa uc ef or li fe  |It is 5 x 5|
00000010  cu si ca nb ro ha ms am  cu si ca nb ro ha ms am  |Key in area|
00000020  it sj us ho wz ir ol lz  it sj us ho wz ir ol lz  |In key area|
00000050  ha ns oo lo ow az he re                           |Area in key|
00000055                                                    |It is 5 x 5|

Wenn Sie den folgenden Befehl ausführen, wird der Produktschlüssel im Standardformat von Microsoft ausgegeben.

sudo hexdump -s 56 -e '"MSDM key: " /29 "%s\n"' /sys/firmware/acpi/tables/MSDM
hansooloo
quelle
0

Also sah ich die anderen Antworten hier und musste mich einschalten. gefunden

strings /sys/firmware/acpi/tables/MSDM

funktioniert hervorragend, wenn der Originalschlüssel noch verwendet wird. Ich habe jedoch einige Systeme, die mit dem Home-Zusatz geliefert wurden, und Sie müssen den aktuellen Schlüssel aus der Registrierung abrufen.

winmount=/mnt
echo "hex \\Microsoft\\Windows NT\\CurrentVersion\\DigitalProductId\nq\nq" | chntpw -e ${winmount}/Windows/System32/config/SOFTWARE

dann müssen wir es durch einen Algorithmus laufen lassen, um den Schlüssel zu erhalten.

Ich habe Code von https://github.com/mrpeardotnet/WinProdKeyFinder/blob/master/WinProdKeyFind/KeyDecoder.cs gefunden

    /// <summary>
    /// Decodes Windows Product Key from the DigitalProductId. 
    /// This method applies to DigitalProductId from Windows 7 or lower versions of Windows.
    /// </summary>
    /// <param name="digitalProductId">DigitalProductId to decode</param>
    /// <returns>Decoded Windows Product Key as a string</returns>
    private static string DecodeProductKey(byte[] digitalProductId)
    {
        const int keyStartIndex = 52;
        const int keyEndIndex = keyStartIndex + 15;
        var digits = new[]
        {
            'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R',
            'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9',
        };
        const int decodeLength = 29;
        const int decodeStringLength = 15;
        var decodedChars = new char[decodeLength];
        var hexPid = new ArrayList();
        for (var i = keyStartIndex; i <= keyEndIndex; i++)
        {
            hexPid.Add(digitalProductId[i]);
        }
        for (var i = decodeLength - 1; i >= 0; i--)
        {
            // Every sixth char is a separator.
            if ((i + 1) % 6 == 0)
            {
                decodedChars[i] = '-';
            }
            else
            {
                // Do the actual decoding.
                var digitMapIndex = 0;
                for (var j = decodeStringLength - 1; j >= 0; j--)
                {
                    var byteValue = (digitMapIndex << 8) | (byte)hexPid[j];
                    hexPid[j] = (byte)(byteValue / 24);
                    digitMapIndex = byteValue % 24;
                    decodedChars[i] = digits[digitMapIndex];
                }
            }
        }
        return new string(decodedChars);
    }

    /// <summary>
    /// Decodes Windows Product Key from the DigitalProductId. 
    /// This method applies to DigitalProductId from Windows 8 or newer versions of Windows.
    /// </summary>
    /// <param name="digitalProductId">DigitalProductId to decode</param>
    /// <returns>Decoded Windows Product Key as a string</returns>
    public static string DecodeProductKeyWin8AndUp(byte[] digitalProductId)
    {
        var key = String.Empty;
        const int keyOffset = 52;
        var isWin8 = (byte)((digitalProductId[66] / 6) & 1);
        digitalProductId[66] = (byte)((digitalProductId[66] & 0xf7) | (isWin8 & 2) * 4);

        const string digits = "BCDFGHJKMPQRTVWXY2346789";
        var last = 0;
        for (var i = 24; i >= 0; i--)
        {
            var current = 0;
            for (var j = 14; j >= 0; j--)
            {
                current = current*256;
                current = digitalProductId[j + keyOffset] + current;
                digitalProductId[j + keyOffset] = (byte)(current/24);
                current = current%24;
                last = current;
            }
            key = digits[current] + key;
        }

        var keypart1 = key.Substring(1, last);
        var keypart2 = key.Substring(last + 1, key.Length - (last + 1));
        key = keypart1 + "N" + keypart2;

        for (var i = 5; i < key.Length; i += 6)
        {
            key = key.Insert(i, "-");
        }

        return key;
    }

Ich werde versuchen, den Algorithmus zu dekodieren und in Bash zu schreiben. Die dmi-Ausgabe scheint der ältere Algorithmus (<win8) zum Decodieren des Schlüssels zu sein. Ich habe keine Option für die Verwendung des neuen Algorithmus gefunden (> win7).

Pinguinjeff
quelle