3

I tried UPX, ASPack and other protectors, but it seems that my application has a weak protection.

What is the best method for protecting your program? Using packers or something else?

At least for a beginner; because I guess there is no perfect protection in the planet an expert can't reverse.

8

No there is not. You can make it harder to reverse engineer, but there's nothing you can realistically do to make it impossible, if there's enough incentive to reverse engineer your application. Professional malware researchers routinely reverse engineer much tougher stuff then anything you'll find publicly.

Theoretically, it may be possible using fully homomorphic encryption, but the practical difficulties make it impossible and undesirable in practice, even if it's theoretically possible.

As for the best method of protection, I'd say just remove the incentive to reverse engineer it in the first place. I'd be more specific but it's not clear what kind of attacker you're trying to protect against.

  • You are absolutely right. I just notice that the homomorphic encryption should not be classified as an obfuscation technique because the semantics of the obfuscated function (in the sense of homomorphic encryption) is not the same as the original function. – Ta Thanh Dinh Nov 21 '13 at 11:04
1

The answer is a clear NO. Whatever protection you do could still be improved if so desired.

The question is a little bit unclear, as there are many different protections possible. - protect against reverse engineering - protect against executing on the wrong computer - protect against copying - protect against modifications. - ... whatever method is best for one purpose may not be best for some other purpose. When you know what you are against, you are really in a better situation to make a good protection.

You could also say there is no perfect protection, as any protection can be broken. But maybe that doesn't matter: maybe the time to brake a particular protection with todays computer-speeds is similar to the age of the universe? Maybe the protection is just good enough to protect your executable until the protection is no more needed. Maybe it is just good enough so that an attacker gives up just before suceeding? Maybe it makes it just hard enough so that an attacker chooses to work on an another program. Maybe it is broken within minutes after a release...

In practice: Unless you are a seasoned protection engeneer or very good hacker and reverse engineer, your protection will be broken in surprisingly short time. On the other side, if you understand what you are doing: Know what compilers generate, know what is hard to reverse engineer, know the program to be protected, know the machine architecture, build the protection in from the beginning, or use some professional protection tools, understand the applications performance requirements, you can keep more or less everybody out. There is some debate about that. Before a protection finally is cracked, protectors err by thinking is too hard; reverse engineers err by thinking it is too easy. Actually when you create high-end protections you might never know, as attackers for high-end stuff won't tell you if/when they succeeded.

There are plenty of tools to help making protections, the price range for such tools goes from free to astronomical. I don't know whether this discussion list allows me to name companies. If you want to find out mine, or any other, google for tamper-proofing.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.