Пользователь
0,1
рейтинг
12 января 2015 в 09:48

Администрирование → 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, иначе кармические силы покарают вас.
@lovecraft
карма
55,0
рейтинг 0,1
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (22)

  • +1
    Здорово! Спасибо, очень интересно!
    Увы, в родном для Microsoft Hyper-V, в этом плане все через одно место. Добиться заполнения ACPI таблиц можно, лишь редактируя бинарный файл vmwp.exe, — одни настройки на все ВМ. Можно, например, заполнить SLIC поля для OEM активации XP/2003 и SLIC 2 поля для оффлайн ОЕМ активации Vista/7 (2008/R2), но с 8+ уже не особо поиграть, так как встроенный ключ будет один на всех. Здорово, что army это позволяет так просто!
  • 0
    Здорово, что в QEMU это позволяет так просто! Спеллчекер убил ))
    • 0
      в виртуалбоксе вроде бы тоже не сложно, вот например как здесь.
    • +2
      Честно говоря, для запуска QEMU лучше использовать virt-manager, там понятный GUI и не так страшно. Хотя то, что получается у virt-manager'a на выходе, немного пугает ). Например, вот это получается при создании обычной виртуалочки с Win7 и IDE-контроллером на борту:

      qemu-system-x86_64 -enable-kvm -name win7-x86-pro-oem-tpl -S -machine pc-i440fx-2.1,accel=kvm,usb=off -cpu Opteron_G3 -m 512 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid aa2dc288-b10f-43a4-ab00-8c1775b9bed7 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/win7-x86-pro-oem-tpl.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 -drive file=/media/storage/VMs/Win7_x86_Pro_OEM_Tpl.qcow2,if=none,id=drive-ide0-0-0,format=qcow2 -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -drive file=/media/storage/soft/7601.17514.101119-1850_x86fre_client_ru-ru_OEM_Professional-GRMCPRFREO_RU_DVD.iso,if=none,id=drive-ide0-0-1,readonly=on,format=raw -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 -netdev tap,fd=24,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:7f:da:92,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -device usb-tablet,id=input0 -spice port=5900,addr=127.0.0.1,disable-ticketing,seamless-migration=on -device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,bus=pci.0,addr=0x2 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -chardev spicevmc,id=charredir0,name=usbredir -device usb-redir,chardev=charredir0,id=redir0 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1 -chardev spicevmc,id=charredir2,name=usbredir -device usb-redir,chardev=charredir2,id=redir2 -chardev spicevmc,id=charredir3,name=usbredir -device usb-redir,chardev=charredir3,id=redir3 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
      
  • 0
    Правильно ли я понимаю, что если венда уже была активирована, а потом просто перенесена в виртуалку (грубо говоря загрузили QEMU с раздела с уже установленной вендой), то ключ и сертификат уже прописаны/вшиты и достаточно только ACPI таблиц?
    • +1
      Да, правильно.
    • 0
      Наверное, все-таки нет.

      Во-первых, OEM-винда не очень хорошо относится к полной смене оборудования и, скорее всего, активация слетит. По крайней мере, при P2V-преобразованиях слетает.
      Во-вторых, винда должна быть установлена с раздела восстановления, который записан на HDD производителем, только тогда в ней уже будут ключи для соответствующей SLIC-таблицы. MSDN-диск для этого не подойдет.
      Если вы где-то (например, в Гугле) сумели достать OEM-сертификат и OEM-ключ, то их можно вшить и в установку с MSDN-диска.
      • 0
        Винда, скорее всего, слетит когда много железа менять. Но по поводу MSDN диска не совсем верно в случае с Windows 8. Если поправить/создать ei.cfg и дописать там OEM в сеции [Channel], то диск становится OEM. То есть, можно устанавливать на OEM машину с OEM номером, который можно взять из MSDM таблицы в OEM BIOS'е.
        OEM сертификаты нужны для Windows 7.
      • 0
        Активация, конечно, слетит, но сразу же опять произойдет.
        Аналогичный пример — я в ОЕМ лаптопе заменяю жесткий диск — вес системного диска в таблице компонент равен 11, будет переактивация. Но так как в BIOS есть таблицы и номер верный, она заново активируется.

        С ретейл несколько сложнее, в зависимости от канала продаж, одноразовый ретейл номер проходит онлайн активацию 1-5 раз, — и еще минимум 5 раз активацию по телефону
      • 0
        Я просто OEM-ную Win8, уже установленную на реальное железо иногда запускаю в виртуалке (просто пробросив весь жесткий диск туда). Венда не слетает, вполне работает. Единственное — думает что не активирована. Вот хотелось бы обмануть.

        Буду пробовать
        • 0
          Что за средство виртуализации?
          • 0
            Сейчас vmware player. c qemu тоже работало
  • 0
    А в чём польза активации и ввода серийного номера для пользователя?
    • +5
      На мой взгляд — ни в чем. Защита Windows от нелицензионного копирования создает намного больше проблем, чем решает. В итоге админы с легальным софтом вынуждены извращаться, а пираты все равно используют нелицензионные копии. На мой взгляд, больше пользы было бы не от ключа/лицензии, а от всплывающего при установке ОС окна с таким текстом:

      -Уважаемые христиане-
      Как говорит Библия, «Воры… — Царства Божия не наследуют» (1 Кор. 6,10). Не укради!

      -Уважаемые мусульмане-
      Как говорит Коран, «Отрубите руку вору и воровке за содеянное ими как примерное наказание от Аллаха. Поистине, Аллах Превелик и Премудр» (сура «Аль-Маида», аят 37). Не греши!

      -Уважаемые атеисты-
      Как говорит УК РФ, «Незаконное использование объектов авторского права или смежных прав, а равно приобретение, хранение, перевозка контрафактных экземпляров произведений или фонограмм в целях сбыта, совершенные в крупном размере, — наказываются штрафом в размере до двухсот тысяч рублей или в размере заработной платы или иного дохода осужденного за период до восемнадцати месяцев, либо обязательными работами на срок от ста восьмидесяти до двухсот сорока часов, либо исправительными работами на срок до двух лет, либо лишением свободы на срок до двух лет.» (статья 146, ч.2). Не нарушай закон!
      • +1
        apt-get purge windows.
  • +1
    Вот бы еще научиться вшивать серийники в UEFI, а то на тестовых машинках инженеров, в небольшом опсосе, винду раз в неделю приходилось переустанавливать — когда через машинку проходит пару сотен телефонов и модемов которые прошиваются каждый тип своим кабелем, своим программатором и своим п/о — это адова печаль, но пускать эти машины в рабочую офисную сеть — никак нельзя…
    • 0
      Нет технических ограничений на доступ к SLIC и MSDM из EFI, другое дело, что для Windows 8 в ноутбуки уже не вшивают SLIC, потому что таблица SLIC — это фактически готовый инструмент, которым можно обойти проверку подлинности, причем — без доступа к серверам Microsoft. А MSDM уже требует активации.
      • 0
        Т.е приходим к тому, что под каждую тестовую оффлайновую машину надо свою болванку Win8+ с вшитым серийником готовить?
        • 0
          Увы (
    • 0
      Если там Win7 или выше, можно установить, активировать, настроить в VHD, сделать дифференциальный диск, грузиться в него. Как подпортится, сделать новый дифференциальный от оригинала — удалив старый.
      Речь идет о загрузке голой ОС c VHD — без всякой виртуализации.
      Увы, все что было до 7 не поддерживает Boot from VHD.
  • 0
    А можно восстановить систему, если hdd был отформатирован полностью, вместе с XRM-MS файлом?
    • 0
      Архив с файлами сразу для всех OEM легко гуглится.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.