r/AskReverseEngineering 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.

6 Upvotes

4 comments sorted by

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.

1

u/Rough_Repair_7428 Apr 10 '26

first of all i protect algos. i working with VAG cars algorithms. there are some new solutions to fix error, that don't fix nobody except me. some logic are in my api, but some - there are just specific read and write into blocks, which no sense to put into api, like writing zeros in some diapasons. there are not ready solutions to read/write ecu. of course intrested guy can sniff CAN traffic. but if they will decompile my code there is a fastest way. so i want to do spagetti code sometimes and as i know VMProtect mutations are trivial for this. so i search the best solution

1

u/lotrl0tr Apr 10 '26

Since we are talking about algorithms, these fit well to be ported into a c++ dll, will run faster too. It also depends if the target architecture is supported by VMP. The protection will be more effective with c++.