И вот минуло уже почти три месяца с момента нашего первого анонса облачная защита для .NET приложений. Все это время мы не теряли времени даром и активно работали над улучшением нашего продукта. В выявлении приоритетных направлений и обнаружении наиболее острых проблем нам очень помогло активно включившееся в испытания первой публичной версии хабросообщество. Большое спасибо Вам, от лица нашей команды!
В новой версии
Новое ядро WPF обфускации
- Теперь классы, задействованные в WPF, не исключаются, а обфусцируются наравне со всеми остальными. WPF ресурсы при этом пересобираются
- Поддерживается линкинг сборок содержащих WPF (что невозможно сделать в ILMerge)
- Умные автоматические исключения классов и полей недопустимых к переименованию, в том числе для сложных выражений типа PropertyPath
- BAML ресурсы переименовываются
Поддержка Unity 3D
- Переименовываются все внутренние методы, поля и классы
- Поддерживаются все режимы, включая String Encryption, External Method Call Hiding, Decomposition
Для того, чтобы защитить Unity 3D приложение, достаточно отправить на обфускацию сборки с пользовательским кодом из папки Managed, и затем заменить их на защищенные версии.
Полная совместимость с .NET Framework 4.5
- Теперь обфускатор одинаково хорошо работает с .NET 2.0, 3.0, 3.5, 4.0, 4.5.
- Корректно обфусцируется код с async/await
- Осуществлен переход на последнюю версию Mono Cecil
Автоматическая интеллектуальная обфускация
- Новый мощный механизм анализа деревьев иерархии и зависимостей
- Существенно усовершенствован анализатор кода
- Автоопределение сериализуемых классов по типовым конструкциям в коде
- Автоматическое исключение из переименования типов явно или косвенно связанных с сериализацией (например Enum'ы используемые в сериализуемых классах)
- Корректно обрабатываются проекты с использованием Microsoft Unity Container
- Интеллектуальный алгоритм выбора соответствующего метода на основе поиска наиболее полного соответствия. Пример случая разрешения неоднозначных перегрузок: Method(int arg) и Method<T>(T arg), где T = int
- Исправлена проблема совместимости алгоритмов декомпозиции с Expressions и LINQ
- Поддержка constrained prefix
- Автоматическое распознавание типов для Activator.CreateInstance и ConstructorInfo.Invoke по приведению к интерфейсутипу.
- Доработаны предупреждения, теперь они реже выдаются по мелочам
Некоторые примеры умного распознавания
Enums
string name = "Second";
var result = (Mode)Enum.Parse(typeof(Mode), name);
Анализатор определяет, что для enum'а Mode используется определение значения по имени, и помечает его вместе со всеми членами, как запрещенный к переименованию.
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; }
}
Как видите, RealySerializable и DataState не помечены атрибутом SerializableAttribute, но обнаружив инициализацию XmlSerializer с типом RealySerializable, анализатор кода исключает его из переименования. Аналогичный подход работает и для других сериалайзеров (JSON, Binary и т.п.). Обнаружив, что в сериалзиуемом типе задействован enum DataState, анализатор так же пометит его как сериализуемый.
CreateInstance by interface
var instance = Activator.CreateInstance(anyUnresolvedName);
var work = instance as IRef;
Допустим имя формируется динамически, соответственно анализатор не может понять чему равен anyUnresolvedName, но он находит явное приведение к интерфейсу IRef, и запрещает переименование всех его наследников.
Аналогично работают и другие случаи, попробуйте сами: appfuscator.com
Подводя итоги
В этой версии мы еще плотнее приблизились к нашей заветной цели — сделать так, чтобы Вы вообще не думали об обфускации, а просто получали готовый результат для любого Вашего проекта.
Очень скоро мы планируем запуск личного кабинета пользователя и еще пару приятных и полезных нововведений. Следите за новостями.
И конечно, как всегда, мы будем очень рады Вашим пожеланиям и хорошим идеям.
Автор: Anakonda