SmartAssembly

Latest version: 6.7

SmartAssembly

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 tick.
  • Strong name signing, Merging dependencies, Pruning, Obfuscation, Basic strings encoding, and Adding an incorrect metadata stream work with all technologies.

 

.NET 1.1
(Not SA 6.5+)

.NET 2.0+

Compact Framework 2 & 3

Silverlight

Windows Phone 7

Windows Phone 7 XNA

Xbox XNA

XNA (PC applications)

Tamper protection

 

tick

 

 

 

 

 

tick

Automated error
reporting

tick

tick

 

tick

tick

tick

 

tick

Feature usage
reporting

 

tick

 

 

 

 

 

tick

Embedding
dependencies

 

tick

 

tick

 

 

tick

tick

Control flow
obfuscation

tick

tick

 

tick

tick

tick

tick

tick

References dynamic
proxy

 

tick

 

 

 

 

 

tick

Resources compression
& encryption

 

tick

 

 

 

 

 

tick

Strings encoding with
improved protection

 

tick

 

 

 

 

 

tick

Strings encoding with
compression & encryption

 

tick

tick

tick

tick

tick

 

tick

Prevent ILDasm

 

tick

 

 

 

 

 

tick

Was this article helpful?

Search support
Forums
Visit the SmartAssembly forum.

SmartAssembly

all products