views:

409

answers:

13

Possible Duplicates:
How do you protect your software from illegal distribution?
Best practice to prevent software copy

Hypothetical situation:

Lets say I have built a software product from the scratch and it does wonderful things. The only problem is that, once someone takes a look at the code, they will understand it very easily and they can easily build it up themselves.

Now, the thing is that I built the code from the scratch 100% and uses a mixture of API calls. Nobody else is involved in the development of the code.

If I want to sell this product, what is the guarantee that someone much smarter than me will reverse engineer the whole thing and come up with better product?

Right now I am thinking of fragmenting the whole code. Adding lots of redundant code and tonnes of comments.

Is there any software which encrypts the software code, that will make debugging, troubleshooting, and understanding how the code works virtually impossible? and yet runs as usual? so that the developer can have peace of mind?

A: 

This is futile. There is always someone smarter than you and therefore they will be able to reverse engineer your obfuscation.

KPexEA
+10  A: 

Very few things in a program are truly novel. Almost everything that you are likely to put into your code, someone else could invent on their own. Generally more easily than they could learn it by reading your code. Reading code is harder than writing it, and most programmers don't really like doing it anyway.

So it's much more likely that they will look at your app and think "I could do that", then "That's cool, I'm gonna read that code and then copy it!". Even if they understand it, you will still own the copyright, you still get to market first.

I recommend that you just forget about it.

John Knoeller
Yes that is true. By taking a look at the UI of the software I am developing, one can easily replicate it without going through my source code.
Karthik Kottapalli
+1  A: 

Don't even bother. If your code really "does wonderful things" be assured that it'll get hacked. And be it just for curiosity.

aefxx
+2  A: 

Someone will always be able to understand and work out your code. Heck, if you had 0 way getting to the code, even just using the system is enough for someone to be able to replicate the process.

Example: I take a jug of water and pour it into the cup, while my back is facing to another person. This other person knows that water and gravity are awesome at making things fall into other containers, so they can then work out a process of lifting a jug to let gravity (API call) work in their favour. They mightn't know exact what angle you used in your forearm and any super-sneaky cup-holding techniques you used, but they can replicate the same process and improve on it over time.

tl;dr: You can't protect code.

glasnt
+2  A: 

Once you actually have the knowledge and experience to write such a codebase, it will be clear to you that obfuscation is meant to deter casual IP infringement.

Someone who wants to know your code is going to know your code.

If it becomes an issue of monetary loss, the courts are your protection.

That's how it works.

Sky Sanders
Yep, you would have to devote your whole life to hacking to really be able to combat the voodoo that goes on.
ChaosPandion
+1  A: 

There is no 100% way to protect your code from reverse engineering. What language are we talking about? If this is C/C++ then it is pretty hard to reverse engineer, more you could strip it from debugging information etc. But if this is for example Java then even if you obfuscate the code, there are some pretty cool tools (like JAD) that will reveal much of your work anyway.

Despite all of this I think you should try to change your attitude. Big companies pay a lot of money for simple solutions and it seems that nowadays service is the most important thing, not the software (hence the success of open-software based companies). So, if you have a great software don't be scared that someone might steal it, rather think how to sell it good.

pajton
+2  A: 

The thing to do is invent even more wonderful things while the competition is reverse-engineering your current stuff. It's called competing through innovation.

Arthur Kalliokoski
A: 

Usually someone smart enough to hack your code and use it in a meaningful way is smart enough to do it on their own, and probably thinks they can do it better than you did, so they won't bother stealing your stuff.

Don't worry about the people who can hack your code but not make meaningful use of it. If you've done a good job, this can only reinforce the quality of the job you've done (think of all the crappy touchscreen phone imitators).

Renesis
+1  A: 

I am not a lawyer

if you are really worried about it, to the point you are willing to invest money in it, dont protect your code (beyond something reasonable like obfuscation or encryption) but rather patent your idea and your art. Then if someone does take it, reverse engineer it and make a better process based of yours, you have legal grounds to get your money.

There are tons of things you will have to do, include proving they took your idea (which isnt easy), but if this is the solution to world hunger and all of humanities problems its the thing to do.

Now for the downside, I will guess, and probably be 90% right that your method is:

  1. Not patentable, for various reasons (I was amazed at the number of already patented ideas, and how difficult it was to identify original art)
  2. Not new, or unique (i.e. there is already established art for it)
  3. Not worth patenting because the expense far outways the benefits

An IP lawyer can tell you for sure, and the expense of a consult is not that much. Overall it will be cheaper to consult with them then to invest a lot of time in hiding code.

Good luck.

GrayWizardx
+1  A: 

Is there any software which encrypts the software code, that will make debugging, troubleshooting, and understanding how the code works virtually impossible? and yet runs as usual? so that the developer can have peace of mind?

This is the totally wrong mindset IMO. What happens if you get hit by a bus? Your company goes bankrupt? All your data gets destroyed in a fire? For every single one of your customers, the value of their investment in your software will drop, and eventually reach zero, because the software can't be developed, or troubleshot, any further without you. I have seen so much money wasted that way, I think it's a horrible business model.

I earn my bread with making software myself so I know the hardships of making a living with it. Still, obfuscation can't be the way to go nowadays. Impose strict license agreements on your customers, scare the hell out of them so they don't even think about redistributing the software, but leave it open.

Pekka
A: 

They are going to reverse-engineer your code. Nothing can stop them.. The only thing you can do is make it harder. This ranges from obfuscating code that is inheritely "open" such as PHP and Javascript, all the way down to littering your code with a crap load of self-modification.

Earlz
+1  A: 

once someone takes a look at the code, they will understand it very easily and they can easily build it up themselves.

So don't give anybody the source code.

If I want to sell this product, what is the guarantee that someone much smarter than me will reverse engineer the whole thing and come up with better product?

(a) So start selling it now and capture the market. Reverse engineering takes time, during which you are capturing market and 'mind-share'. (b) Put a provision in your licence agreement that prohibits reverse-engineering. (c) Make sure everybody who gets the product signs the agreement.

Right now I am thinking of fragmenting the whole code. Adding lots of redundant code and tonnes of comments.

That only has a point if you're going to distribute the source code. In which case nobody even needs to reverse-engineer. They have your source code. Don't give it to them.

Is there any software ...

There's lots of software that purports to do this job. However it is a technical solution to a business problem. All software can be reverse-engineered, because at some point or other it all has to be decrypted and de-obfuscated to the point where the CPU will understand it. At that point it is essentially plaintext. So no technical solution is formally speaking possible (short of something like code that executes in a tamper-proof HSM).

I will add that there is another business mechanism you can use to defend against business loss, which is what this is all about: price. Make the price so high that the licensees will value their copy and not permit it to be inspected, or make it so low that reverse-engineering is cost-infeasible; or make it free and make your money on the support contract.

EJP
A: 

In a lot of ways, I think, the thing that makes a piece of software valuable, is not the crazy technological advancement that it provides, but rather the things that we think might think of as being tertiary to the piece of software itself. Like the fact that you'll be there to support it. Or that it's provided as a web service and you'll be there to make sure the server is running. Or that it's a community, and you'll be there to moderate and build the community.

While you may be actually selling code, the value you that your code has isn't intrinsic to the code itself, but rather derives from the features and ecosystem that surrounds your code.

tychoish