Click here to Skip to main content
Click here to Skip to main content

Implementing simple Copy Protection : Technical overview

By , 7 Jul 2002
Rate this:
Please Sign up or sign in to vote.

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 Smile | :)

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

About the Author

John Aldrich
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? PinmemberWilliam Kent18-Oct-11 6:52 
GeneralSo many misconceptions! PinmemberJohn Browne9-May-11 14:03 
Generalgo for the minimalist Pinmemberaodry1-Feb-11 4:24 
GeneralCD data copy protection from one Cd to anather Pinmembersushilabhanvar23-Jun-09 21:19 
Generalnot great PinsussAnonymous9-Aug-05 12:40 
GeneralRe: not great PinmemberManish K. Agarwal7-Mar-06 20:03 
GeneralHistory of copy-protection PinsussAnonymous18-Jul-04 5:07 
GeneralRe: History of copy-protection PinmemberWilliam Kent18-Oct-11 6:46 
GeneralAnother Problem PinmemberAndyn315-Jul-02 21:11 
GeneralMethod 3 Easily PinsussRogerio Silva15-Jul-02 4:11 
GeneralA nuisance to legitimate users PinmemberDaniel Andersson9-Jul-02 3:27 
GeneralRe: A nuisance to legitimate users PinmemberMario M.9-Jul-02 4:02 
GeneralRe: A nuisance to legitimate users PinsussAnonymous9-Jul-02 8:10 
GeneralIdeas PinmemberS van Leent9-Jul-02 3:05 
GeneralIt only has to be cracked by 1 person Pinmemberwogerdoger2-Sep-03 8:16 
GeneralMethod 3... Pinmembernegacao8-Jul-02 15:48 
GeneralRe: Method 3... PinmemberJohn Aldrich8-Jul-02 15:55 
GeneralRe: Method 3... PinsussAnonymous9-Jul-02 8:50 
GeneralRe: Method 3... PinmemberPhilippe Lhoste15-Jul-02 22:04 
Generalyou are near... PinmemberMario M.8-Jul-02 15:21 
GeneralRe: you are near... Pinmembernegacao8-Jul-02 15:35 
GeneralRe: you are near... PinmemberMr Morden8-Jul-02 17:28 
GeneralRe: you are near... PinmemberPaul Ingles8-Jul-02 22:39 
GeneralRe: you are near... PinmemberMario M.9-Jul-02 3:46 
GeneralRe: you are near... PinmemberMario M.9-Jul-02 3:47 

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

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

| Advertise | Privacy | Mobile
Web04 | 2.8.140415.2 | Last Updated 8 Jul 2002
Article Copyright 2002 by John Aldrich
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid