SmartAssembly
Latest version: 6.7
Notes & articles
Release notes - version 6.xx
Version 6.7 – May 24th, 2012
This version adds improved support for WPF. You can now merge dependencies containing WPF and, in some cases, the WPF code will be obfuscated where it would not have been obfuscated in previous versions.
SmartAssembly 6.7 also contains the following bug-fixes:
- Attributes on events were discarded after merging (SA-1450)
- Delegate types were not pruned (SA-1262)
- The ExcludePublicMembers option for Name Mangling did not work with merged assemblies (SA-1389)
- Stack trace decoding could fail with similarly-named types (SA-1458)
Note: If you previously used ExcludePublicMembers attribute, it has been replaced by the new KeepPublicMembersAccessible attribute. For more information, see Excluding public members from name mangling.
SmartAssembly 6.7 is a recommended update for all users of SmartAssembly 6.6.
Version 6.6 – January 12th, 2012
This version adds a new form of obfuscation, called Method Parent Obfuscation (SmartAssembly 6.6 Professional and Developer only).
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. Please note that Method Parent Obfuscation may not work with all types of assemblies, so if you have trouble processing an assembly with Method Parent Obfuscation enabled, you should try again without Method Parent Obfuscation.
We have added a new Control Flow Obfuscation mode called 'Unverifiable'. This offers enhanced control flow obfuscation for desktop applications that will have full trust.
SmartAssembly 6.6 also contains numerous bug-fixes, including:
- High memory usage caused OutOfMemory Exceptions with large assemblies (SA-1276)
- When pruning was enabled, MethodImpls of overridden pruned methods were not pruned (SA-846)
- With all SmartAssembly features disabled, custom attributes were not included after processing (SA-1291)
- SmartAssembly crashed when an invalid exclusion was specified (SA-1236)
SmartAssembly 6.6 supports Silverlight 5.
SmartAssembly 6.6 is a recommended update for all users of SmartAssembly 6.5.
Please note: In SmartAssembly 6.6.0, using Method Parent Obfuscation may make stack traces provided by Automated Error Reporting incorrect. This bug should be fixed in the next release but, in the meantime, if you are affected, see SmartAssembly stack trace is invalid when Method Parent Obfuscation is enabled.
SmartAssembly 6.6.1 (February 1st, 2012) fixes the following bugs:
- enabling Method Parent Obfuscation could cause the error reporting stack trace to have the wrong type names
- SmartAssembly crashed with a serializable type in a Silverlight assembly
- attributes were pruned, even when the DoNotPruneType attribute is present
- SmartAssembly worked incorrectly when a referenced assembly was signed with a full public key, rather than the token
In addition, Feature usage reporting will now report Amazon EC2 and Windows Azure in the Platform data.
SmartAssembly 6.6.2 (February 17th, 2012) fixes the following bugs:
- Custom error reporting and custom feature usage reporting dialogs based on the samples in the SDK failed to work when directly referenced.
- Parameters on obfuscated methods were not obfuscated.
- With advanced obfuscation enabled, an assembly with a class implementing two different implementations of the same generic interface would crash.
SmartAssembly 6.6.3 (March 6th, 2012) fixes the following bugs:
- Improved memory usage when building very large assemblies with error reporting
- Improved memory usage when building very large assemblies with PDB files
- An issue in the automatic Check for Updates client
SmartAssembly 6.6.4 (April 12th, 2012) fixes the following bugs:
- In previous versions of SmartAssembly, you could leave dependencies unmerged, which needed to be merged.
For more information, see The assembly is being merged, but the dependent assembly isn't - FlagsAttribute was pruned
- Syncfusion assemblies could not be merged
- Assemblies where <Module> is not empty could not be merged
- Microsoft.Ink could not be merged
- OutOfMemory exceptions with 64bit-only assemblies
We have also improved support for Windows Phone 7.1 and Windows Phone 7.5, SQL CLR assemblies and assemblies using PostSharp.
Version 6.5 – November 10th, 2011
This version contains a substantially rewritten engine, which will be faster for some users (and with little speed change for most users).
For more information about the rearchitecture, see The SmartAssembly Rearchitecture, a blog post by one of the developers.
Other changes are:
- Tested with Windows Phone 7.1 RTM
- Tested with Silverlight 5 RC
- New 'Improve performance' option when using Automated Error Reporting
- Improved command line options
- Logging to help diagnose errors (see Log file for SmartAssembly)
- Map files are no longer deleted automatically if the assembly was not marked as released
- Fixed a bug where some code was not pruned when it could be.
If you are an existing SmartAssembly user, you may need to add new exclusions to your code if the new, more aggressive, pruning causes problems. - Fixed a bug where some F# public interfaces were not name obfuscated when they could be.
If you are an existing SmartAssembly user, and you write F# code, you may need to add new exclusions to public interfaces if the new name obfuscation causes problems. - Minor bug fixes
- Requires .NET 3.5 to run
- No longer supports main assemblies targeting .NET 1.1 (but dependencies can target .NET 1.x)
We have also removed the 'Add incorrect metadata' option because it no longer offers a reasonable amount of protection.
SmartAssembly 6.5 is a recommended update for all users of SmartAssembly 6.1 and 6.2, except for customers using SmartAssembly with .NET 1.1 main assemblies.
SmartAssembly 6.5.1 (November 15th, 2011) resolves an issue with licensing in SmartAssembly 6.5.0.
SmartAssembly 6.5.2 (November 30th, 2011) resolves a small number of bugs in SmartAssembly 6.5.0 and 6.5.1, which affected a few users. The main bugs relate to problems using generic type arguments and an InvalidCastException when using long ldarga, starg or ldloca arguments.
Version 6.2 – August 25th, 2011
This version adds a set of sample error reports for new users of SmartAssembly. The sample reports are shown when you click View error reports. Please note that existing users do not receive the sample error reports.
There are also a small number of minor bug fixes related to WPF support, the References Dynamic Proxy and handling timezones in feature usage reports.
SmartAssembly 6.2 is not supplied via the Check for Updates mechanism to customers who already have SmartAssembly 6.1. There is no need to upgrade SmartAssembly 6.1 to this version.
Version 6.1 – May 10th, 2011
This minor version release includes a small number of bug fixes:
- If your assembly has a file alignment other than 512 bytes, SmartAssembly will now use the same file alignment when it builds your application.
- If a custom feature usage reporting template is selected, but the template does not exist, the build will now fail.
- If a custom feature usage reporting template using .NET 4 is selected, but the application is compiled with .NET 2, the build will now fail.
- Fixed the SerializationException encountered when using error reporting with code that uses remoting.
- Fixed ‘Interface not found’ errors when using tamper protection on assemblies which have an interface. (Interfaces no longer have tamper protection applied.)
SmartAssembly version 6.1 also removes the redundant SSL web service connection option in the web service settings.
Please note that this is only a change in the user interface, not a change in the available features. Since SmartAssembly version 5.0, all connections with the default web service have been over HTTP (though the error reports themselves are encrypted).
To use HTTPS for error and feature usage reports, you must use a custom web service.
SmartAssembly 6.1 is a recommended update for all users of SmartAssembly 6.0.
Version 6.0 – February 23, 2011
SmartAssembly protects your application by providing several forms of obfuscation and improves it by adding error reporting and feature usage reporting capabilities.New features in this version
- Feature usage reporting
Helps to prioritize future development work by providing statistical information about how often each feature in your application is used. - Jump to source code from error report
Helps to streamline bug-fixing by opening Visual Studio at the line which threw the exception. - Error reporting in Windows Phone 7
- Improved control flow obfuscation
- Tamper protection for strong name signing (SmartAssembly 6.0 Professional and Developer editions only)
- Support for Xbox XNA version 4
- Bug fixes
Supported OS versions
You must run one of the following operating systems to run SmartAssembly 6.0:
- Windows XP
- Windows Server 2003
- Windows Vista
- Windows Server 2008
- Windows 7
Both 32 and 64-bit operating systems are supported.
System requirements
- 512MB RAM (minimum)
- 10 MB free hard disk space
Prerequisites
- The .NET 2.0 runtime must be installed in order for SmartAssembly to run.
- Jump to source code from error report requires Visual Studio 2005, 2008 or 2010.
Supported applications
SmartAssembly can be used on applications based on any of the following managed-code technologies:
- .NET 1.1, 2.0, 3.0, 3.5, 4.0
- .NET Compact Framework 2, 3.5
- Silverlight 2, 3, 4
- Windows Phone 7
- XNA (Windows Phone 7 XNA, Xbox XNA, PC applications)
The application can be of any type, including Command Line, WinForms, WPF, ASP.NET or a Windows Service.
The application you build with SmartAssembly uses the same version of the .NET Framework as the original assembly.
SmartAssembly works on managed code only. If your application uses a mixture of managed and unmanaged code, the unmanaged code must not be in the main assembly. Any dependencies containing unmanaged code must be excluded in the SmartAssembly project.
Supported build systems
SmartAssembly can be used with MSBuild and TFS.
Supported SQL Server versions
To use a SQL database, you must use one of the following versions of SQL Server:
- SQL Server 2005
- SQL Server 2008
- SQL Server 2008 R2
Known limitations
- Some features protect your assembly from further modification. You cannot use these features if you need to modify your assembly after building it with SmartAssembly.
- Some features are not available when SmartAssembly processes applications based on certain technologies. This is due to fundamental limitations in those technologies. In the table below, features that can be used are shown with a
. - Strong name signing, Merging dependencies, Pruning, Obfuscation, Basic strings encoding, and Adding an incorrect metadata stream work with all technologies.
|
.NET 1.1 |
.NET 2.0+ |
Compact Framework 2 & 3 |
Silverlight |
Windows Phone 7 |
Windows Phone 7 XNA |
Xbox XNA |
XNA (PC applications) |
Tamper protection |
|
|
|
|
|
|
|
|
Automated error |
|
|
|
|
|
|
|
|
Feature usage |
|
|
|
|
|
|
|
|
Embedding |
|
|
|
|
|
|
|
|
Control flow |
|
|
|
|
|
|
|
|
References dynamic |
|
|
|
|
|
|
|
|
Resources compression |
|
|
|
|
|
|
|
|
Strings encoding with |
|
|
|
|
|
|
|
|
Strings encoding with |
|
|
|
|
|
|
|
|
Prevent ILDasm |
|
|
|
|
|
|
|
|
Was this article helpful?
SmartAssembly
- Using Smartassembly to obfuscate a windows service
- Obfuscation not renaming identically-named methods in different classes
- Serialization exceptions occurring in obfuscated assemblies
- SmartAssembly skipping obfuscation of some classes in your assembly
- SmartAssembly is not merging or embedding all assembly dependencies
- Can I customize the path to the MDB database?
- System.InvalidOperationException when attempting to connect to local SmartAssembly database
- Protecting website code using SmartAssembly
- Visual Studio Deployment Projects including unprotected builds
- SmartAssembly MSBUILD tasks failing because of difference in log4net assembly
- SmartAssembly Error Reporting: This application has submitted too many reports
- The assembly is being merged, but the dependent assembly isn't
- ERR 2002: Server did not recognize the value of HTTP Header SOAPAction
- The error report is not associated with a valid project ID - SmartAssembly
- Application built with an evaluation edition of SmartAssembly
- How end users can change their participation in Feature Usage Reporting
- Log file for SmartAssembly
- Moving SmartAssembly to another computer
- 'Using JET databases is not possible in 64-bit applications' error when using MSBuild or TFS
- SmartAssembly stack trace is invalid when Method Parent Obfuscation is enabled
- Upgrading SmartAssembly version 4.x to version 5
- Upgrading SmartAssembly Standard to Professional
- Problems building WPF applications with SmartAssembly 6.7
all products
- Some Red Gate products identified as containing a trojan by Anti-Virus software
- Activation may fail with Unknown Error -1
- Product uses web help although a CHM file is available locally
- Argument exception resulting from missing environment variable
- Check for updates may fail when used through proxies
- 'Unidentified Publisher' error when repairing or uninstalling
- Licensing activates product as standard edition
- Moving Red Gate software products to another machine
- Red Gate tools log locations
- The application UI opening slowly when there is no internet access
SmartAssembly
all products
- Red Gate product acknowledgements
- Activating your products
- Activating your products
- Red Gate bundle history
- Check for updates
- Troubleshooting Check for Updates errors
- Current versions
- Deactivating your products
- Installing Red Gate products from the .msi file
- Requesting additional activations
- Serial numbers for bundles
- Reactivating using a different serial number
- Extending your trial
- Finding your serial numbers
- Moving a serial number from one computer to another
- No response received for manual activation
- Licensing and activation resources
- Licensing and activation resources
- Troubleshooting licensing and activation errors
- Licensing and activation FAQs
- Red Gate tools log file locations
- Download old versions of products
- Download product prerequisites & utilities
- Support & upgrades
- Upgrading your software
- Upgrading FAQs

Using SmartAssembly for obfuscation