📜 ⬆️ ⬇️

Cloud Protection: AppFuscator 2.0

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


')
image

(click to enlarge)

Unity 3D support


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





Automatic Intelligent Obfuscation



Some examples of clever recognition

Enums

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.com

Summing 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.

Source: https://habr.com/ru/post/158643/


All Articles