Virtual String Machine Keygen

When managing a large number of virtual machines, there is often a need to tag it in some way with one or more properties uniquely identifying it for administrative purposes. One example would be to identify a virtual machine as belonging to a person, team or business unit.

The Hyper-V WMI namespace has a number of BIOS properties which can be set when a virtual machine is turned off. As these properties are part of the virtual machine configuration, they are separate from the VHD or backing storage used by the virtual machine. These properties can also be read from within a guest operating system.

Gforce Virtual String Machine Vsti Serial Numbers. Convert Gforce Virtual String Machine Vsti trail version to full software. G-force Virtual String Machine Serial Numbers. Convert G-force Virtual String Machine trail version to full software. LinkKeygen Dist. The Keygen Dist API is a hosted distribution server for your Keygen products. For some licensing models e.g. One which requires a machine fingerprint scope, this may introduce a catch-22. Linkmachine string, optional. The machine identifier (UUID) to scope the license validation to.

To start with, let’s look at the following four properties and the default values they are initialized to when a virtual machine is created:

PropertyDefault value
BIOSSerialNumber Randomly generated
BaseBoardSerialNumberSame value as BIOSSerialNumber
ChassisSerialNumberSame value as BIOSSerialNumber
ChassisAssetTagRandomly generated (but different to BIOSSerialNumber

All these properties are numeric and in the format 'XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XX'.

Windows provides WMI classes that expose these settings inside a guest operating system. The table below shows the relationship between the WMI properties of the virtual machine and WMI properties as seen by a guest operating system.

Keygen
Property of Msvm_VirtualSystemSettingDataWMI class & property in guest operating system
BIOSSerialNumberWin32_BIOS.SerialNumber
BaseBoardSerialNumberWin32_BaseBoard.SerialNumber
ChassisSerialNumberWin32_SystemEnclosure.SerialNumber
ChassisAssetTagWin32_SystemEnclosure.SMBIOSAssetTag

To illustrate how these values can be queried, I set the values to something less random and more easily identifiable. Here’s a partial output of a query against Msvm_VirtualSystemSettingData obtained using the wbemtest application on the parent partition. (Ignore the BIOSGUID property for a few moments).

instance of Msvm_VirtualSystemSettingData
{
BaseBoardSerialNumber = '2222-2222-2222-2222-2222-2222-22';
BIOSGUID = '{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}';
BIOSSerialNumber = '1111-1111-1111-1111-1111-1111-11';
ChassisAssetTag = '4444-4444-4444-4444-4444-4444-44';
ChassisSerialNumber = '3333-3333-3333-3333-3333-3333-33';
};

The next step was to generate something to query the WMI properties inside the guest operating system. I used a bit of scriptomatic assistance to come up with the following bit of VBScript – there’s plenty of other alternatives around of course including wbemtest again, a bit of PowerShell, ...

This yielded the following output:

So the last problem I had to solve was the BIOSGUID value which I’d set in the virtual machine configuration to AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE. I use the word “problem” because I couldn’t see where or if this was propagated to the guest operating system in the WMI namespace. Nothing like a good challenge… 🙂

As searching the WMI namespace drew blank (or to be more accurate I missed it), I turned to some other thoughts. First was a registry search, but that also drew a blank.

I did know that the BIOS GUID is used during PXE boot – here’s a screenshot of the same virtual machine configured with a legacy network adapter for PXE install – you can see the contrived GUID being displayed:

Next call was a utility I found from an Internet Search called ROM BIOS Explorer. Here’s a screenshot of it running inside the guest operating system. As you can see from the hex-dump on the left hand side, starting at the highlight at offset 0x49, you can see the contrived GUID clearly. The utility also indicates it’s in the “Type 1: System Information” structure in the BIOS.

So that means the information is there – it was just a question of how to access it from inside the guest operating system. Next stop was an Internet search for Type 1: System Information which yielded (among others), this document about SMBIOS on Microsoft.com.

This shows that the table contains a Serial Number and UUID (another term for a GUID). So back to the Internet to refine the search to include the term “UUID” which led me to a pretty old SMS document which had exactly what I was looking for: Type 1, System Information UUID is exposed in Win32_ComputerSystemProduct.

Back to scriptomatic to do a query, and it was there all along!

There's also one other useful link I found along the way. To see a sample script on how to modify Msvm_VirtualSystemSettingData please see here.

Cheers,
John.

PS Thanks to my colleague Frank Berreth for pulling much of the information for this post together.

Active4 years, 4 months ago

I have question how to generate unique serial number of machine in Delphi? I tried to do this using the ID the motherboard or processor, but unfortunately it's unfortunately supported. Partition serial numbers, etc. fall off, because it is changing after the formatted. I'm looking for something that doesn't change after the formatted. Has anyone any idea?

dsolimano
7,6173 gold badges41 silver badges57 bronze badges
noxwownoxwow

7 Answers

Inside JCL library, there are several functions very usefull for this topic:

TridenTTridenT
4,2861 gold badge26 silver badges55 bronze badges

What you're after is actually some sort of 'hardware fingerprint', not an 'serial number'. The problem with this approach is that it's not 100% reliable. Proof: Microsoft didn't manage to find a way to properly limit OEM software to any single computer, you can actually re-install a OEM license on a new computer after a while! Once you agree there can't be a perfect solution you may look at your options and try getting something that's good enough.

For my applications I'm creating a fingerprint based on info returned by GetSystemInfo, GetVolumeInformation and (for the 'C:' partition) and a selection of registry keys from HKLMHARDWARE (lots of registry keys actually, everything but usb, keyboard and mouse stuff). I'm reading hardware information from the registry because a Windows application can't really access hardware directly (DOS-style approaches can't work), and because I don't have time to figure out ways to determine hardware-related information for many different devices.

