Click here to Skip to main content
16,012,468 members
Articles / Programming Languages / C++
Article

Implementing simple Copy Protection : Technical overview

Rate me:
Please Sign up or sign in to vote.
3.11/5 (14 votes)
7 Jul 20024 min read 132K   32   31
Part 1 of a 4 part series on developing a simple copy protection method for your applications. In this article, I will discuss concepts on how such protection can be implemented.

Introduction

With the plethora of emergent software technologies, methods for deploying those technologies, and with the prospect of pay per use software on the horizon, there has been a steadily growing trend of sites catering to users who do not wish to pay for such services and as such download them illegally. This has the after effect of diminishing profits made by software companies and home based software programmers. As the trend increases, there is a progressive upscaling of the cost of software to the end user as well as a decrease in the amount of profit that a software company of freelance programmer is able to draw from his or her work. One solution to this is the eventual withdrawal of the software product from the market, which in turn forces layoffs of programmers that were specifically dedicated to that project. Another solution is the implementation of copy protection, which serves to curtail illegal software usage. Below, I will discuss a few possible methods of implementing simple copy protection to help avoid this problem.

Method One - DeadBolt Locking

The above name may seen somewhat strange, but in effect the first method, functions almost exactly as a deadbolt on your front door would. We can use a simple DLL which must be present for the application to execute as it would contain a null function ( basically just a void function that goes nowhere and does nothing ) which the program would need to see from the dll's exports. The main advantage of this, is that when linked in the applications header files, if the dll is not present on the system, the app will fail to execute, which is true in any case where a dll is not available. The main drawback to this is that the dll can be easily passed from a legitimate version of the application to an illegal warez version of the application so that makes it unsuitable for our purposes.

Method Two - Keypad Locking

This method takes the DeadBolt Locking method a step further and requires that the end user enter an authorization code which is parsed by a auth routine inside the dll and a corresponding counter code generated. This has the advantage of getting past the "floating" dll problem in that if the user enters an invalid counter code at set number of times, we can simply not allow them to run the program. It would do no good for them to keep trying the to try to guess the counter codes as the dll would generate a new authcode, countercode pair per each call and the chances of a correct guess would be unrealistic depending on the size of the authcode and it's respective counter code. The draw back to this is the fact that if someone where to sit down and disassemble the application they could possibly see what values were being passed between the dll and the main application and develop a key logger, or determine a way to patch the dll to accept a predetermined counter code each time.

Method Three - Remote Server Authorization

It is my personal opinion that the third and final method is the most secure and reliable method. It incorporates the previously defined methods and in addition some self check methods, which would be specifically designed to prevent tampering with the application files. The application could scan it's own dll's looking for and gathering information on file sizes, and send this information to a remote server for processing...if the file sizes or other information did not match, then the application could take appropriate steps to disallow running on the system it's installed on. This method is the best in my personal opinion because it provides an outside check which is difficult if not impossible to stop. This method and the two previous will be elaborated on in part 2 of this series. Stay Tuned.

P.S.

There are probably far better methods for implementing any kind of worthwhile copy protection, I am merely writing this series as a quick and dirty primer on methods for implementing such things. I make no promise of 100% correctness, and all concepts should be taken as written. If you choose to implement a method I have described in this article, don't blame me if it doesn't work....but if it does...credit me all you want :-)

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
My name is John Aldrich. I have pursued programming as a hobby for the past 6 years and currently have experience in Perl (basic / intermediate), HTML (advanced), and I have recently begun to learn C/C++. I also have a profound interest in all things graphics related and and constantly working to improve my knowledge in all areas of computing. I run a home based web software company named Professional Design Resources. If you are interested in any custom programming or would be interested in collaberating on a joint project, please feel free to contact me via email, where I'll be happy to discuss such things. Serious projects only please.

Comments and Discussions

 
QuestionWhere is part 2 of this article? Pin
William Kent18-Oct-11 6:52
William Kent18-Oct-11 6:52 
GeneralSo many misconceptions! Pin
John Browne9-May-11 14:03
John Browne9-May-11 14:03 
Regrettably most developers don't know squat about copy protection or how pirates crack copy protection and licensing schemes. Some of the these comments illustrate that well. [Disclaimer: I work for a company (www.wibu.us) that does nothing but make systems for licensing and anti-piracy. We've been doing it for over 20 years. We have a full time cryptographer. We have repeatedly exposed our solutions to the world of crackers and offered large prizes for anyone who could break our system (how else can you really test it?). So far no one has. This isn't an ad--it's to establish credibility.]

There are three ways to protect software:

