Запутывание приложений, созданных с помощью Dotfuscator (версия Visaul Studio 2022)

Страница обновлена :
Дата создания страницы :

сводка

Приложения, основанные на платформе серии .NET, создаются на так называемом общем промежуточном языке, поэтому их можно читать в форме, близкой к исходному исходному коду, с помощью средств дизассемблирования и тому подобного. В этом разделе описывается, как запутать классы и имена методов в легко нечитаемых форматах с помощью бесплатной версии Dotfuscator, средства обфускатора, входящего в состав Visual Studio.

Он описан с помощью Visual Studio 2022, но его также можно использовать в других версиях Dotfuscator.

Операционная среда

Visual Studio
  • Visual Studio 2022

О Дотфускаторе

Dotfuscator - это средство обфускации, которое затрудняет чтение исходного кода при дизассемблировании для приложений, написанных с помощью семейства платформ .NET (далее именуемого .NET). Dotfuscator поставляется с Visual Studio бесплатно и за отдельную плату.

Бесплатная версия недоступна, если многие из ее функций не ограничены или Visual Studio не запущена, но любой может использовать ее, если у них установлена Visual Studio. Платная версия имеет много мощных функций обфускации, которые не встречаются в бесплатной версии, но она предлагается по цене, которую трудно себе позволить широкой публике.

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

О разборке

Я упоминал ранее, что приложения, написанные на .NET, могут легко дизассемблировать и читать исходный код, но на самом деле происходит то, что если вы дизассемблируете файл .exe (или файл .dll), как показано на следующем рисунке, вы можете почти воспроизвести исходный код, такой как пространство имен, имя класса, имя метода и т. Д.

Типы программ, которые должны быть запутаны

Это в основном относится к программам, которые распространяются и запускаются для неуказанных пользователей. Например, настольные приложения. И наоборот, веб-приложения, которые испытывают трудности с прямым доступом к программным файлам, менее важны для обфускации.

На этот раз мы рассматриваем проект в WPF, классическом приложении.

Установка Dotfuscator

Это приложение поставляется с Visual Studio 2022, но не входит в стандартную установку (в некоторых прошлых Visual Studios оно могло быть установлено с нуля).

Чтобы добавить Dotfuscator: Запустите Visaul Studio и выберите Получить инструменты и функции из инструментов.

Выберите «Отдельные компоненты» на вкладке выше, установите флажок «PreEmptive Protection - Dotfuscator» в группе «Code Tools» и нажмите кнопку «Установить» в правом нижнем углу. При этом закройте консоль Visual Studio.

Процедура обфускации

Описывает шаги, направленные на то, чтобы сделать эти имена запутанными и запутанными.

Создайте приложение в Visual Studio, выполните сборку .exe файла, а затем щелкните платформу . Создайте DLL-файл. Пока это то же самое, что и создание обычного приложения. Создаваемое приложение должно быть предназначено для приложений, созданных в сборке Release. (Потому что обычно вы не публикуете в Debug.)

После создания .exe или .dll выберите в меню Visual Studio пункт Сервис, а затем выберите Приоритетная защита — сообщество Dotfuscator.

Экран регистрации отображается, но он не является обязательным, поэтому, если он не нужен, нажмите кнопку отмены как есть.

Оставьте и нажмите кнопку OK.

Запускается Dotfuscator. Приложение работает самостоятельно, поэтому вы можете запутать файлы, которые не имеют отношения к текущему открытому проекту. (В случае бесплатной версии самого приложения предполагается, что запущена Visual Studio.) )

В этой статье я запутаю проект приложения WPF .NET 6.0, построенный с использованием значений по умолчанию, в качестве примера.

Выберите «Ввод» из списка слева и нажмите кнопку «+».

Выберите файл программы, который вы хотите запутать. Приложения, написанные на платформе .NET Framework, часто запутывают .exe, но в .NET и .NET Core программы часто .dll сущностей. NET WPF также будут иметь .dll сущностей, поэтому выберите .dll.

Он будет добавлен в список. Если он состоит из нескольких библиотек DLL, добавьте несколько библиотек DLL.

После добавления целевого файла нажмите кнопку «Построить» на панели инструментов.

Вам будет предложено сохранить обфускированный файл проекта, поэтому укажите его. Местоположение может быть произвольным, но оно также может быть выходным местоположением запутанной программы. Он сохранит ваши входные данные и откроет этот файл проекта обфускации, если вы хотите снова запутать его. Расширение ". xml".

Если сборка запущена и в приведенном ниже сообщении отображается сообщение "Сборка завершена", это означает успешное завершение. На экране отображается журнал построения и список запутанных классов и переменных.

Выберите «Результат» в списке слева, чтобы увидеть подробности об изменении имен классов и методов.

Имена классов и методов в дереве справа, такие как "->", являются именами после обфускации. Изменив имя класса или метода на бессмысленное имя, подобное этому, можно затруднить чтение содержимого исходного кода, даже если он разбирается.

Обфускированные программы сохраняются в папке под названием «Dotfuscated» в том месте, где вы сохранили файл проекта.

Map.xml является файлом результатов обфускации, поэтому вы можете безопасно удалить его.

Поскольку WPF .NET 6.0 не может быть запущен только библиотекой DLL, скопируйте "XXXX.exe" и "XXXX.runtimeconfig.json", созданные во время вывода сборки, в одну и ту же папку и запустите ее. Если вы можете начать нормально, пока нет никаких проблем. Если вы не можете запустить его, возможно, у вас отсутствуют файлы или вы создаете программу, которая становится несогласованной из-за запутанности.

Если вы проанализируете программу, которая на самом деле была запутана, вы увидите некоторые следы запутывания. Первый лист рисунка ниже находится перед обфускации, а второй — после обфускации.

Обратите внимание, что имена классов, определенные в библиотеках .NET, не подлежат переименованию, поскольку они существуют как платформа.

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

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

Исключить обфускацию

Если у вас есть имена классов или свойств, которые вы не хотите запутывать, вы можете исключить их.

Во время загрузки сборки выберите Переименовать > Исключить в левой части экрана. Поскольку содержимое сборки отображается, я проверю те, которые я не хочу запутывать.

Можно исключить обфускацию на гранулярном уровне, но я думаю, что проще настроить ее на основе пространства имен.

Режим библиотеки

При выборе входной сборки можно увидеть, что установлен флажок «Режим библиотеки».

«Режим библиотеки» предназначен для присоединения к библиотекам DLL, которые могут вызываться другими программами. Если флажок установлен, открытые классы и свойства, вызываемые другими программами, исключаются из обфускации.

Однако, в целом, редко можно предоставить библиотеку, которая называется генеративно из других программ, и я думаю, что она часто запутывается приложениями, которые работают в одиночку, поэтому в принципе можно удалить эту проверку.

Обфускация однофайлового .exe (не подтверждено)

Исследования этого элемента в Visual Studio 2022 в настоящее время не подтверждены.

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