|
|
|||||||||
![]() |
|||||||||
|
![]() |
||||||||
|
My Product Registration Solution Monday, March 10, 2008 As I mentioned in my previous post, I’ve decided to roll my own product registration routines. I’m comfortable with this decision because my ultimate goal is to give Mac users that pay for software a reason to send me money. It’s not to prevent software pirates from using my product. I don’t think that’s a realistic goal.
Don’t worry much about piracy. If you spend more than a couple days a year worrying about it, you’re fooling yourself. - Wil Shipley
Whatever I do is going to be crackable. I know I’m not a good enough Cocoa programmer to make something unbreakable. I’m not even good enough to make it terribly difficult for them. It might take somebody ten minutes, or it might take them a day. That really doesn’t really matter to me. My goal is not to make myself feel better by trying to waste some hacker’s time. The end result would be the same anyway. If somebody wants to use my software without paying for it, they’ll find a way. I just want to put up a small fence with a “Keep Out” sign to keep the honest people honest.
There is no perfect way of protecting your application, and no matter what you do, those that want to crack your application will... - Ankur Kothari
On the other hand, I do have a realistic, achievable goal (although it’s not specific to product registration). That is to write code that’s easy to maintain and reuse.
Based on this goal, I’ve decided to write my registration code in Objective-C. I realize that I can make my code more obscure by writing it in C, or calling it as a macro. I can also make things more difficult for a hacker by using misleading method names. But these things make it more difficult for me to maintain.
On the other hand, some things seem to make sense. For example, I do base the registration code on the customer’s name. And the date of the first launch goes into a hidden file, so deleting the preferences doesn’t reset the trial period. I might even take some time to strip the symbols from the final executable.
I suppose I could also make it more difficult to hack by not describing in detail what I’m doing in my blog. Oh, well.
In my next entry I’ll describe the algorithm I’ve created for generating registration numbers. After that, I’ll create an example project that shows the registration routines in action.
Perhaps, if my new product is popular enough to be widely cracked, I’ll change my mind about how little effort I’m putting into protecting the product registration routines. I’m hoping my software will become popular enough for it to be an issue.
If your software doesn’t get cracked, then that’s probably something to worry about. It means you either spent way too much time making it uncrackable—or it wasn’t interesting enough to crack. - Brent Simmons | |||||||||