如何设置VirtualBox bios UUID

时间:2015-09-18 09:37:52

标签: virtualbox

我尝试在VirtualBox中使用我的原生Windows安装,并且由于它具有OEM许可证,因此我需要重用bios UUID才能使激活工作。

一些系统信息:
操作系统:Arch Linux,内核4.1.6-1
Virtualbox:5.0.4_OSEr102546

本机使用的原始vmdk磁盘仅限于本机Windows安装使用的6个分区。

我已经为很多dmi数据应用了诸如modifyvm --hardwareuuid和setextradata之类的命令。

配置中的相关行是:

<ExtraData>
  ...
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardLocInChass" value="Type2 - Board Chassis Location"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" value="Lancer 5A5"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardSerial" value="string:1052326401165"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardVendor" value="LENOVO"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiBoardVersion" value="31900058WIN"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisSerial" value="YB10465037"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisVendor" value="LENOVO"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiChassisVersion" value="Lenovo Z50-70"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiProcManufacturer" value="Intel(R) Corporation"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiProcVersion" value="Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="1abbb2fc-c938-11e4-a961-68f728a77e71"/>
  <ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/UUID" value="bytes:Gruy/Mk4EeSpYWj3KKd+cQ=="/><!-- UUID in BASE64 -->
</ExtraData>
<Hardware version="2" uuid="{1abbb2fc-c938-11e4-a961-68f728a77e71}">
  <CPU count="1" hotplug="false">
    <HardwareVirtEx enabled="true"/>
    <HardwareVirtExNestedPaging enabled="true"/>
    <HardwareVirtExVPID enabled="true"/>
    <HardwareVirtExUX enabled="true"/>
    <PAE enabled="true"/>
    <LongMode enabled="true"/>
    <HardwareVirtExLargePages enabled="false"/>
    <HardwareVirtForce enabled="false"/>
  </CPU>
  <Memory RAMSize="2560" PageFusion="false"/>
  <Firmware type="EFI"/>
  <HID Pointing="USBTablet" Keyboard="PS2Keyboard"/>
  <HPET enabled="false"/>
  <Chipset type="PIIX3"/>

Vboxmanage showvminfo返回以下行:

Hardware UUID:   1abbb2fc-c938-11e4-a961-68f728a77e71

你可以看到,我已经使用了VirtualBox的hardwareuuid设置,dmi设置DmiSystemUuid和UUID(这个我必须从日志中进行逆向工程并找出如何通过它 - 通过base64和转换为字节)

然而,当我运行机器时,VirtualBox以某种方式决定它更清楚并使用机器的初始UUID。它在日志中显示(最后一行):

00:00:00.586671 ************************* CFGM dump *************************
00:00:00.586674 [/] (level 0)
00:00:00.586680   CSAMEnabled       <integer> = 0x0000000000000001 (1)
00:00:00.586683   CpuExecutionCap   <integer> = 0x0000000000000064 (100)
00:00:00.586686   EnablePAE         <integer> = 0x0000000000000001 (1)
00:00:00.586687   HMEnabled         <integer> = 0x0000000000000001 (1)
00:00:00.586689   MemBalloonSize    <integer> = 0x0000000000000000 (0)
00:00:00.586690   Name              <string>  = "Windows 8" (cb=10)
00:00:00.586692   NumCPUs           <integer> = 0x0000000000000001 (1)
00:00:00.586693   PATMEnabled       <integer> = 0x0000000000000001 (1)
00:00:00.586695   PageFusionAllowed <integer> = 0x0000000000000000 (0)
00:00:00.586696   RamHoleSize       <integer> = 0x0000000020000000 (536 870 912, 512 MB)
00:00:00.586699   RamSize           <integer> = 0x00000000a0000000 (2 684 354 560, 2 GB)
00:00:00.586701   RawR0Enabled      <integer> = 0x0000000000000001 (1)
00:00:00.586702   RawR3Enabled      <integer> = 0x0000000000000001 (1)
00:00:00.586704   TimerMillies      <integer> = 0x000000000000000a (10)
00:00:00.586705   UUID              <bytes>   = "fc b2 bb 1a 38 c9 e4 11 a9 61 68 f7 28 a7 7e 71" (cb=16)

