OEM-активация Windows Vista/7/8/8.1 под гипервизором QEMU

OEM-версии ОС от Microsoft, начиная с Vista, используют проверку подлинности, основанную на сличении трех компонентов: OEM-сертификата, вшитого в дистрибутив ОС бинарного ключа, вшитого в BIOS, а конкретно — в таблицу ACPI SLIC лицензионного 25-значного ключа производителя, вшитого в дистрибутив ОС При успешном сличении трех этих компонентов происходит оффлайн-активация ОС. На корпусе ПК в этом случае имеется наклейка, содержащая лицензионный ключ конкретного экземпляра ОС (а не производителя), которым можно произвести онлайн-активацию ОС в случае ее установки не с образа, предоставляемого производителем ПК, а с «чистого» (MSDN) OEM-образа от Microsoft.Кроме того, лицензионный ключ конкретного экземпляра ОС может быть вшит в текстовом виде в BIOS, в таблицу ACPI MSDM. В этом случае, при установке ОС ключ будет извлечен из BIOS и вшит в конкретный экземпляр ОС. OEM-наклейка на корпусе ноутбука в этом случае может уже не содержать лицензионный ключ. Такой способ используется для активации Windows 8/8.1Посмотреть содержимое ACPI-таблиц можно как из WIndows, с помощью утилиты RWEverything, так и загрузившись с Linux Live-CD, например, SystemRescueCD. Последний способ актуален, когда загрузиться в установленный экземпляр Windows уже невозможно.

У нас есть два ноутбука — Samsung NP305 и Acer Aspire V5–551G, на первом предустановлена Windows 7 OEM Home Basic x86_64, на втором — Windows 8 OEM Single Language x86_64. Воспользуемся SystemRescueCD. Загрузившись, просмотрим содержимое каталога /sys/firmware/acpi/tables:

ls /sys/firmware/acpi/tables/ APIC dynamic DSDT FACP FACS HPET MCFG SLIC SSDT1 SSDT2 Нас интересуют таблицы SLIC и MSDM. Описание их структуры можно найти, например, в этом файле. Просмотрим сначала таблицу SLIC на ноутбуке с Windows 7 (символом X «закрыты» реальные данные): > xxd /sys/firmware/acpi/tables/SLIC

0000000: 534c 4943 7601 0000 01fb 5345 4343 5344 SLICv…SECCSD 0000010: 4c48 3433 5354 4152 0920 0701 414d 4920 LH43STAR. …AMI 0000020: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000030: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000040: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000050: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000060: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000070: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000080: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000090: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 00000a0: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 00000b0: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 00000c0: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 00000d0: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 00000e0: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 00000f0: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000100: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000110: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000120: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000130: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000140: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000150: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000160: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX xxxxxxxxxxxxxxxx 0000170: XXXX XXXX XXXX xxxxxx Как видно, информация о лицензировании хранится здесь в бинарном виде.Таблицы MSDM в BIOS ноутбука с Windows 7 нет.

Теперь посмотрим таблицу SLIC на ноутбуке с Windows 8:

> xxd /sys/firmware/acpi/tables/SLIC

0000000: 534c 4943 7601 0000 0168 4143 5253 5953 SLICv…hACRSYS 0000010: 4143 5250 5244 4354 0100 0000 3130 3235 ACRPRDCT…1025 0000020: 0000 0400 0000 0000 0000 0000 0000 0000 … 0000030: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000040: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000050: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000060: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000070: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000080: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000090: 0000 0000 0000 0000 0000 0000 0000 0000 … 00000a0: 0000 0000 0000 0000 0000 0000 0000 0000 … 00000b0: 0000 0000 0000 0000 0000 0000 0000 0000 … 00000c0: 0000 0000 0000 0000 0000 0000 0000 0000 … 00000d0: 0000 0000 0000 0000 0000 0000 0000 0000 … 00000e0: 0000 0000 0000 0000 0000 0000 0000 0000 … 00000f0: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000100: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000110: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000120: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000130: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000140: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000150: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000160: 0000 0000 0000 0000 0000 0000 0000 0000 … 0000170: 0000 0000 0000 … Таблица пуста, поэтому использовать оффлайн-активацию на этом ноутбуке невозможно.Теперь посмотрим таблицу MSDM (символом X «закрыты» реальные данные).

> xxd /sys/firmware/acpi/tables/MSDM

