XP activation with licence but without key

Discussions about using Windows guests in VirtualBox.

XP activation with licence but without key

Postby disz » 4. Dec 2007, 22:50

Some users have a licence for XP but no registration key. For example those who buy a PC with Vista Business preinstalled that comes with an XP recovery cd. The manufacturer bought volume licences for the downgrades and the XP-machines are activated by information from DMI/SMBIOS.

Or so I've been told on the Fujitsu-Siemens hotline.
If you install XP in virtualbox with the mentioned media, activation fails AND microsoft telephone support won't help.

But it can be fixed by putting the DMI-strings from the systems' BIOS into virtualboxes BIOS:
Download the VirtualBox OSE tarball.
Get the DMI-strings by:
Code: Select all   Expand viewCollapse view
sudo dmidecode -t 1

Enter them into the source-file VirtualBox/src/VBox/Devices/PC/DevPcBios.cpp in the function pcbiosPlantDMITable (line 743).
Proceed with Linux build instructions.

It seems to work. Tell me, if you think that hack might mess virtualbox up.
I am pretty sure that it does not violate any licensing terms.
Last edited by disz on 12. Jan 2008, 02:57, edited 1 time in total.
Posts: 7
Joined: 4. Dec 2007, 14:09

this is kinda like my laptop

Postby mobius08 » 19. Dec 2007, 10:48

I have a OEM disc that came with my dell laptop (xp pro sp2) and it is a similar situation when I install xp in a virtual environment from a native OS (kubuntu 7.10). The activation wizard pops up in virtual environment where it normally wouldn't installing it on the dell directly. I will attempt to try your solution when I get another HD.

P.S. Microsoft license agree found here: http://www.microsoft.com/windowsxp/home/eula.mspx
Posts: 3
Joined: 19. Dec 2007, 01:32


Postby tux_fan » 30. Dec 2007, 08:14

disz: Thank you so much for pointing me in the right direction. My girlfriend just got a Dell Vostro 1400 for Christmas, which I've installed Linux on, and I've been trying to figure out a [legal] way around the issue with OEM Windows licenses being tied to a specific hardware platform. I modified that c++ module with her system's SMBIOS information, compiled, and was then able to successfully register her copy of Windows XP Home Edition (OEM). VirtualBox is amazingly faster than VMWare, which I was using before in order to get around this issue. It's also a little faster than Qemu with the KQemu accelerator module. Plus it has a pretty GUI interface that my girlfriend can easily use.

So, thank you again for your tip!!! :D

Posts: 4
Joined: 30. Dec 2007, 07:55

Postby stegada » 8. Feb 2008, 19:56

i'm unable to modify the cpp file :oops: , may you help me?
Thank you so much
Posts: 2
Joined: 8. Feb 2008, 19:49

Postby disz » 10. Feb 2008, 18:52

Hi stefano,
I am not sure if I understand you correctly. You mean, you do not have writing permissions to the source file or you need assistance on what to change in the file?
(I would be happy to help, but I am currently too lazy to write down solutions for both, so I just wait for your answer...)
Posts: 7
Joined: 4. Dec 2007, 14:09

Postby stmiller » 10. Feb 2008, 20:15

You *might* be able to take that XP disc, and recreate a standard XP install disc with a program like nlite. http://www.nliteos.com/
Posts: 36
Joined: 5. Aug 2007, 19:28

Postby disz » 10. Feb 2008, 20:28

@stmiller: Wrong topic?
Posts: 7
Joined: 4. Dec 2007, 14:09

Postby stegada » 11. Feb 2008, 11:13

Hi disz,
you are right, I wasn't clear enough,
I need assistance on what to change the file, cause i'm not skilled in c++.
that’s very kind of you, thank's a lot.
Posts: 2
Joined: 8. Feb 2008, 19:49

Postby disz » 11. Feb 2008, 20:57

Hi stefano,

no problem.
So "sudo dmidecode -t 1" gives you something like this:
Code: Select all   Expand viewCollapse view
# dmidecode 2.9
SMBIOS 2.4 present.

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: FUJITSU SIEMENS
        Product Name: ESPRIMO Mobile V5505           
        Version: 20             
        Serial Number: 'your serial nr'
        UUID: 'your uuid'
        Wake-up Type: Power Switch
        SKU Number: Not Specified
        Family: Not Specified

And starting from line 786 in the VirtualBox/src/VBox/Devices/PC/DevPcBios.cpp file you find this:
Code: Select all   Expand viewCollapse view
    pSystemInf->u8Manufacturer   = iStrNr++;
    STRCPY(pszStr, "innotek GmbH");
    pSystemInf->u8ProductName    = iStrNr++;
    STRCPY(pszStr, "VirtualBox");
    pSystemInf->u8Version        = iStrNr++;
    STRCPY(pszStr, "1.2");
    pSystemInf->u8SerialNumber   = iStrNr++;
    STRCPY(pszStr, "0");
    memcpy(pSystemInf->au8Uuid, puuid, sizeof(RTUUID));

Combining both and you have:
Code: Select all   Expand viewCollapse view
    pSystemInf->u8Manufacturer   = iStrNr++;
