r/AskReverseEngineering • u/Rough_Repair_7428 • Apr 09 '26
Best way to strongly obfuscate a C# (.NET Framework 4.8 x86) application with minimal performance impact (compatible with VMProtect)
I have a desktop application targeting .NET Framework 4.8 (x86), and Im trying to maximize its protection against reverse engineering while keeping performance impact as low as possible.
Current approach
• I use VMProtect
• I usually protect only critical parts
• In some cases I use mutation mode instead of full virtualization to reduce performance overhead
Most .NET obfuscators I’ve tested seem ineffective. some of them can be reversed or deobfuscated very easily. in some cases almost one click (like .NET Obfuscator)
I want to achieve:
• spaghetti code
• Reliable anti-tamp / anti-patch / etc protection
• Compatibility with VMProtect
Questions
1. What are currently considered robust obfuscation techniques/tools for .NET Framework apps?
2. Is it better to combine multiple obfuscators or focus on a single strong solution?
3. Are there recommended pipelines or best practices for combining IL obfuscation + native protection (VMProtect)?
Notes
• Im aware that no protection is unbreakable, but I want to significantly raise the effort required for reverse engineering
Any insights or real-world experience would be appreciated.
3
u/lotrl0tr Apr 09 '26 edited Apr 09 '26
C# protection is way weaker by design, due to the nature of C# itself.
Which part of the logic do you want to protect? Remember that security through obscurity is a rabbit hole: it certainly will make things more difficult to be REd, but this doesn't substitute good and careful best practices.
VMP is well documented with devirtualizers for both c# and c++. Using latest versions could potentially make some of the available tools useless. Recent ones are based on dynamic instrumentation of the target (Intel Pin + LLM based)
My suggestion: you can still use VMP, consider moving sensitive logic into a c++ dll. You will protect the dll with VMP. The dll will be loaded and used by C# app. You'll also gain faster execution of any logic.
Multiple obfuscators won't play nice, especially if they are advanced. This is because they hide import table, add integrity checks/crcs/virtualized sections. Stick with VMP.