I checked 4-5 obfuscator today. The main purpose of an obfuscator should not be hide your license code, but instead to protect your software / algorithm from being written easily by a programmer just by seeing the code. Because if any software like Windows, SQL Server, Adobe etc. can be easily hacked then there is no chance that you can hide your license code. In my case, I have developed a few software in C# that can be easily replicated if someone has access to its code inside the button click events. So, I tested a few obfuscators that implement "Code Flow Obfuscation" that makes it really hard to understand the execution flow / algorithm of the code. In fact when I did "Code Flow Obfuscation" on my software, I was not able to understand my code itself, let alone what others could understand.
Just image you spent a few weeks in developing an algorithm that can do a certain task like: you can fetch airline tickets from all websites and show in the software. If someone can see the code of it, he/she can simply create the same software in a day. So, its better to jumble the algorithm in suc a way that it becomes very hard for anyone to understand.
I tried: Dotfuscator, Eziriz .NET Reactor and Crypto Obfuscator and rustemsoft Skater .NET Obfuscator. (And a few others)
The following were my results:
- All string / variable / function encryptions by all obfuscators were easily de-obfuscated by de4dot de-obfuscator. So, there is no point in encrypting strings / variables / functions.
- I used maximum level of "Code Flow Obfuscation" for all 3. I could not use rustemsoft Skater .NET because its software was hanging a lot and the user interface was confusing for me. And the free / evaluation version did not have "Code Flow Obfuscation" enabled to evaluate. So, Dotfuscator did the best srabling of code. And then .NET Reactor and Crypto Obfuscator were of same level but their obfuscation was much inferior to Dotfuscator.
- You can try to virtualize the software using a Virtualization software that should prevent direct de-obfuscating using de4dot, but again the exe can be easily unpacked using any good unpacker and then the extracted Assembly can be de-obfuscated using de4dot. A virtualization software is used to pack the main exe, dll and other resources in one big exe so that you do not have to create a setup file etc. and run the exe directly on any computer. So, in this case, you can ecrypt the .NET assembly in a single encrypted exe. But, like I said it can be easily unpacked. There are many videos on YouTube on this topic. It does not do "control flow obfuscation" which was my main purpose.
So, finally what I did was:
Obfuscate control flow using Dotfuscator, then again "control flow" obfuscate the obfuscated exe using .NET Reactor or Crypto Obfuscator. After this if I de-obfuscate the exe, the code can not be understood by any intermediate level programmer.