Методы и алгоритмы защиты
Ниже перечислены методы защиты, а также алгоритмы интеллектуального анализа кода и ресурсов, реализованные в нашем сервисе:
Renaming
Переименование классов и их членов, с полной поддержкой Generics, наследования, перегрузки виртуальных методов, анализа стандартных атрибутов обфускации.
Assembly Merging
Объединение сборок — объединение кода из нескольких исходных защищаемых сборок в одну.
Decomposition
Декомпозиция структуры классов в процедурное представление — уникальная разработка нашего продукта, базирующаяся на идее перевода программы из объектно-ориентированной формы (простой для реверс-инжиниринга) к процедурному стилю, с максимальным уничтожением всей доступной информации хранимой в метаданных (но с сохранением полной работоспособности сборщика мусора).
Control Flow Obfuscation
Запутывание потока управления — cокрытие кода алгоритмов программы, путем создания запутанной разветвленной логики, сложной для анализа (реальные и ложные ветвления, switch переходы и другие методы). Инными словами, так называемый spaghetti code. Поведение самой программы при этом не изменяется.
External Method Call Hiding
Скрытие вызова внешних методов — подмена явного вызова методов из внешних сборок (в том числе обращений к Common Language Runtime), на неявное обращение по неуправляемому указателю, извлеченному из метаданных на основе зашифрованного идентификатора.
String Encryption
Шифрование строк на основе собственного алгоритма. Использует динамические переменные и шифрованные блоки данных с целью максимального усложнения потенциальной автоматической де-обфускации.
WPF Obfuscation
Автоматическое определение и корректная обфускация типов, методов и полей, к которым имеются обращения из Windows Presentation Foundation. Работает на базе декомпиляции и дальнейшей повторной сборки BAML ресурсов, за счет чего достигается переименовывание максимально возможного количества данных.
Reflection Analyzing
Анализ обращений к механизму отражения — набор алгоритмов, отслеживающих обращение к Reflection методам (как к методам явного обращения по имени, так и к перечислениям членов класса). Автоматически отслеживает связи и корректирует имена в исходном коде.