不幸的是,这个是重要的UUID。在Windows 8中,如果我使用wmic命令,它会报告UUID: fcb2bb1a-38c9-e411-a961-68f728a77e71 ,而我想要 1abbb2fc-c938-11e4-a961-68f728a77e71 。< / p>

我已经推断出它可能会被从root开始的extradata操纵,所以我试着排成一行:

<ExtraDataItem name="VBoxInternal/UUID" value="bytes:Gruy/Mk4EeSpYWj3KKd+cQ=="/>

将日志值更改为正确的值,但是wmic仍然报告以&#39; fc&#39;开头的那个。 Windows激活也无法正常工作。

所以现在我真的没有想法。

有没有人成功地设置了这个,如果是这样的话?

2 个答案:

答案 0 :(得分:1)

重要的一点是:

<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="1abbb2fc-c938-11e4-a961-68f728a77e71"/>

但前四组的字节顺序相反,所以需要写成:

<ExtraDataItem name="VBoxInternal/Devices/efi/0/Config/DmiSystemUuid" value="fcb2bb1a-38c9-e411-a961-68f728a77e71"/>

答案 1 :(得分:0)

由于您写道,实际上您实际上想做的是重用激活,而不仅仅是克隆硬件UUID,因此以下信息可能对您有用(其中许多信息来自最高级文章https://forums.gentoo.org/viewtopic-t-1071844-start-0.html (对于尝试虚拟化Windows安装的任何人来说都是非常有用的阅读),其中一些是我最近看到的内容:

在上面的文章中声称,为了使Windows激活服务器相信它们与物理计算机被“同一”计算机查询,一台计算机必须具有与原始硬件中的值相同配置的以下硬件参数机器:

  1. 整体机器硬件UUID
  2. 安装Windows的磁盘的序列号
  3. 安装Windows的分区的分区UUID
  4. 如果许可证是预安装的OEM许可证,则是从该许可证进行的升级,那么SLIC固件也需要安装在新计算机上。

注意: 1.分区UUID与该分区上文件系统的文件系统UUID不同。如果您可以在原始计算机上运行linux,那么blkid就是该分区的PARTUUID。 2.“安装Windows的磁盘”或分区是包含Windows \ System32 \ winload.exe文件的磁盘或分区。 MS将该分区误称为“启动分区”。 (之所以这样称呼,是因为它包含所有系统文件。包含启动机器所需文件的分区称为(当然)“系统分区”。 3.我不知道是否/如何将SLIC导入virtualbox VM。上面的帖子介绍了如果使用KVM / libvirt / virsh,该如何做。 4.肯定有VIrtualBox VBoxManage命令用于设置硬件UUID,虚拟磁盘(甚至原始磁盘)的分区UUID以及磁盘序列号。不幸的是,在VirtualBox中(截至我撰写本文时),只能为连接到(虚拟)SATA或IDE控制器的磁盘设置磁盘序列号。因此,使用virtio或nvme控制器的VIrtualBox VM目前是SOL。大概会在某个时候解决。

最后,HKLM \ SYSTEM \ HardwareConfig处有一组注册表项,其值似乎是“系统信息”显示的信息的来源。通过阅读VIrtualBox手册,我成功地使系统信息的输出在原始物理计算机和VirtualBox VM之间几乎相同。 (我什至把Win 10 VM的系统信息都当作是Win 8盒子报告的,这很有趣-输入Win 8产品密钥是否会使机器认为它已经激活了。相关部分手册中有关“供应商产品信息”和“ Dmi BIOS信息”的信息。

我成功进行了激活,以使其能够在具有虚拟SATA磁盘的计算机上工作,但无法在具有虚拟vnme磁盘的计算机上工作-因此,我假设至少需要硬盘和分区UUID(其中之一)。