FingerPrinting (or Machine Locking) refers to a mechanism which will uniquely identify a particular computer by its various features, settings, serial numbers, hardware characteristics, etc. There are two ways which the SoftwareShield System uses FingerPrints.
FingerPrint All License Codes This refers to a feature of a license which ensures Authorization Request Codes uniquely identify the machine from which a request originated and ensures reciprocated License Codes are only verified as valid for the unique machine for which they were intended. It essentially allows you to ensure that License Codes for a specific user (computer) cannot be used by any other user (computer) other than the one for which it is intended. This check is performed once for every License Codes, as it is input.
Copy-Protection This refers to a feature of a license which causes the SoftwareShield to check every time the \emph{gsInit} function is called to see if the host computer is explicitly authorized to use the license. This is done by computing the host systems FingerPrint according to a set of included FingerPrint option flags and comparing that to a list of explicitly authorized FingerPrints stored inside the license.
The FingerPrint of a machine is computed from a set of available options you include in your option flag set. The available options are explained as following, one can be independently turned on or off.
Naturally, you can completely turn off FingerPrinting if you wish by selecting no options whatsoever.
Option | Sample | Description |
---|---|---|
Memory | 6C060269 6C063968 6C06176B | Serial numbers of installed memory |
Hard Disk | JP2740HP06LX7H | Serial number of the first hard disk |
BIOS | BS8MCV1 | BIOS serial number |
CPU | Intel(R) Core(TM) i3-2328M CPU @ 2.20GHz | CPU type |
Machine Model | Vostro 2520 | The unique machine hardware model |
Motherboard | CN762062BR00PM | The motherboard serial number |
Option | Description |
---|---|
Memory | Total bytes of installed memory |
CPU | CPU type |
Host ID | HardDisk parameters |
Host Name | |
Machine Type | |
Machine Model | |
OS Version | |
OS Name |
The various options are bound to machine specific information that is retrieved from the (customers) system at run-time. On Windows, SoftwareShield does not need administrator privilege to detect these hardware information and it is almost impossible for normal users to modify these fingerprint values without special hardware programming tool-kit. These fingerprint values can also remain constant when the fingerprint detecting algorithm is executing as different users, which is very important to ensure a SoftwareShield license can be shared by multiple users on the same machine.
Usually, the associated attributes of enabled fingerprint options on the customers system must remain unchanged or else the systems FingerPrint will essentially change. This could mean that License Codes that are intended for a specific system will only work on a system whose FingerPrint (generated from enabled options) match exactly with the FingerPrint that is embedded inside the code itself.
However, the modern PC hardware evolves quickly and sometimes end users might need to upgrade their machines, it would be a headache if the installed applications cannot run after hardware upgrade. SoftwareShield introduces Fingerprint Tolerance to match fingerprint in a fuzzy way.
In SoftwareShield, the values of all enabled fingerprint options are packed as an array of 32-bit integer, Fingerprint Tolerance defines the maximum number of different values between two \emph{matched} fingerprint value arrays.
For example, in the above picture we have enabled 7 fingerprint options, we also set the fingerprint tolerance to 2. Even though the fingerprint values detected at run-time has one or two mismatched option values, the pair of fingerprints are still considered matched.
Even though SoftwareShield has tried hard to implement the fingerprint algorithm as stable as possible, for some reasons the fingerprint mismatch does occur and in this case the SoftwareShield protected application will encounter difficulty to run properly. An error event EVENT_LICENSE_FAIL is broadcasted to all event listeners, the built-in event handler in LMApp (UI_HTML) will pop up a GUI asking for a license code to fix it.
To minimize the possibility of fingerprint mismatch issue: