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 совпадают.
К сожалению, применять пользовательские таблицы ACPI умеет только SeaBIOS, который идет с QEMU по-умолчания, а вот OVMF, который позволяет загружать ОС в окружении EFI, параметр -acpitable просто игнорирует.
Естественно, использовать эмуляцию ACPI таблиц можно, только следуя букве и духу лицензионного соглашения с Microsoft, иначе кармические силы покарают вас.
Автор: lovecraft