Récupérer la clé de produit Windows 8 à partir de la carte mère

12

Mon nouvel ordinateur portable est venu préinstallé avec Windows 8. Naïvement, comme je le suis, je viens de formater le disque dur et d'installer un bon vieux Ubuntu. Maintenant, je veux réinstaller Windows 8 pour le double démarrage, mais je n'ai pas de DVD et je télécharge l'ISO, il faut une clé de produit. Cette clé n'est plus à l'arrière de l'ordinateur portable, mais quelque part sur la carte mère.

Existe-t-il un moyen de récupérer la clé de produit à partir de la carte mère à l'aide d'Ubuntu?

Gregor Weber
la source

Réponses:

16

Habituellement, les fabricants OEM ont préchargé une clé électroniquement sur une ROM. Windows l'identifiera et activera automatiquement votre installation. Donc, généralement, vous n'avez pas besoin de connaître ce code. Cependant, vous pouvez voir une trace de cela en utilisant

sudo dmidecode

répertorié comme OEM-specific Types, encodé / crypté, qui peut le contenir. Les principaux équipementiers comme HP et Dell l'utilisent. Demandez sur les sites Web Windows pour plus de détails; ce n'est pas le bon endroit. Le seul détail dont je me souvienne est qu'il faut une version OEM du disque d'installation de Windows (c'est-à-dire non commerciale).

gertvdijk
la source
Je me souviens en utilisant dmidecode sur un Lenovo Thinkpad dans le passé, mais il semble que sur ce Lenovo Ideapad ne contient pas la clé de licence partout. Finalement , je l' ai trouvé dans /sys/firmware/acpi/tables/MSDMcomme mentionné par Chuck R dans l'autre réponse ci - dessous.
Luc
23

Une autre façon qui ne nécessite pas regarder à travers une tonne de sortie est:

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

acpidump dépotoirs la table (par défaut au format hexdump), mais les options -b indique à la sortie des données brutes. Depuis que nous avons seulement besoin de la dernière partie de la table, redirigez la sortie en dd, mais mais ignorer la jonque inutile. Enfin, ajoutez un écho à la fin pour le rendre terminal convivial = D

acpidump -t MSDM fonctionnera aussi bien, mais la clé est brisée sur plusieurs lignes, ce qui rend difficile à copier.


Mise à jour grâce à Lekensteyn:

Les nouvelles versions de acpidumplivré avec Ubuntu travail différent de celui décrit ci - dessus. Le drapeau -b fait acpidumpd'écrire dans un fichier en toutes circonstances, donc une méthode alternative consiste à utiliser la commande

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

Un légitime de Windows 8 installateur doit détecter automatiquement la clé dans la ACPI et continuer à installer avec la clé intégrée.

Il convient de noter, cependant, que j'ai utilisé cette méthode pour essayer d'installer Win8 dans une machine virtuelle à l'aide de ma propre clé de produit, mais elle s'est automatiquement désactivée en disant que la clé de produit était en cours d'utilisation. Donc, c'est de peu d'utilité dans toute réalité. Étant donné que les clés OEM Win8 sont conçues pour être liées à cet ordinateur spécifique, vous heurterez un mur de briques si vous demandez à Microsoft de désenregistrer la clé afin de pouvoir l'utiliser dans une machine virtuelle, sans parler d'un autre ordinateur.

La seule façon d'utiliser la clé est si vous n'aviez jamais démarré dans Win8 pour commencer ou si vous n'étiez pas connecté à un réseau lorsque vous l'avez fait. Même ainsi, si votre VM / nouvel ordinateur est autorisé à se connecter au réseau, il enregistrera automatiquement la clé, rendant votre installation réelle inutilisable.

Chuck R
la source
J'essayais juste cela, et la commande ci-dessus a coupé l'un des caractères. J'ai utilisé sudo acpidump -b -t MSDM | dd bs=1 skip=56 2>/dev/null;echoet j'ai sorti la clé complète.
Andrew C
Vous avez raison, désolé. Mise à jour de ma réponse.
Chuck R
1
L' -boption est spécifique à l' acpidumpoutil inclus avec l'arborescence du noyau. Les nouvelles versions d'Ubuntu sont livrées avec un acpidumpoutil différent (à partir de iasl) qui a différentes options. Je ne pouvais pas tester cette commande, mais il devrait fonctionner: sudo acpidump -n HPET | tail -n+2 | xxd -r | head -c+57. Méthode alternative:sudo tail -c+57 /sys/firmware/acpi/tables/MSDM
Lekensteyn
@Lekensteyn Je l'ai remarqué récemment aussi lorsque j'étais au téléphone avec la SP. Si vous utilisez l'option -b, elle est par défaut remplacée par un fichier maintenant pour une raison quelconque. Je me demande s'il y a un moyen de signaler qu'un tuyau doit être détruit lorsqu'il n'y a plus de données dessus ... un autre sujet pour un autre jour cependant. Votre première commande n'a pas fonctionné pour moi, mais la deuxième était très bien. Je mettrai à jour ma réponse pour l'inclure =)
Chuck R
1
Utilisé la version mise à jour pour Ubuntu 16.04 LTS: "sudo tail -c + 57 / sys / firmware / acpi / tables / MSDM" Peut confirmer que j'ai bien obtenu ma clé Windows d'un ordinateur portable Samsung =)
Valross.nu
9
 sudo tail -c+57 /sys/firmware/acpi/tables/MSDM

Cela m'a valu la clé de produit de mon OEM Windows 8 sur un ordinateur portable MSI.

ViliusK
la source
3

Vous pouvez tous utiliser ce code qui fonctionne aussi bien si ceux ci-dessus ne fonctionnent pas pour vous ou si vous voulez simplement voir la sortie hexadécimale avec votre clé. C'est similaire à bénir l'éditeur binaire hexadécimal. Windows aura sa clé au format habituel HAN50-0L00M-4D31T-CR4ZY. 5 lettres ou chiffres en 5 groupes.

$ 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|

L'exécution de la commande suivante videra la clé de produit dans son format Microsoft standard.

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

donc j'ai vu les autres réponses ici et j'avais besoin de sonner. trouvé

strings /sys/firmware/acpi/tables/MSDM

fonctionne très bien si la clé d'origine est toujours utilisée. Cependant, j'ai certains systèmes fournis avec l'ajout à domicile et vous devez obtenir la clé actuelle du registre.

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

alors nous devrons l'exécuter via un algorithme pour obtenir la clé.

J'ai trouvé du code sur https://github.com/mrpeardotnet/WinProdKeyFinder/blob/master/WinProdKeyFind/KeyDecoder.cs

    /// <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;
    }

Je vais essayer de décoder l'algorithme et de l'écrire en bash. La sortie dmi semble être l'ancien algorithme (<win8) pour décoder la clé. Je n'ai pas trouvé d'option pour utiliser le nouvel algorithme (> win7).

pingouinjeff
la source