SmartAssembly is an obfuscator that helps protect your application against reverse-engineering or modification, by making it difficult for a third-party to access your source code. If your entire business rests on the IP embodied in your software or you don't want your C# or VB.NET code exposed internationally, then obfuscating your code becomes a necessity, not a luxury.
With SmartAssembly, you get a comprehensive set of obfuscation features, including name mangling, control flow obfuscation, strings encoding, reference dynamic proxy, and declarative obfuscation.
Key features
Name mangling
Changes the names of methods and fields to make it hard to understand their purpose.
Control flow obfuscation
Converts the code inside methods to 'spaghetti code' to make it difficult to see how the application works.
References dynamic proxy
Creates a proxy for calls to methods outside of your assembly to make it hard to find external calls.
Strings encoding
Encodes the strings used in your software to hide such information as passwords and SQL queries.
Resources compression and encryption
Compresses and encrypts managed resources to make them hard to understand, and to reduce the size of the assembly.
Pruning
Removes non-useful metadata to make the code harder to reverse-engineer, reduce the size of the assembly, and improve loading time.
Dependencies merging
Takes all the DLLs and merges dependencies into the main assembly, so you don't have to load lots of DLL files, and so that they can also be obfuscated.
Dependencies compression and embedding
Compresses and embeds your dependencies into your main assembly, simplifying the deployment of your software and reducing the size of your program.
Method parent obfuscation
Moves methods in your code by changing the class they are in, making it harder to understand how methods and classes relate to each other.
Strong name signing with tamper protection
Signs your assembly and helps to protect it against modification (the additional tamper protection is not available in the Standard edition).
Declarative obfuscation
Excludes a member from obfuscation using custom attributes directly in your code.
Whats New: Major features
.NET Core and .NET Standard support.
You can now use either SQLite or SQL Server database for feature and error reporting.
To learn how to migrate, see Migrating between SQLite and SQL Server (SA-2113, SA-2091). Features
If the map file was unavailable at the time of downloading an error report, the report can be reloaded manually with a new “Reload” button in the report dialog. MSIL Disassembler Protection can now be used for .NET Core and .NET Standard assemblies.
Tamper Protection can now be used for .NET Core and .NET Standard 2.0+ assemblies.
New command-line argument /additionalProbingPath was added, making it possible to pass additional directories where SmartAssembly should look for dependencies.
SmartAssembly.Attributes_NetStandard.dll was added, making it possible to easily use SmartAssembly attributes in .NET Core and .NET Standard assemblies.
SmartAssembly MSBuild tasks were updated, making it possible to use SmartAssembly processing for .NET Core and .NET Standard projects.
In sections “Dependencies Merging” and “Dependencies Embedding” SmartAssembly now shows collapsible list of dependencies that cannot be merged and embedded, as well as separate collapsible list of additional assemblies (such as NuGet packages) that can be merged. Fixes
SA-2119, SA-2112, SA-2115: Assemblies referencing mscorlib 2.0.3600.0 and mscorlib 2.0.5.0 can now be processed with SA. SA-1323: Fixed the build error when the assembly contained calls to base type methods defined in another assemblies.
SA-2118: Fixed an error related to assemblyBytes being null during assembly analysis.
SA-1184: Fixed an error caused by merging .NET 4.5 Portable Class Libraries.
Warnings about missing framework were improved and no longer prevent from building.
It’s now possible to process assemblies using C# 7’s “ref return” feature.
It’s now possible to download Error Reports when using SmartAssembly Personal.
Outdated documentation links were updated in the UI. Improvements
The way SmartAssembly searches for dependencies was improved. SmartAssembly attributes (available as SmartAssembly.Attributes.dll) now have summaries, describing what each attribute can be used for.
Clicking “Open Assembly Folder” after building will now highlight the resulting assembly in the explorer window.
Selecting dependencies on “Dependencies Merging” and “Dependencies Embedding” is now significantly faster.
SA-1989: Assembly recognition was improved, which allows NuGet packages with Microsoft’s Public Key to be merged or embedded (such as System.Collections.Immutable). Known issues
Building .NET Core apps may not be possible on 64-bit systems with only 32-bit .NET Core SDK installed, or no SDK installed at all. .NET Core 1.0 and .NET Core 1.1 is not fully supported.
F# applications are not fully supported.
Generating Portable PDB is not possible.
It’s not possible to merge assemblies netstandard depends on.