My approach has the following disadvantages:

  • Uses the partition serial number, as set up by Format. An format would clearly change the fingerprint.
  • Uses information about the installed drivers. Updating an driver might actually change the fingerprint! Moving a card from one PCI port to an other might change the fingerprint.

None the less, even with all of this changing information taken into account, I get collisions: Something like 1/1000 computers! There are several factors at work here:

  • Big OEM build many computers using the same hardware. They also clone HDD's in order to speed up software installation so different PC's might get the same partition serial number.
  • I'm building a very short hash from all that information, short enough so people can read it to me on the phone without too many mistakes.

This system works for me, but it will not work for you if you expect to re-identify computers once they're reinstalled.

Cosmin PrundCosmin Prund
24.1k2 gold badges53 silver badges94 bronze badges

You can test GLibWMI that extract information of several components on Windows.
It's free and source included. You can find it on my Web or in Sourceforge.

Include components for BIOSInfo, DiskInfo, ProcessorInfo,...

With this three components you can obtain information like this:

You can find the BIN/EXE of GenericDemo (all components) here; You can test all information that you can retrive with this components.

Virtual String Machine

Germán Estévez -Neftalí-Germán Estévez -Neftalí-

I had a similar problem back in the good old DOS days. I found out that the ROM of the installed hardware ie. video card, disk controllers seriel ports etc. was accessible directly, since they are memory-mapped. This means that I was able to create a list of installed hardware, and use it to generate a 'serial number', that uniquely identified each computer (until the hardware setup was changed). I'm sure something similar is possible today as well.

Check out http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map, if you want to use this approach.

Regards

  • Frank
FrankFrank
3321 gold badge2 silver badges11 bronze badges

Often the MAC address of the (a) network card is used, there are several ways to query the mac address (in Delphi) but the easiest/cleanest way is probably to use the GetAdaptersInfo API.

RemkoRemko
5,7211 gold badge23 silver badges47 bronze badges

Here is a simple solution

  • Generate a GUID
  • Save the Guid value in the registry
  • Use the value of the guid as the serial number

If you a worried about security use a hash over the ( Guid + some secret data)

Charles FaigaCharles Faiga
6,42422 gold badges91 silver badges135 bronze badges
Virtual string machine serial number

I tend to agree with the 'it can't be done' camp. At least not 100%, but it can probably be done 'good enough' to keep the average user in line.

Virtual String Machine Geforce

And if it can be done then it probably has been done. Did you check Torry's Delpi300, etc (maybe even sourceforge, although you might have to translate into Delphi).

http://www.google.com.sg/search?hl=en&source=hp&q=How+to+generate+unique+serial+number+of+machine+in+Delphi actually looks promising

MawgMawg
15k75 gold badges245 silver badges457 bronze badges

Not the answer you're looking for? Browse other questions tagged delphiserial-number or ask your own question.