0

I'm planning on writing a windows application, used everywhere in my home country. I will code it in C++, but my question is which would you consider better to use?

  • win32api
  • Visual C++
  • MFC

I'm asking this because I don't know if you heard about what will happen to Windows 10 and how it will change after the last updates, that's point #1, second I just want it to become a little bit harder to decompile, I know assembly and I've reverse-engineered a lot of programs over the last 5 years, but I just want something harder for that hacker in his father's basement, I don't want it to get cracked or reverse engineered in a day or two, but I know that at the end someone will do it. Which framework (or should I say compiler with some extra features) would make it a little bit challenging?

I'm fluent in all the languages mentioned above.

I know that this Community is made for reverse engineering and so just focus on this part of my question, thank you for your time.

  • 4
    Could you give some more details about your application? Do you want it to be hard to reverse engineer or just to decompile? How much difference would it make if it worked few times slower after obfuscation / virtualization? Do you want to prevent others from learning how it exactly works or from making modifications to it? – bart1e Oct 17 at 9:46
  • Hi and welcome to RE.SE! Why waste the effort? Put that effort into your tool, offer it at a decent price point and enjoy the bliss. Thing is, no matter which tool you choose (although I am not sure how any of the three bullet points are mutually exclusive to another) there will be someone acquainted with it. And if that someone has the inclination to crack your protection it will be done. You will typically spend disproportionately more time protecting than the other side takes removing the protection. That time is better spent improving your product. – 0xC0000022L Oct 20 at 7:07
1

If it's challenging or not depends entirely on what you do to make it challenging and the skill level of the attacker. For some it's already enough if you make the decompiler in some old leaked IDA version fail, others read the pure assembly and know exactly what's going on not needing the decompiler at all.

The best way to prevent tampering is having license checks at several places that all have to be found in order to get it to work. Sign individual functions, check the signature somewhere else, have that signed aswell. Obfuscate RSA Keys or even better all strings if you decide to use them. Try to avoid a whole bunch of xor instructions at one place (if I see those I know that some crypto is going on there). Also you can include useless/bad assembler instructions that never get executed to confuse the Disassembler, also dead code that seems to be a license check might be a good way to keep someone busy (although a debugger will quickly show them it's never executed. Also there are obfuscators out there you can buy, they generally have even more experience in anti debugging and decompiling techniques.

Choose whatever framework you're confident with, don't let license/intellectual property protection be an excuse for bad coding style because you're still inexperienced, especially if it's software you're planning to sell.

| improve this answer | |
  • This is all good stuff, the project is similar to that of Coursera, but targeting my country. I just want to give people hard time when somebody is trying to decrypt the E-Books – aliberro Oct 18 at 15:33
  • 1
    However much you obfuscate secret keys, the gist is that a secret key that is on the customer's computer is no longer a secret key. So you are undermining your own efforts by doing that. A hardware dongle if properly used, or a remote service if properly used provide a far better protection but will also annoy your customer. Or let me rephrase: you don't trust your paying customers and so you hassle them with a protection scheme, trusting them to not abuse the secret keys you hand to them. Notice something? – 0xC0000022L Oct 20 at 7:11

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