Ambil Kunci Produk Windows 8 dari mainboard

12

Laptop baru saya sudah diinstal sebelumnya dengan Windows 8. Naif, seperti saya, saya baru saja memformat harddisk dan menginstal Ubuntu lama yang bagus. Sekarang saya ingin menginstal Windows 8 untuk dual boot lagi, tapi saya tidak punya DVD dan mengunduh ISO yang memerlukan kunci produk. Kunci itu tidak ada di belakang laptop lagi tetapi di suatu tempat di mainboard.

Apakah ada cara untuk memulihkan kunci produk dari mainboard menggunakan Ubuntu?

Gregor Weber
sumber

Jawaban:

16

Biasanya, pabrikan OEM telah memuat kunci secara elektronik pada ROM. Windows akan mengidentifikasi ini dan secara otomatis mengaktifkan instalasi Anda. Jadi, biasanya, Anda tidak perlu tahu kode ini. Namun, Anda dapat melihat beberapa jejak penggunaan ini

sudo dmidecode

terdaftar sebagai OEM-specific Types, disandikan / dienkripsi, yang dapat menampungnya. OEM besar seperti HP dan Dell menggunakan ini. Tanyakan pada situs web Windows untuk lebih jelasnya; ini tempat yang salah. Satu-satunya detail yang saya ingat adalah bahwa orang membutuhkan versi OEM dari cakram instalasi Windows (yaitu non-eceran).

gertvdijk
sumber
Saya ingat pernah menggunakan dmidecode pada Lenovo Thinkpad di masa lalu, tetapi tampaknya pada Lenovo Ideapad ini tidak mengandung kunci lisensi di mana pun. Akhirnya saya menemukannya /sys/firmware/acpi/tables/MSDMseperti yang disebutkan oleh Chuck R dalam jawaban lain di bawah ini.
Luc
23

Cara lain yang tidak perlu melihat melalui satu ton output adalah:

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

acpidump membuang tabel (default dalam format hexdump), tetapi opsi -b memerintahkannya untuk menampilkan data mentah. Karena kita hanya membutuhkan bagian terakhir dari tabel, pipa output ke dd, tetapi tetapi melewatkan sampah yang tidak perlu. Akhirnya, tambahkan gema di akhir untuk membuatnya ramah terminal = D

acpidump -t MSDM akan bekerja dengan baik, tetapi kuncinya rusak pada beberapa baris, sehingga sulit untuk menyalin.


Perbarui terima kasih kepada Lekensteyn:

Versi baru yang acpidumpdikirimkan dengan Ubuntu berfungsi secara berbeda dari yang dijelaskan di atas. Bendera -b menyebabkan acpidumpmenulis ke file dalam semua keadaan, jadi metode alternatif adalah dengan menggunakan perintah

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

Pemasang Windows 8 yang sah harus secara otomatis mendeteksi kunci di ACPI dan terus menginstal dengan kunci bawaan.

Perlu dicatat, bahwa saya menggunakan metode ini untuk mencoba menginstal Win8 di VM menggunakan kunci produk saya sendiri, tetapi secara otomatis dinonaktifkan mengatakan bahwa kunci produk sedang digunakan. Jadi, tidak banyak gunanya di semua kenyataan. Karena kunci OEM Win8 dirancang untuk diikat ke komputer tertentu, Anda akan menabrak dinding bata jika Anda meminta Microsoft untuk membatalkan registrasi kunci sehingga Anda dapat menggunakannya dalam VM, apalagi komputer lain.

Satu-satunya cara Anda dapat menggunakan kunci adalah jika Anda belum pernah mem-boot ke Win8 untuk memulai atau tidak terhubung ke jaringan ketika Anda melakukannya. Meski begitu, jika VM / komputer baru Anda pernah diizinkan untuk terhubung ke jaringan, itu akan secara otomatis mendaftarkan kunci membuat instalasi Anda yang sebenarnya tidak dapat digunakan.

Chuck R
sumber
Sedang mencoba ini, dan perintah di atas memotong salah satu karakter. Saya menggunakan sudo acpidump -b -t MSDM | dd bs=1 skip=56 2>/dev/null;echodan saya mendapatkan kunci lengkap.
Andrew C
Anda benar, maaf soal itu. Memperbarui jawaban saya.
Chuck R
1
The -bpilihan adalah khusus untuk acpidumpalat disertakan dengan pohon kernel. Versi Ubuntu yang lebih baru dikirimkan dengan acpidumpalat berbeda (dari iasl) yang memiliki opsi berbeda. Aku tidak bisa menguji perintah ini, tetapi harus bekerja: sudo acpidump -n HPET | tail -n+2 | xxd -r | head -c+57. Metode alternatif:sudo tail -c+57 /sys/firmware/acpi/tables/MSDM
Lekensteyn
@Lekensteyn Saya perhatikan bahwa baru-baru ini juga ketika saya di telepon dengan MS. Jika Anda melakukan opsi -b, default untuk menabrak file sekarang karena beberapa alasan. Saya bertanya-tanya apakah ada cara untuk menandai bahwa pipa dihancurkan ketika tidak ada lagi data yang tersisa tentang itu ... topik lain untuk hari lain. Perintah pertama Anda tidak bekerja untuk saya, namun yang kedua baik-baik saja. Saya akan memperbarui jawaban saya untuk memasukkannya =)
Chuck R
1
Digunakan versi yang diperbarui untuk Ubuntu 16.04 LTS: "sudo tail -c + 57 / sys / firmware / acpi / tables / MSDM" Dapat mengkonfirmasi saya mendapatkan kunci Windows saya dari laptop Samsung saja =)
Valross.nu
9
 sudo tail -c+57 /sys/firmware/acpi/tables/MSDM

Ini memberi saya Kunci Produk OEM Windows 8 pada laptop MSI saya.

ViliusK
sumber
3

Anda semua dapat menggunakan kode ini yang berfungsi juga jika kode di atas tidak bekerja untuk Anda atau Anda hanya ingin melihat output hex dengan kunci Anda. Ini mirip dengan memberkati editor hex biner. Windows akan memiliki kunci mereka dalam format HAN50-0L00M-4D31T-CR4ZY yang biasa. 5 huruf atau angka dalam 5 grup.

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

Menjalankan perintah berikut ini akan membuang kunci produk dalam format standar Microsoft.

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

jadi saya melihat jawaban lain di sini dan perlu berpadu. ditemukan

strings /sys/firmware/acpi/tables/MSDM

berfungsi dengan baik jika kunci asli adalah apa yang masih digunakan. Namun saya memiliki beberapa sistem yang datang dengan tambahan rumah dan Anda perlu mendapatkan kunci saat ini dari registri.

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

maka kita perlu menjalankannya melalui suatu algoritma untuk mendapatkan kunci.

Saya menemukan beberapa kode dari 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;
    }

Saya akan mencoba dan mendekode algoritma dan menulisnya di bash. Output dmi tampaknya merupakan algoritma yang lebih lama (<win8) untuk mendekode kunci. Saya belum menemukan opsi untuk menggunakan algoritma baru (> win7).

penguinjeff
sumber