Безопасность - Защита программы 

Page / - Изменено Alexandr Fokin в 2020/08/03 12:27 

Защита программы 
Изменено Alexandr Fokin
в 2020/08/03 12:27

Оглавление

Основныи элементами приложений, подлежащим защите, является сама программа и используемые ею внешние данные (файлы, БД). Для защиты файлов может быть использовано шифрование (симметричное, асимметричное), а БД наверняка имеют свои методы. В случае использования шифрования, непосредственно в программе скорее всего будет встроен метод расшифровки (в худшем случае вместе с ключом), что вынуждает защищать исходный код приложения.
Для защиты исходного кода .Net приложений может быть использовано несколько подходов:
•	Обёртывание исполняемой управляемой сборки в неуправляемую;
•	Обфусцирование и запутывание кода.
Первый вариант не позволит мгновенно распознать .Net платформу при вскрытии внешней сборки. Есть вероятность, что упакованный внутренний исполняемый файл можно извлечь и после декомпилировать. В зависимости от реализации, во внешнюю сборку можно встроить даже .Net платформу, чтобы не зависеть от компонентов ОС.
Второй вариант изменяет непосредстенно код приложения и собирает сборку заново. Основные функции обфусцирования:
•	Переименовывание (переменных, классов, типов, пространств имён, строковых констант);
•	Control Flow aka "Спагетти-код" (насыщение кода "лишними" switch'ами, if'ами, goto, вызовами, преобразование операций);
•	Встраивание зависимых сборок (с возможностью их обфусцирования);
•	Шифрование встроенных ресурсов;
•	Сжатие встроенных ресурсов;
•	Запечатывание открытых классов и методов;
•	Обработка пространств имён (объединение или распределение классов по новым пространствам);
•	Преоразование managed фрагметов кода в native для защиты и ускорения (методы set-get);
•	Анти отладка, анти декомпиляция.
Как правило, в результате работы обфускатора получается слабо человекочитаемый код (если код вообще открывается в декомпиляторе), однако почти все сведения о проведенных изменениях записываются внутри получившейся сборки, что позволяет воспользоваться деобфускатором для восстановления первоначального кода. Один из наиболее известных деобфускаторов - de4dot - является open-source проектом и доступен на github.
Был проведен анализ современных обфускаторов (январь 2020). В основном использовались взломанные версии программ с максимальными настройками защиты. В качестве подопытной программы выступало WPF приложение (XAML разметка, версия .Net Framework 4.0-4.5). Для деобфускации - de4dot, для декомпиляции - JetBrains dotPeek.
Документ с полученной таблицей сравнения.
Использованные обфускаторы:
•	SmartAssembly 7.2.1.2972
•	.NET Reactor 5.9.8
•	Agile.Net 6.6.0.11
•	Crypto Obfuscator v2018 Enterprise
•	Confuser Obfuscator 1.3.1
•	DotFuscator Community (поставляется вместе с Visual Studio, начиная с версии так 2013).
Материалы для ознакомления:
•	Обзор обфускаторов для .NET
•	AppFuscator — облачная защита .NET