With the advent of the performance function in HTML it's now possible to zero in on the device's clock speed. Once you have this data you can tell if a device is running the browser on a peice of hardware or if it is a virtual machine. Virtual machines use either use a synthetic HPET based counter (typically showing as 10,000Mhz) or an ACPI based counter (typically showing as 35795 MHz).
How It Works
The window.performance.now() yields a time measurement in milliseconds which is an integral number of the Windows performance counter ticks (1/f where f is the Windows performance counter frequency).By sampling window.performance.now() it is possible to determine the underlying time unit with some math. The more samples performed the better the results, with the downside of some latency. NOTE: Firefox claimed to have closed this detection but it seems that it does occasionally work in newer versions.
Entropy Estimate: TBD
Unlike other code on the Internet we do everything possible to verify our code for you. In order to minimize problems and maximize compatibility this code has been verified with JSLint and has been extensively tested with over 1100 OS/Browser combinations using BrowserStack.