Pull to refresh

Защита в облаках: AppFuscator 2.0

Reading time3 min
Views1.8K
И вот минуло уже почти три месяца с момента нашего первого анонса облачная защита для .NET приложений. Все это время мы не теряли времени даром и активно работали над улучшением нашего продукта. В выявлении приоритетных направлений и обнаружении наиболее острых проблем нам очень помогло активно включившееся в испытания первой публичной версии хабросообщество. Большое спасибо Вам, от лица нашей команды!

В новой версии



Новое ядро WPF обфускации

  • Теперь классы, задействованные в WPF, не исключаются, а обфусцируются наравне со всеми остальными. WPF ресурсы при этом пересобираются
  • Поддерживается линкинг сборок содержащих WPF (что невозможно сделать в ILMerge)
  • Умные автоматические исключения классов и полей недопустимых к переименованию, в том числе для сложных выражений типа PropertyPath
  • BAML ресурсы переименовываются


image

(нажмите для увеличения)

Поддержка 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

Подводя итоги


В этой версии мы еще плотнее приблизились к нашей заветной цели — сделать так, чтобы Вы вообще не думали об обфускации, а просто получали готовый результат для любого Вашего проекта.

Очень скоро мы планируем запуск личного кабинета пользователя и еще пару приятных и полезных нововведений. Следите за новостями.

И конечно, как всегда, мы будем очень рады Вашим пожеланиям и хорошим идеям.
Tags:
Hubs:
0
Comments0

Articles