The .Net Components, Tools, and Rewards Microsoft .Net Developers Deserve
Obfuscators work by transforming a .NET assembly into an equivalent .NET assembly that is more difficult to understand when disassembled or decompiled. Some obfuscators use ILDASM to disassmble the assembly and operate on the disassembled MSIL, and then use ILASM to reassemble the result. Others operate directly on the assembly without any ILDASM/ILASM round trip. Obfuscators apply a variety of different techniques to make the disassembled source code more difficult to understand.
As a general rule, you should obfuscate any .NET assembly where you do not want to make the source code available along with the assembly itself. There can be several reasons for making this decision. You might simply want to protect your intellectual property because of the substantial investment it represents. You might want to protect a licensing routine from inspection by hackers. You might want to hide SQL statements or server names. In most cases, it will be simplest to obfuscate your entire .NET application. In other cases, you may decide that the bulk of your application consists of routine code of no particular interest, and that the code you care about is located in only a few assemblies. In those cases, you may choose to obfuscate only the critical assemblies, which can make your build process quicker and easier. ASP.NET applications seldom need obfuscation, because visitors to an ASP.NET-based Web site do not download the actual .NET assemblies, only the HTML output from those assemblies. But if you're selling a commercial ASP.NET application for others to install on their own servers, you might want to obfuscate the application to protect your own programming investment.
Excerpt from How-To-Select an Obfuscation Tool for .NET
- A Premier .NET Obfuscator, .NET Optimizer and .NET Shrinker