0000000: 4d53 444d 5500 0000 030b 4143 5253 5953 MSDMU…ACRSYS 0000010: 4143 5250 5244 4354 0100 0000 3130 3235 ACRPRDCT…1025 0000020: 0000 0400 0100 0000 0000 0000 0100 0000 … 0000030: 0000 0000 1d00 0000 XXXX XXXX XXXX XXXX …XXXXX-XX 0000040: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXX-XXXXX-XXXXX- 0000050: XXXX XXXX XX XXXXX 25-значный ключ экземпляра ОС вшит в таблицу MSDM в открытом виде.Из каталога /sys/firmawe/acpi/tables файлы SLIC и MSDM можно скопировать в любое другое место обычным способом.

Теперь у нас есть образы таблиц SLIC и MSDM. Оказывается, можно сэмулировать наличие этих таблиц при загрузке Windows в среде гипервизора QEMU/KVM с помощью опции -acpitable. Для примера, запустим установку Windows 7 c OEM-диска, при этом не будем подключать сетевой адаптер, чтобы убедиться именно в оффлайн-активации.

> qemu-img create -f qcow2 -o lazy_refcounts /media/storage/VMs/win7-slic-test.qcow2 40G

> qemu-system-x86_64 -smp cores=2 -m 1024 -enable-kvm -cdrom /media/storage/iso/Windows_7_SP1_RU/7601.17514.101119–1850_x64fre_client_ru-ru_OEM_HomeBasic-GRMCHBXFREO_RU_DVD.iso -acpitable file=/media/storage/misc/Samsung_NP305V5A/ACPI/tables/SLIC -net none -drive id=disk, file=/media/storage/VMs/win7-slic-test.qcow2, if=none -device ahci, id=ahci -device ide-drive, drive=disk, bus=ahci.0 После установки, зайдя в Компьютер → Свойства, мы увидим, что наша система не активирована. Это естественно, поскольку мы эмулируем только один из компонентов системы оффлайн-активации — таблицу SLIC, однако для успешной активации нам нужны еще сертификат (XML-файл с расширением XRM-MS) и OEM-ключ. Перечисленные компоненты уже вшиты в образ восстановления, имеющийся на диске ноутбука, и если мы пометим раздел восстановления как загрузочный, то сможем активировать установку экземпляра Windows, который пройдет проверку подлинности сразу после установки.Если мы каким-то образом получим сертификат и ключ отдельно, то можно поставить их командами

SLMGR.VBS -ILC <Файл_сетрификата.XRM-MS> и SLMGR.VBS -IPK <25-значный ключ производителя> Нужно обратить внимание на то. что утилита SLMGR.VBS работает достаточно долго и по завершении работы выдает сообщение в отдельном окне.По завершении работы утилиты SLMGR.VBS копия Windows будет успешно активирована.

Трехкомпонентная оффлайн-активация встречалась мне только на ноутбуках с предустановленной Windows Vista/7, для ноутбуков с предустановленной Windows 8/8.1 используется онлайн-активация с помощью 25-значного ключа экземпляра ОС, вшитого в таблицу MSDM. При установке Windows 8 ключ извлекается из BIOS автоматически, и, после проверки на соответствие устанавливаемой версии Windows, записывается в реестр. Убедимся в этом:

> qemu-img create -f qcow2 -o lazy_refcounts /media/storage/VMs/win8-msdm-test.qcow2 40G

> qemu-system-x86_64 -smp cores=2 -m 1024 -enable-kvm -cdrom /media/storage/ISO/Win8_OEM/HRM_CSLA_X64FREO_RU-RU_DV5.ISO -acpitable file=/media/storage/misc/Acer_Aspire_V5–551G/ACPI/tables/MSDM -net none -drive id=disk, file=/media/storage/VMs/win8-msdm-test.qcow2, if=none -device ahci, id=ahci -device ide-drive, drive=disk, bus=ahci.0 Установим Windows 8 и воспользуемся утилитой NirSoft Product Key Viewer. Действительно, ключ установленной версии Windows 8 и ключ из таблицы MSDM совпадают.image

К сожалению, применять пользовательские таблицы ACPI умеет только SeaBIOS, который идет с QEMU по-умолчания, а вот OVMF, который позволяет загружать ОС в окружении EFI, параметр -acpitable просто игнорирует.

Естественно, использовать эмуляцию ACPI таблиц можно, только следуя букве и духу лицензионного соглашения с Microsoft, иначе кармические силы покарают вас.

© Habrahabr.ru