Hello,
We are developing a kmdf, non-PnP, kernel service that will be used by several of our commercial applications. This driver will require thousands of hours to develop, so, naturally, we are interested in protecting our work… Like a lock on the door of a house, we want to implement some simple barriers. Of course, someone really intent on opening the “door” and reverse engineering our product, would be able to do it. We would like to implement some simple protection schemes that, hopefully, would make most people want to buy our product rather than spend the time to reverse engineer it and using it in their products.
I have scoured the Internet searching for discussions on how others are implementing intellectual property protection in kernel mode services, but did not find anything. I hope that this posting will start this kind of discussion. I understand that some people will find this topic offensive or consider it foolish, but when we are investing thousands of dollars in creating a high quality product, it does not seem unreasonable to want to protect it.
Here are some ideas as to how to implement some simple protection. Of course, protection must be balanced by its impact on performance.
-
LEGAL.
The first line of defense is to ensure that you are inserting copyright messages into your product’s source code and binaries, and to prosecute offenses. -
ENCRYPTION/DECRYTPION.
For kernel mode services that use IOCTL, rather than simply sending in a binary buffer containing input data and returing a binary result, I wonder whether encrypting/decrypting the input and output would be a good idea. I’ve found information on the kernel mode, FIPS Crypto Driver, and wonder whether it could be used. I have not found much information on using it within a device driver.
Another option would be to encrypt output files that may be used by user mode appliations.
- RANDOM CHECKS.
Throughout the code, insert random validations like CRC checks against the original device driver file that was installed. Yes, someone could spend the time looking for these validations and removing them, but would it be worth all their effort to do it?
Anyway, I hope that we can start a discussion of this topic because I believe it would be helpful for others as well as for our team.
Thanks,
Mike