Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

hardware-locked licensing: which hardware pieces should i use? [duplicate]

I've recently implemented a hardware-locked licensing system with fuzzy-matching to handle changes in hardware without requiring a re-activation, but i need more hardware pieces to match to be more secure / create more reliable fuzzy-matching.

Right now I'm matching against the following:

  • Physical mac address
  • Hard-drive serial number
  • RAM part number / manufacturer / size
  • Processor ID

What are some other machine-specific non-changing hardware serial numbers that would be good to use in this situation, and can be retrieved easily from C#.

Code examples of retrieving such hardware information would be appreciated as-well.

CLARIFICATION

When I said "Non-changing", I mean hardware serials or information that will not change without modifying the hardware in the machine directly. (IE, will not change on their own, or by software)

like image 319
caesay Avatar asked Oct 07 '22 13:10

caesay


1 Answers

Having worked at a company that does this kind of hardware fingerprinting, I can tell you that the commercial alternatives are generally pretty solid, but they will all fail in some legitimate cases.

Be aware that some patents in this space are very actively enforced. Some large, successful companies (like Microsoft) who came up with hardware locking algorithms have been successfully sued. If you are very successful in what you do, that may unfortunately happen to you.

If you feel that you need hardware locking, select a company that will make it easy for you to provide customer service to those customers who perform a legitimate upgrade to their system that ends up breaking the fuzzy matching rules. And, be prepared to provide that service quickly and efficiently.

For most use cases, I would warn against hardware locking. It places limitations on your software that will tend to hamper your legitimate customer's legitimate desires to use the software.

Update

Here are a few metrics that can be used in addition to the ones you list. I have not looked into which are particularly easy to get from C#, as most of the code I dealt with at this level was portable C++ with some platform-specific assembly as needed.

  • BIOS checksum
  • Number and type of of processors (Processor ID is not available for all processors)
  • Graphic Card details (often-upgraded part, but provides a little bit of added entropy)
  • Number of attached monitors, screen resolution(s), brands (varies often, but again a little added entropy).
  • Installed fonts that are unusual and highly differentiating (e.g. ignore ones you get from Office, etc.)
  • Mac addess of all installed NICs (e.g. WiFi, wired)
  • Serial of all installed HDs
  • Enumerate other devices (e.g. DVD, CD, built-in card readers)

Keep in mind that laptops plug into docking stations and may get a number of additional ports, new monitors, etc...

like image 101
Eric J. Avatar answered Oct 10 '22 02:10

Eric J.