I checked a 4-5 obfuscator today. The main purpose of the obfuscator should not be to hide your license code, but to protect the software / algorithm from being written by the programmer simply by seeing the code. Because if any software, such as 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 developed several C # programs that can be easily replicated if someone has access to his code inside button click events. So, I tested several obfuscators that implement "code stream obfuscation", which really makes it difficult to understand the execution thread / code algorithm. In fact, when I was performing Codestream Obfuscation on my software, I could not understand my code itself, not to mention what others could understand.
Just imagine that you spent several weeks developing an algorithm that can perform a specific task, such as: you can get airline tickets from all sites and display them in software. If someone can see his code, he / she can simply create the same software in a day. Thus, it is better to mix the algorithm in such a way that it becomes very difficult to understand.
I tried: Dotfuscator, Eziriz.NET Reactor and Crypto Obfuscator and rustemsoft Skater.NET Obfuscator. (And a few others)
Below were my results:
- All encodings of strings / variables / functions by all obfuscators were easily de-obfuscated by de-obfuscator de4dot. Thus, it makes no sense to encrypt strings / variables / functions.
- I used the maximum level of "code obfuscation" for all 3. I could not use rustemsoft Skater.NET because its software was freezing and the user interface was misleading. And in the free / trial version, "Obfuscation code" was not included for evaluation. So Dotfuscator did the best code development. And then .NET Reactor and Crypto Obfuscator were on the same level, but their entanglement was much worse than that of Dotfuscator.
- You can try to virtualize the software using virtualization software, which should prevent direct de-obfuscation with de4dot, but again exe can be easily unpacked with any good unpacker, and then the extracted assembly can be de-obfuscated with de4dot . Virtualization software is used to pack core exe, dll and other resources into one large exe, so you do not need to create an installation file, etc. And run exe directly on any computer. Thus, in this case, you can encrypt the .NET assembly in one encrypted exe file. But, as I said, it can be easily unpacked. There are many videos on this topic on YouTube. This does not "entangle control flow", which was my main goal.
So finally what I did:
Obfuscate the control flow with Dotfuscator, then again the "control flow" obfuscate the confusing exe with .NET Reactor or Crypto Obfuscator. After that, if I de-confuse exe, the code cannot be understood by any intermediate level programmer.
source share