Recupera il codice Product Key di Windows 8 dalla scheda madre


12

Il mio nuovo laptop è stato preinstallato con Windows 8. In modo ingenuo, come lo sono io, ho appena formattato il disco rigido e installato bene Ubuntu vecchio. Ora voglio installare di nuovo Windows 8 per il doppio avvio, ma non ho un DVD e devo scaricare quello ISO, è necessario un codice Product Key. Quella chiave non è più sul retro del laptop ma da qualche parte sulla scheda madre.

Esiste un modo per recuperare il codice Product Key dalla scheda madre utilizzando Ubuntu?

Risposte:


16

Di solito, i produttori OEM hanno precaricato elettronicamente una chiave su una ROM. Windows lo identificherà e attiverà automaticamente l'installazione. Quindi, di solito, non è necessario conoscere questo codice. Tuttavia, si potrebbe vedere qualche traccia di questo utilizzo

sudo dmidecode

elencato come OEM-specific Types, codificato / crittografato, che può contenere. I principali OEM come HP e Dell lo usano. Chiedi sui siti Web Windows per maggiori dettagli; questo è il posto sbagliato L'unico dettaglio che ricordo è che è necessaria una versione OEM del disco di installazione di Windows (ovvero non al dettaglio).


Ricordo di aver usato dmidecode su un Thinkpad Lenovo in passato, ma sembra che su questo Lenovo Ideapad non contenga la chiave di licenza da nessuna parte. Alla fine l'ho trovato /sys/firmware/acpi/tables/MSDMcome indicato da Chuck R nell'altra risposta di seguito.
Luc,

23

Un altro modo che non richiede di esaminare una tonnellata di output è:

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

acpidump esegue il dump della tabella (impostazione predefinita in formato hexdump), ma le opzioni -b indicano che genera i dati non elaborati. Poiché abbiamo solo bisogno dell'ultima parte della tabella, reindirizza l'output in dd, ma salta la spazzatura non necessaria. Infine, aggiungi un'eco alla fine per renderlo terminal-friendly = D

acpidump -t MSDM funzionerà anche, ma la chiave è spezzata su più righe, rendendo difficile la copia.


Aggiornamento grazie a Lekensteyn:

Le nuove versioni di acpidumpUbuntu funzionano diversamente da quanto sopra descritto. Il flag -b fa sì acpidumpche scriva su un file in tutte le circostanze, quindi un metodo alternativo è usare il comando

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

Un legittimo programma di installazione di Windows 8 dovrebbe rilevare automaticamente la chiave nell'ACPI e continuare l'installazione con la chiave integrata.

Va notato, tuttavia, che ho usato questo metodo per provare a installare Win8 in una macchina virtuale usando il mio codice prodotto, ma si è disattivato automaticamente dicendo che il codice prodotto era in uso. Quindi è di scarsa utilità in tutta la realtà. Poiché le chiavi OEM di Win8 sono progettate per essere collegate a quel computer specifico, colpirai un muro di mattoni se chiedi a Microsoft di annullare la registrazione della chiave in modo da poterla utilizzare in una VM, per non parlare di un altro computer.

L'unico modo in cui è possibile utilizzare la chiave è se non si era mai avviato in Win8 per iniziare o se non si fosse connessi a una rete quando lo si è fatto. Tuttavia, se la tua VM / nuovo computer è mai autorizzato a connettersi alla rete, registrerà automaticamente la chiave rendendo la tua installazione effettiva inutilizzabile.


Stavo solo provando questo, e il comando sopra ha tagliato uno dei personaggi. Ho usato sudo acpidump -b -t MSDM | dd bs=1 skip=56 2>/dev/null;echoe ho ottenuto la chiave completa.
Andrew C

Hai ragione, mi dispiace per quello. Aggiornamento della mia risposta.
Chuck R,

1
L' -bopzione è specifica per lo acpidumpstrumento incluso con l'albero del kernel. Le versioni più recenti di Ubuntu vengono fornite con uno acpidumpstrumento diverso (da iasl) con opzioni diverse. Non ho potuto testare questo comando, ma dovrebbe funzionare: sudo acpidump -n HPET | tail -n+2 | xxd -r | head -c+57. Metodo alternativo:sudo tail -c+57 /sys/firmware/acpi/tables/MSDM
Lekensteyn,

@Lekensteyn L'ho notato anche di recente quando ero al telefono con MS. Se si esegue l'opzione -b, per impostazione predefinita viene eseguito il bump su un file ora per qualche motivo. Mi chiedo se c'è un modo per segnalare che una pipe viene distrutta quando non ci sono più dati su di essa ... un altro argomento per un altro giorno però. Il tuo primo comando non ha funzionato per me, tuttavia il secondo andava bene. Aggiornerò la mia risposta per includerla =)
Chuck R

1
Ho usato la versione aggiornata di Ubuntu 16.04 LTS: "sudo tail -c + 57 / sys / firmware / acpi / tables / MSDM" Posso confermare che ho ottenuto il mio tasto Windows da un laptop Samsung bene =)
Valross.nu

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

Questo mi ha procurato il codice Product Key del mio OEM Windows 8 su laptop MSI.


3

Puoi quindi usare questo codice che funziona anche se quelli sopra non funzionano per te o vuoi solo vedere l'output esadecimale con la tua chiave. È simile a benedire l'editor binario esadecimale. Windows avrà la chiave nel solito formato HAN50-0L00M-4D31T-CR4ZY. 5 lettere o numeri in 5 gruppi.

$ 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'esecuzione del comando seguente comporta il dump della chiave del prodotto nel suo formato Microsoft standard.

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

0

così ho visto le altre risposte qui e ho dovuto intervenire. Trovato

strings /sys/firmware/acpi/tables/MSDM

funziona alla grande se la chiave originale è ancora utilizzata. Tuttavia ho alcuni sistemi forniti con l'aggiunta di home e devi ottenere la chiave corrente dal registro.

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

allora avremo bisogno di eseguirlo attraverso un algoritmo per ottenere la chiave.

Ho trovato del codice da 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;
    }

Proverò a decodificare l'algoritmo e scriverlo in bash. L'output dmi sembra essere l'algoritmo più vecchio (<win8) per decodificare la chiave. Non ho trovato un'opzione per l'utilizzo del nuovo algoritmo (> win7).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.