I'm developing a WPF solution in visual studio, inside the foresaid solution there are two projects, one (client) is the main WPF application and the other one (dllproject) is a simple project that produces, upon build, a dll that's used inside my main client.
I'm adding my dllproject as a reference in my client, and referencing it via using statement.
using dllproject;
using System.Windows;
now the question is, I need to protect the software from reverse engineering because the dll contains confidential algorithms and so on... What would be the best approach?
Obviously, I can't just encrypt my dll and hoping is still usable. Actually, I'm protecting the software using themida.
There is no bulletproof way to protect any code that is distributed from being decompiled.
You should always assume that any code you expose publicly can be decompiled and reverse engineered regardless of any obfuscation attempts you have made.
Confidential algorithms and other business critical stuff should stay behind your corporate firewalls or in a trusted cloud service, i.e. you should move any such secrets from the client side to the server side and don't distribute it along with your application.