I have a desktop(winforms) application, and I'm looking for .net linker that links the assembly to assembler level(lower than IL) in order to prevent reverse engineering. another solution might be acceptable as well. does anyone know of such a linker?
What you're looking for is an obfuscator. It jumbles up the compiled code so that it still does what it is supposed to do, but if you decompile it, it is incomprehensible to most.
Note that any attempt to make it 100% safe is guaranteed to fail, all you can strive for is making it as hard as possible.
There's many solutions that will do this in various ways:
Note, the last one isn't an obfuscator, it virtualizes out your application. Some of the benefits of that is that it is a bit harder to get to the underlying code, but it is primarily a product that solves different problems, namely the need to separate out the application from the rest of the applications installed (ie. no need for .NET to be installed, no conflicting registry settings, etc.)
.Net Reactor is what you are looking for I guess (it is hackable - but way harder than classic obfuscation).
You may want to have a look at the The Mono AOT (Ahead of Time) Compiler :
There are some limitations though: you obviously can't compile an assembly that uses CLR dynamic features, reflection, etc.
Obfuscation is may be good for your needs. But it still hackable. I don't know any programs and utilities that you asking for but I have an advice for you. If you need to protect not all application code but only critical sections, you can implement this sections in C++/C and use Platform Invoke to interop with unmanaged code. Jeffrey Richter recommended this approach.