views:

639

answers:

9

What is the best way to avoid that an application is copied and used without the owner’s knowing?

Is there any way to trace the usage? Meaning periodically the application communicates back, with enough information so that we can know where it is, and if it’s legal. Next thing, of course, shut it down, if it’s not legit.

+1  A: 

There is a possibility to trace the usage. You can accomplish this by letting phone your tool home and send the information you need. The problem with this is, that first nobody likes software that phones home for this purpose and second with a simple application-level gateway you can block the application to phone home! What you describe in your question is a common problem of software-distributors and it's not an easy one to solve!

Giu
+24  A: 

Software that "phones home" will be quickly shunned by the vast majority of your users. Just license it appropriately and sell it.

People who use your software professionally will either pay for it or they won't use it. Corporations tend to frown on potential lawsuits.

People who want to use your software without paying for it will continue to do so despite your best efforts to counteract them. Once the software is in their hands, it is out of yours. Without pissing off your users, your only recourse is a legal one.

If your product is priced reasonably, some people will pay for it and some won't. That is just something you need to deal with upfront and it should be factored into your business plan.

Kevin
+16  A: 

Don't do this, don't attempt it, don't even think about it.

This is a battle you can't win. If people want to pirate your software they will. You'll be shamed by the fact that a smart reverse engineer can write a one byte binary patch to subvert all your protection schemes.

The people who are going to pirate your software will do so and all these "security features" you build in will likely end up only inconveniencing your true supporters: the people who have legitimately purchased your software. These draconian DRM / anti-piracy schemes only build resentment among software users.

Simucal
Obfusticate your code. Check licensing throughout, not just at the start off the app. Give the reverse engineer a challenge.
Gerard
that way it will take him a week instead of a day - and he may send you an email thanking you for the entertainment
Steven A. Lowe
Exactly. Obfuscating barely slow down a real RE, if at all. Packing the application might add a day to the process.
Simucal
People, that obfuscate their code always give me an impression, that they are just afraid to show bad code to the world. Obfuscation might be somewhat efficient if you want to hide the design/logic, but trying to obfuscate your license check routines is another story IMO.
shylent
+1  A: 

You might want to check out the answers to this question.

Blorgbeard
+2  A: 

The best (and pretty much only) way to reliably prevent piracy is to have a client/server application instead of a standalone one, where a non-trivial part of the work is done by the server and users need to register. Then you can at least detect and block simultaneous use of the same account.

Michael Borgwardt
This is the approach I use with my larger applications. That way I can determine what client can use the service.
yozey
Of course then you can't sell to computers that don't use the internet, and you need to have servers that are capable of doing non-trivial work for your entire userbase.
tloach
A: 

We adopt a license bound to a component approach. With the component being either an IP/MAC address or machine ID. So the app will only operate if the key and component are valid. Yes, the app can be copied, but it simply wont work without a new key as the component will have changed. We generally use our own generated machine ID and our own keygen, which inlcudes an optional expiry for demo periods.

Users are forced to 'phone home' in order to license their software with us. Given the nature and value associated with our products, this approach works well for all concerned.

Gerard
Have you ever tried to install your app in a VM, then license the app, then clone the VM? It seems like an easy way to defeat your scheme.
mghie
Good point! We use a hash of MAC Address, CPU ID and HDD Serial # to form the Machine ID. I know that the MAC can be set to a static value in a VM although we do not believe that our entire Machine ID is clonable in a VM. Something to test though. Thanks for the tip.
Gerard
So everything stops working when the user installs a new network card or hard drive. Great.
Jay Conrod
Well so far it has worked well and we've used that approach for many years. SO there is proof in the history that it is effective. Our software operates in live-to-air broadcast environments where we always sell back-up licenses for redundant hardware. So Jay's comment is not valid in our case. This is real-time software controlling real-time hardware so VM is not an option for users. Any deviation from the hardware/software spec violates all warranties. This model works for our company. Maybe it wont for yours.
Gerard
+15  A: 

Hardware dongles are the best way if you are really concerned about piracy IMO. Check out the big industrial CAD/CAM packages worth thousands or tens-of-thousands, or the AV/Music production software, they virtually all have dongle protection. Dongles can be emulated or reversed but not without a significant investment in time, a lot more than just changing a few JEs to JNEs in your assembly.

Phoning home is not the way to go unless you are providing a service that requires a subscription and constant updates (like antivirus products, for example) as part of your business model. You need to have a bit of respect for your users and their privacy. You might have perfectly innocent intentions but what if a court ordered your company to hand over that information (like the US government is doing with Google and its search terms) - would/could you fight it? What if you some time in the future sold your company and the new owners decided to sell all that historic information to a marketing company? Privacy is not just about trusting a company not to abuse your data, it is trusting that company to go out of their way to protect your data. Which is pretty far down the list of priorities for most companies. So basically, the monitoring users thing is not really a good path to go down.

Dale Halliwell
A: 

There's another thing I haven't seen mentioned yet : You could add loads of settings to the applications' configuration file, and start with ridiculous defaults. Then do the installation & configuration personally, so no-one but you is able to figure out how everything should be set. This can be a mayor put-down for people that are just trying out if a copy is enough. (Be sure to add settings that depend on all sorts of system-settings, like OS-version related DLL-versions that should be loaded, etc). Not very user-friendly tho ;-)

PatrickvL
Do you mean the SAP model? :-)
Andreas Hausladen
+1  A: 

There are several approaches you could take, but there are three that will be vastly more effective that any of the others.

A. Don't create it.

Software that doesn't exist never suffers from unauthorized use.

B. Don't release it.

If you have the only copy, and you keep it that way, then the chances are exceedingly good that there will be no unauthorized use.

C. Give everyone permission to use it.

If you don't want anyone to use it without permission, then you can give everyone permission and there will be no unauthorized users.

jbourque