1. Roll your own system (it will be effortless to crack). But it will perhaps defeat the casual would-be pirate from giving copies away to his friends. The tradeoff (in addition to your dev time, testing and debugging) is the risk that your system will create false negatives and tick off legitimate users--this is how copy protection got a bad rap in the old days.

2. Buy a software-only based activation system from an external vendor (like us or SafeNet). These systems will save you dev time, are reliable, work on multiple platforms, and won't irritate your customers when they fail improperly. However, ANY software-based system is potentially crackable. Why? Because they rely on asking an OS for some information, so they are subject to a man-in-the-middle or spoofing attacks. This is why you see Windows, OFfice, Photoshop, etc cracked up on torrent sites--they have patched various parts of the app or dlls to simulate a correct OS response to a licensing query.

3. Buy a hardware-based system from a vendor like us, SafeNet, KeyLok, or other. These "dongles" are used in various ways. The correct way is as a dynamic, secure, key generator for decrypting the protected app and dlls on program load. Secure because you don't want someone to just crack the dongle to do their own keygen. Dynamic because you don't want a single key that can decrypt multiple copies of your app, thus the need for multiple keys. For example, CodeMeter uses 2^32 keys for every protection, so no brute force or master crack is feasible.

If you sell cheap software the additional cost of a dongle probably doesn't make sense (although we have a customer with a game who uses our dongles--they've never been cracked). If you sell software to businesses that costs $1000s it makes sense to avoid piracy with a small additional cost. The dongles themselves need to be ideally driverless (so no user install problems), based on a smart-card chip, include debugger detection, and use strong encryption (like AES 128-bit, ECC, or similar). These systems ARE reliable and secure, regardless of the popular (and incorrect) belief that any copy protection system can be cracked.

Just wanted to set the record straight.
Generalgo for the minimalist Pin
aodry1-Feb-11 4:24
aodry1-Feb-11 4:24 
GeneralCD data copy protection from one Cd to anather Pin
sushilabhanvar23-Jun-09 21:19
sushilabhanvar23-Jun-09 21:19 
Generalnot great Pin
Anonymous9-Aug-05 12:40
Anonymous9-Aug-05 12:40 
GeneralRe: not great Pin
Manish K. Agarwal7-Mar-06 20:03
Manish K. Agarwal7-Mar-06 20:03 
GeneralHistory of copy-protection Pin
Anonymous18-Jul-04 5:07
Anonymous18-Jul-04 5:07 
GeneralRe: History of copy-protection Pin
William Kent18-Oct-11 6:46
William Kent18-Oct-11 6:46 
GeneralAnother Problem Pin
Andy N15-Jul-02 21:11
Andy N15-Jul-02 21:11 
GeneralMethod 3 Easily Pin
Rogerio Silva15-Jul-02 4:11
Rogerio Silva15-Jul-02 4:11 
GeneralA nuisance to legitimate users Pin
Daniel Andersson9-Jul-02 3:27
Daniel Andersson9-Jul-02 3:27 
GeneralRe: A nuisance to legitimate users Pin
Mario M.9-Jul-02 4:02
Mario M.9-Jul-02 4:02 
GeneralRe: A nuisance to legitimate users Pin
Anonymous9-Jul-02 8:10
Anonymous9-Jul-02 8:10 
GeneralIdeas Pin
S van Leent9-Jul-02 3:05
S van Leent9-Jul-02 3:05 
GeneralIt only has to be cracked by 1 person Pin
wogerdoger2-Sep-03 8:16
wogerdoger2-Sep-03 8:16 
GeneralMethod 3... Pin
krism8-Jul-02 15:48
krism8-Jul-02 15:48 
GeneralRe: Method 3... Pin
John Aldrich8-Jul-02 15:55
John Aldrich8-Jul-02 15:55 
GeneralRe: Method 3... Pin
Anonymous9-Jul-02 8:50
Anonymous9-Jul-02 8:50 
GeneralRe: Method 3... Pin
Philippe Lhoste15-Jul-02 22:04
Philippe Lhoste15-Jul-02 22:04 
Generalyou are near... Pin
Mario M.8-Jul-02 15:21
Mario M.8-Jul-02 15:21 
GeneralRe: you are near... Pin
krism8-Jul-02 15:35
krism8-Jul-02 15:35 
GeneralRe: you are near... Pin
Mr Morden8-Jul-02 17:28
Mr Morden8-Jul-02 17:28 
GeneralRe: you are near... Pin
Paul Ingles8-Jul-02 22:39
Paul Ingles8-Jul-02 22:39 
GeneralRe: you are near... Pin
Mario M.9-Jul-02 3:46
Mario M.9-Jul-02 3:46 
GeneralRe: you are near... Pin
Mario M.9-Jul-02 3:47
Mario M.9-Jul-02 3:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.