//    STRCPY(pszStr, "innotek GmbH");
    pSystemInf->u8ProductName    = iStrNr++;
    STRCPY(pszStr, "ESPRIMO Mobile V5505");
//    STRCPY(pszStr, "VirtualBox");
    pSystemInf->u8Version        = iStrNr++;
    STRCPY(pszStr, "20");
//    STRCPY(pszStr, "1.2");
    pSystemInf->u8SerialNumber   = iStrNr++;
    STRCPY(pszStr, "'your serial nr'");
//    STRCPY(pszStr, "0");
    memcpy(pSystemInf->au8Uuid, "'your uuid'", sizeof(RTUUID));
//    memcpy(pSystemInf->au8Uuid, puuid, sizeof(RTUUID));

I am not sure if really all the strings I exchanged are needed. It may very well be, that only the UUID needs to be exchanged. Since compiling takes quite some time I did not bother to check.
Posts: 7
Joined: 4. Dec 2007, 14:09

Postby bundabrg » 23. Feb 2008, 10:03

I wonder if it would be useful if:
a) This is easily modified runtime through a setting


b) Virtualbox reads the hosts information and uses that (an option to do this as well).

Posts: 47
Joined: 22. Feb 2008, 04:01

Postby disz » 25. Feb 2008, 23:53

In my opinion, it would be tremendously useful if Innotek addressed this problem at all.

The easiest way to code would probably be an option that enables the user to enter the strings himself. An option like "copy the hosts dmi settings into the guests bios" would be even better, but - correct me if I'm wrong - the hosts dmi-strings are only accessible with root privileges. I'm not sure if Innotek/Sun would want to implement it this way, since virtualbox is supposed to be usable as a normal user.

Could the dmi strings maybe be read during the installation, which naturally runs with root privileges? They could be stored in case the user needs them later. But on the other hand, why are they not readable with a restricted access in the first place? There might be a good reason for that, of which I am not aware of right now...
Posts: 7
Joined: 4. Dec 2007, 14:09

Setting up DevPcBios.cpp

Postby tomaskCZ1 » 28. Feb 2008, 13:42

The problem is that the activation is needed anyway and as there are cases that this way activated 'boxed' windows disabled the real ones I wonder if there is something more to enhance this method.
Normally installed windows doesn't require an activation in my case on the Dell laptop, so there may be some more parameters to change.

Complete dmidecode command gives also this output for example - any idea how to implement that ?

OEM Strings
String 1: Dell System
String 2: 5[0003]
String 3: 13[PP17L]
Posts: 11
Joined: 27. Feb 2008, 21:16

Postby wildnux » 19. Jul 2008, 04:30

So I am also having the same problem with my the activation of windows in virtual machine.....
I have some question before installing from source code. Will it support usb and shared folder, if i installed it from source code? I am using the non-ose version on opensuse 11.

I am installing windows only to work with my camcorder through usb.
Posts: 3
Joined: 17. Jul 2008, 00:32

Postby tomaskCZ1 » 19. Jul 2008, 09:46

I am using it without usb support, but as for shared folders, they work through those virtual box guest additions

anyway you can install XPs through OSE version, it will go through activation process successfully and then use the VM with the classic non-OSE version.

Be carefull to stick with 1.5.6 version, I had problems with VB addition under 1.6.2 ( resolution and other problems)
Posts: 11
Joined: 27. Feb 2008, 21:16

Postby g_mocken » 13. Aug 2008, 10:25

I have found these changes to be sufficient in the current SVN version:

Line 864:
Code: Select all   Expand viewCollapse view
     * Don't change this information otherwise Windows guests will demand re-activation!
    READCFGSTR("DmiBIOSVendor",        pszDmiBIOSVendor,      "innotek GmbH");
    READCFGSTR("DmiBIOSVersion",       pszDmiBIOSVersion,     "VirtualBox");
    READCFGSTR("DmiBIOSReleaseDate",   pszDmiBIOSReleaseDate, "12/01/2006");
    READCFGINT("DmiBIOSReleaseMajor",  iDmiBIOSReleaseMajor,   0);
    READCFGINT("DmiBIOSReleaseMinor",  iDmiBIOSReleaseMinor,   0);
    READCFGINT("DmiBIOSFirmwareMajor", iDmiBIOSFirmwareMajor,  0);
    READCFGINT("DmiBIOSFirmwareMinor", iDmiBIOSFirmwareMinor,  0);
    READCFGSTR("DmiSystemVendor",      pszDmiSystemVendor,    "FUJITSU SIEMENS");
    READCFGSTR("DmiSystemProduct",     pszDmiSystemProduct,   "ESPRIMO EDITION P2420");
    READCFGSTR("DmiSystemVersion",     pszDmiSystemVersion,   "");
    READCFGSTR("DmiSystemSerial",      pszDmiSystemSerial,    "<your serial number>");

In particular, there was no need to enter the UUID anywhere.
Posts: 12
Joined: 6. Aug 2008, 14:23


Return to Windows Guests

Who is online

Users browsing this forum: No registered users and 11 guests