XP activation with licence but without key

Discussions about using Windows guests in VirtualBox.
disz
Posts: 7
Joined: 4. Dec 2007, 14:09

XP activation with licence but without key

Post by disz »

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

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.
mobius08
Posts: 3
Joined: 19. Dec 2007, 01:32

this is kinda like my laptop

Post by mobius08 »

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
tux_fan
Posts: 4
Joined: 30. Dec 2007, 07:55

THANK YOU!!!!

Post by tux_fan »

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

-Chris
stegada
Posts: 2
Joined: 8. Feb 2008, 19:49

Post by stegada »

Hi,
i'm unable to modify the cpp file :oops: , may you help me?
Thank you so much
stefano
disz
Posts: 7
Joined: 4. Dec 2007, 14:09

Post by disz »

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...)
stmiller
Posts: 36
Joined: 5. Aug 2007, 19:28

Post by stmiller »

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/
disz
Posts: 7
Joined: 4. Dec 2007, 14:09

Post by disz »

@stmiller: Wrong topic?
stegada
Posts: 2
Joined: 8. Feb 2008, 19:49

Post by stegada »

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.
stefano
disz
Posts: 7
Joined: 4. Dec 2007, 14:09

Post by disz »

Hi stefano,

no problem.
So "sudo dmidecode -t 1" gives you something like this:

Code: Select all

# 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

[...]
    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

[...]
    pSystemInf->u8Manufacturer   = iStrNr++;
    STRCPY(pszStr, "FUJITSU SIEMENS");
//    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.
bundabrg
Posts: 47
Joined: 22. Feb 2008, 04:01

Post by bundabrg »

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

or

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


Brendan
disz
Posts: 7
Joined: 4. Dec 2007, 14:09

Post by disz »

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...
tomaskCZ1
Posts: 11
Joined: 27. Feb 2008, 21:16

Setting up DevPcBios.cpp

Post by tomaskCZ1 »

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]
...
wildnux
Posts: 3
Joined: 17. Jul 2008, 00:32

Post by wildnux »

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.
tomaskCZ1
Posts: 11
Joined: 27. Feb 2008, 21:16

Post by tomaskCZ1 »

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)
g_mocken
Posts: 12
Joined: 6. Aug 2008, 14:23

Post by g_mocken »

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

Line 864:

Code: Select all

/*
     * 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.
Post Reply