And now almost three months have passed since the moment of our first announcement of
cloud protection for .NET applications . All this time we did not waste time and actively worked to improve our product. The habrasocially actively involved in the tests of the first public version helped us a lot in identifying priorities and finding the most acute problems. Many thanks to you on behalf of our team!
In the new version
New core WPF obfuscation
- Now the classes involved in WPF are not excluded, but obfustsiruyutsya on a par with everyone else. WPF resources are rebuilt.
- Linking assemblies containing WPF is supported (which is not possible in ILMerge)
- Smart automatic exclusion of classes and fields that are not allowed to be renamed, including for complex expressions of type PropertyPath
- BAML resources renamed
')
(click to enlarge)
Unity 3D support
- All internal methods, fields and classes are renamed.
- All modes are supported, including String Encryption, External Method Call Hiding, Decomposition
In order to protect the Unity 3D application, just send the assembly with the user code from the Managed folder for obfuscation, and then replace them with the protected versions.
Full compatibility with the .NET Framework 4.5
- Now obfuscator works equally well with .NET 2.0, 3.0, 3.5, 4.0, 4.5.
- The code with async / await is correctly obfuscated.
- Moved to the latest version of Mono Cecil
Automatic Intelligent Obfuscation
- New powerful mechanism for analyzing hierarchy trees and dependencies
- Significantly improved code analyzer
- Autodetection of serializable classes according to standard constructions in code
- Automatic exclusion from renaming types that are directly or indirectly associated with serialization (for example, Enums used in serializable classes)
- Projects are handled correctly using Microsoft Unity Container
- An intelligent algorithm for selecting the appropriate method based on the search for the most complete match. An example of the case of resolving ambiguous overloads: Method (int arg) and Method <T> (T arg), where T = int
- Fixed compatibility problem of decomposition algorithms with Expressions and LINQ
- Support constrained prefix
- Automatic type recognition for Activator.CreateInstance and ConstructorInfo.Invoke by casting to interface \ type.
- Improved warnings, now they are less often issued on trifles
Some examples of clever recognitionEnums
string name = "Second"; var result = (Mode)Enum.Parse(typeof(Mode), name);
The analyzer determines that the definition of a value by name is used for enum Mode, and marks it together with all members as forbidden to rename.
Serializer
var serializer = new XmlSerializer(typeof(RealySerializable)); var writer = new StringWriter(new StringBuilder()); serializer.Serialize(writer, new RealySerializable()); string res = writer.ToString(); public enum DataState { One, Two } public class RealySerializable { public int MyProperty { get; set; } public DataState State { get; set; } }
As you can see, RealySerializable and DataState are not marked with the SerializableAttribute attribute, but upon detecting the initialization of the XmlSerializer of the RealySerializable type, the code analyzer excludes it from the renaming. A similar approach works for other serializers (JSON, Binary, etc.). Having discovered that the enum DataState is involved in the serializable type, the analyzer will also mark it as serializable.
CreateInstance by interface
var instance = Activator.CreateInstance(anyUnresolvedName); var work = instance as IRef;
Suppose the name is formed dynamically, respectively, the analyzer cannot understand what anyUnresolvedName is equal to, but it finds an explicit cast to the IRef interface, and prohibits renaming all its heirs.
Other cases work in the same way, try it yourself:
appfuscator.comSumming up
In this version, we are even closer to our cherished goal - to make sure that you don’t think about obfuscation at all, but just get the finished result for any of your projects.
Very soon we are planning to launch a personal user account and a couple of nice and useful innovations. Follow the news.
And of course, as always, we will be very happy with your wishes and good ideas.