Создание проекта обфускации из консоли Inquartos ® Obfuscator
Запускаем консоль через меню Пуск
После запуска появится графическая консоль с пустым проектом
1. В начале надо сохранить новый пустой проект, через меню Проект\Сохранить как...
2. Выбрать директорию и имя проекта для сохранения. Лучше всего выбирать для сохранения корневую директорию Вашего проекта (где лежит Solution (.sln))
Для примера мы воспользуемся тестовым проектом, в котором есть исполнимый модуль TestProject.exe и библиотека ClassLibrary1.dll
Исходный код: TestProject.zip
3. Добавим сборки (TestProject.exe, ClassLibrary1.dll) к проекту обфускации. Добавление осуществляется либо через кнопку добавить, либо через контекстное меню
4. Теперь у нас есть проест обфускации с реальными сборками, дальше будем настраивать опции обфускации
Опции:
- Опция участия сборки в обфускации - включено
- Имя ключа - не задано
- Файл ключа - не задано
5. Настраиваем параметры переименования сборок
- Переключаемся на вкладку Обфускация (пункты меню слева);
- Выбираем раздел Переименование;
- Включаем опцию Разрешить переименование - в результате классы, методы, и т.д. будут переименовываться;
- Выбираем метод переименования Юникод - после переименования символы будут не читабельного вида;
- Включаем опцию Сохранить таблицу - для того чтобы в последствии можно было восстановить реальные имена по измененным (например при возникновении Exception);
Пример результата переименования с использованием метода Юникод (просмотр осуществляется с использованием утилиты .Net Reflector):
6. Настраиваем параметры раздела Графа потока управления
- Выбираем раздел Граф потока управления;
- Включаем опцию Разрешить обфускацию графа потока управления - в результате код методов будет перемешан (условия, циклы, вызовы функций);
Пример результата обфускации с опцией Граф потока управления (просмотр осуществляется с использованием утилиты .Net Reflector):
7. Настраиваем параметры раздела Удаления событий и свойств
- Выбираем раздел События и свойства;
- Включаем опцию Разрешить удаление свойств и событий - в результате в метаданных сборки не останется описания событий и свойств (только функции);
8. Настраиваем параметры раздела Параметры метода
- Выбираем раздел Параметры метода;
- Включаем опцию Разрешить переименование параметров метода - в результате в метаданных сборки названия параметров функций будут переименованы;
- Включаем опцию Не переименовывать открытые методы - в результате при переименовании будут исключены открытые методы (обычно нужно для COM объектов, либо для библиотек компонентов);
9. Настраиваем параметры раздела Шифрование строк
- Выбираем раздел Шифрование строк;
- Включаем опцию Разрешить шифрование строк - в результате в метаданных сборки строки будут, храниться в зашифрованном виде, что защищает от поиска фраз в сборке, а также усложняет анализ кода;
10. Настраиваем параметры раздела Создание Win32 оболочки
- Переключаемся на вкладку Защита;
- Выбираем раздел Создание Win32 оболочки;
- Включаем опцию Разрешить создание Win32 оболочки - в результате после обфускации получаем исполняемую сборку TestProject.exe, которая видится как обычное Win32 приложение, просмотреть его с помощью .NET дизассемблеров уже не получится. Так же он становится защищенным от Windows отладчиков;
Пример результата обфускации с опцией Создание Win32 оболочки (просмотр осуществляется с использованием утилиты .Net Reflector):
11. Настраиваем параметры раздела Защита от декомпиляторов
- Выбираем раздел Защита от декомпиляторов;
- Включаем опцию Разрешить защиту от декомпиляторов - в результате обфускации - сборка с точки зрения дизассемблеров будет некорректной. Если дизассемблировать сбоку в ней большей частью будут ошибки, а остальная часть будет не корректной с точки зрения семантики языков высокого уровня (C#, VB и.д.) кроме низкого уровня IL ассемблера. Таким образом, изучения такого кода становится крайне сложной или невозможной;
12. Настраиваем параметры раздела Шифрование сборок
- Выбираем раздел Шифрование сборок;
- Включаем опцию Разрешить шифрование сборок - в результате обфускации dll сборки будут сжаты (zip) и зашифрованы по алгоритму AES (Rijndael), а в исполняемую сборку интегрируется ключи шифрования и код осуществляющую автоматическую распаковку и загрузку сборки в памяти при первом обращении к элементам сборки;
Пример результата обфускации с опцией Шифрование сборок (просмотр осуществляется с использованием утилиты .Net Reflector):
13. Компиляция проекта обфускации
- Сохраняем проект;
- Компилируем - в результате компиляции получатся модули, защищенные от:
- отладки;
- декомпиляторов;
- анализа кода;
Отчет о компиляции:
Обфускация сборки.
> Количество ядер используемых при компиляции: 4
> На входе: "ClassLibrary1.dll"
> Директория результата: ".\OutputObfuscate"
> Framework v 2.0/3.0/3.5
> На входе: "TestProject.exe"
> Декомпиляция "TestProject.exe"
> Декомпиляция "ClassLibrary1.dll"
> Удаление метаданных свойств.
> Удаление метаданных событий.
> Шифрование строк (быстрое).
> Обфускация условных переходов.
> Обфускация вызовов функций (высокий уровень).
> Вставка не декомпилируемых методов (низкий уровень).
> Удаление метаданных свойств.
> Удаление метаданных событий.
> Сделать как 'Загрузчик сборок'.
> Шифрование строк (быстрое).
> Переименование параметров метода...
> Обфускация условных переходов.
> Обфускация вызовов функций (высокий уровень).
> Вставка не декомпилируемых методов (низкий уровень).
> Переименование параметров метода...
> Переименование...
> Сохранение таблицы переименований.
> Компилирование "ClassLibrary1.dll"
> Компилирование "TestProject.exe"
> Активация не декомпилируемых методов.
> Активация не декомпилируемых методов.
> Win32 shell protection. TestProject.exe
> Шифрование сборки. ClassLibrary1.dll
>
> Компиляция завершена.
>
В результата обфускации тестового приложения получили защищенное приложение в директории .\OutputObfuscate:
Пример тестового проекта по которому делалось описание: TestProject (для VS 2005) (zip)
Вопросы по данной тематике можно задать на форуме: http://forum.inquartos.ru, Форум - Inquartos Obfuscator или по почте support@netobf.com