|
|
|
Описание для автора не найдено
|
|
|
|
|
|
|
|
Введение Небольшое
отступление Некоторые компьютерные
термины в русском языке обрели длинные и
неудобные названия (например - по английски -
assembly member, по-русски - член сборки, а
может быть участник, в общем двусмысленность
какая-то :))) Поэтому периодически буду
прибегать к более кратким и не совсем русским
аналогам терминов, в конце концов - обфускация -
это запутывание. Представьте если в статье везде
понатыкать "запутывать", "запутывание",
"запутка". Непривычно получается, а может
ничего. Или assembly - "сборка", но -
build,compile - тоже сборкой назвать надо,
только глагол. то. Так, что по терминологии не
судите строго.
Всем уже известно что
.Net сборки имеют достаточно открытый формат,
позволяющий исследовать не только структуру
классов вплоть до каждого члена класса но и
дизассемблировать код методов, содержащийся
также в сборке и получить вполне
структурированный и понятный текст.
Метаданные(metadata) сборки конечно же
удобны для осуществления массы задач, начиная от
самодокументирования и заканчивая их валидацией
(так как они представляют собой подобие базы
данных), и IL(intermediate language) в формате
которого хранятся методы managed сборок очень
хорошо структурирован, не составляет труда
транслировать этот код в языки более высокого
порядка - например в C#. С одной стороны -
комплименты такому формату, с другой стороны -
проблемы им порожденные. Одна из них - как
скрыть плод своих трудов от чужих и внимательных
глаз, сделать так чтобы не позволить
исследователям ваших продуктов воспользоваться
плодами вашего труда, вытащить код или снять
защиту. Этот вопрос и так стал предметом
жарких споров - а зачем защищать, когда реально
не защитить продукт? Ведь все равно можно
подсмотреть, подобрать ключик, найти заветную
строчку в дизассемблированном коде. Это дело
опыта и вкуса - нужно или не нужно защищать
продукт. Здесь этот вопрос не обсуждается, и
людям, выбравшим путь не защищать свою сборку
стоит прочитать эту статью, хотя бы для того
чтобы понять, какие элементарные вещи можно
соблюдать чтобы скрыть часть данных хотя бы от
первого взгляда на продукт в дизассемблере.
Так решение вопроса по защите сборки
сводится к использованию обфускатора (в
дальшнейшем термин обфускатор и обфускация будт
обозначаться как О! для краткости), а именно -
9Rays.Net ILObfuscator (в дальнейшем - ILO).
Обфускация - дело путаное. Основной
задачай обфускатора является запутать структуру
классов сборки и имена членов сборки таким
образом, чтобы она была трудна для анализа.
Желательно чтобы сборка была бы трудна для
дизассемблирования и, особенно - для
воспроизведения.
Сделать трудной для дизассемблирования в
ildasm сборку можно, если воспользоваться
некоторыми багами ildasm, но это проблема
временная. Задача по тому, как сделать
декомпилированную сборку трудной для компиляции
- более реальная, так как ilasm не терпит
определенных символов в названиях членов сборки
- и это не баг, а фича. При обфускациии
фактически исчезает логическая связь классов,
повторное применение одинаковых имен позволяет
сделать процесс анализа сборки крайне трудным, а
сложная структура namespace-class names-nested
class names позволяет сделать процесс анализа
еще более сложным. Конечно, если ваша сборка
содержит пару классов с парой методов,
обфускация бессмысленна - тут можно разобраться,
но если сборка содержит большое количество
классов - обфускация дело небессмысленное.
Платформы и языки с которыми работает
ILO Платформы:
- .Net Framework SDK 1.0,
- .Net Framework SDK 1.1,
- Compact Framework SDK
- ASP.Net (например LiveChat от
softwarefactoryinc.com)
Протестирован для
языков:
- VB.Net
- C#,
- managed C++ (verifiable assemblies - полная
поддержка, для содержащих native unmanaged
методы - без возможности оптимизации сборки
(прочитайте в MSDN статью о том как сделать вашу
managed c++ сборку верифицируемой)).
- Если у вас есть сборки, написанные на других
языках - присылайте мне, очень интересно.
Что входит в пакет ILObfuscator
выпускается в двух видах - Standart и
Professional. Основное отличие этих двух
пакетов в том что Pro включает в себя
графическую оболочку - ILOGUI, а также SDK
содержит исходные коды консольной версии ILO -
NRObfuscator. ILO включает в себя:
- NRObfuscator - консольная версия
обфускатора.
- ILOGUI - графическая версия обфускатора
(только Pro версия)
- Документация, достаточно подробная,
содержащая коллекцию советов по оптимизации
обфускации, Getting Started, FAQ(регулярно
пополняющийся). В дальнейшем будет добавлена
документация по SDK
- SDK - пополняющаяся коллекция примеров,
позволяющая использовать компонентную модель ILO
для построения своих решений по обфускации. В
нее входят - использование элемента управления
AssemblyBrowser, загрузка/запоминание и
редактирование проекта обфускации, загрузка и
запоминание карт обфускации. Также в SDK входят
исходные коды NRObfuscator, но только для Pro
версии.
Фичи ILO
- Поддержка multifile assemblies -
сборок,содержащих несколько модулей.
- Кросс-обфускация нескольких
взаимосвязанных сборок - увеличивает
качество обфускации, так как запутывает не
только взаимосвязанные классы, namespaces но и
связи между сборками.
- Несколько видов изменения структуры
классов в процессе обфускации - AsIs -
структура классов остается прежней и
обфусцируются только имена, AllTypesOneNameSpace
- все классы перемещаются в одно namespace,
EachTypeOneNameSpace - каждый класс помещается в
отдельное namespace, что усложняет процесс
поиска класса.
- Несколько сценариев генерации имени
обфусцируемого члена сборки - вы можете
задать имя для обфусцированного класса состоящее
только из цифр(что консервативно), только из
букв, или из смешанного ряда символов - это
наиболее подходящий способ уберечь вашу сборку
от компиляци в ilasm, так как некторых символов
ilasm не переваривает.
- Применение атрибутов обфускации - вы
можете еще в коде пометить необходимые для
обфускации или для исключения из обфускации
классы спеиальными атрибутами(для этого
достаточно подсоединить к вашему проекту
небольшой в 15 строк класс, или создать свой, но
только с сохранением имен классов идентичных
оригинальным атрибутам).
- Открытая компонентная модель - ILO
написан таким образом что вы можете написать
свою собственную полноценную программу
обфускации и использовать в ней всю мощь ILO,
для этого у вас под рукой будут все инструменты
- сериализуемые классы ILOProject,
ObfuscationOptions, ILOMDProvider - собственно
он и занимается обфускацией, дизассемблингом, и
прочми полезными вещами, список которых растет.
Как использовать эти компоненты - для этого к
ILO прилагается SDK, куда для PRO версии входит
исходный текст консольной версии ILO -
NRObfuscator.
- Карты обфускации - вы можете
сгенерировать карту обфускации (.ilomap),
которая позволит в дальнейшем использовать
результаты обфускации одной сборки в процессе
обфускации другой - использующей
обфусцированную. Это не единственная полезная
нагрузка карт обфускации. Если вы заинтересованы
в фиксированном результате обфускации, или для
исследования Exceptions возникающих в
обфусцированной программы - карты обфускации
будут вам полезны.
- Проект обфускации - ILOProject,
позволяет вам сэкономить немало времени для того
чтобы обфусцировать продукт, состоящий из
нескольких взаимосвязанных сборок, достаточно в
него добавить ваши сборки, настроить опции
обфускации, разрешить ссылки к внешним сборкам,
возможно - подключить карты подфускации,
возможно - назначить файла для экспорта карты
обфускации проекта, запомнить -и вперед.
- Консольная версия - также входит в
состав ILO, ее исходный код включен в ILO Pro
SDK. Консольная версия представляет интерес для
разработчиков, которые хотели бы обфусцировать
свои продукты в ходе их компиляции в средстве
разработки. Консоль поддерживает обфускацию как
отдельных сборок, так и .iloprj - файлов
проектов обфускации.
- ILOGUI - весьма полезная и удобная
графическая оболочка, позволяющая удобно
работать как с отдельными сборками, так и с
проектами.
ILOGUI Графическая оболочка ILO -
мощный и полезный инструмент, чья архитектура
позволяет от версии к версии постоянно
наращивать как возможности инструмента, так и
удобства. Основные задачи ILOGUI:
- анализ сборок
- анализ структуры кода (граф вызовов метода),
- дизассемблинг (разрабатывается плагин по
дизассемблингу в C#, вместе с outline классов),
- просмотр сборок (с поддержкой истории и
навигацией),
- просмотр и экстрагирование ресурсов сборок.
Управление проектом ILOProject
- Создание проекта, добавление/удаление к
проекту сборок
- Разрешение проблем с referenced сборками
- Запоминание и загрузка проекта в
удобоваримом формате XML (.iloprj файл)
- Удобное редактирование свойств проекта в
PropertyGrid
- Возможности контекстного меню броузера
сборок (AssemblyBrowser) постоянно растут
- Богатые возможности поиска члена сборки
- Поддержка просмотра каждой сборки или всех
во внешнем броузере сборок (типа ildasm), причем
можно посмотреть как исходные сборки, так и
результаты обфускации.
- Поддержка верификации сборок как до, так и
после обфускации утилитой верификации .Net
PE-файла - PEVerify с просмотром результатов
верификации.
- Обфускация
- Вывод хода процесса обфускации производится
реальном режиме времени и достаточно подробен
- После обфускации вы можете посмотреть
результаты во внешнем броузере сборок
- После обфускации вы имеете возможность
верифицировать сборку и просмотреть результаты
верификации - убедиться в том что сборка
корректно обфусцирована.
- После обфускации программа подготавливает
лист обфусцированных членов сборки, который
можно просмотреть, отсортировать, найти
необходимый член сборки в исходных сборках
- При желании, после обфускации, программа
сформирует и запомнит карту обфускации в файл
.ilomap (в формате XML)
- Работа с картами обфускации (в следующей
версии появится возможность
редактирования)(.ilomap файл - также XML формат)
- Пока имеется возможность загрузки карты
обфускации для просмотра, но в дальнейшем
появится возможность полноценной работы с ней -
редактированием, добавлением и удалением
обфусцрованных членов.
- ILOProject имеет возможность импорта карт
обфускации для использования как лист замен.
Возможности AssemblyBrowser
- Возможность удобного назначения/отмены
замены для члена сборки и визуальное отображение
замененных членов сборки
- Возможность удобного назначения/отмены
исключения члена сборки из обфускации и
визуальное отображение исключенных членов сборки
- Контекстное меню позволяет совершать более
20 операций - вот краткий список, надеюсь он
будет понятен:
- AddAssembly,
- RemoveAssembly,
- ViewResource,
- SaveResourceTo,
- CallGraph,
- Disassembler,
- AddToSubstitutions,
- AddToExcludes,
- RemoveFromSubstitutions,
- RemoveFromExcludes,
- ExpandAll,
- CollapseAll,
- ViewInExternalBrowser,
- ViewAsmInExternalBrowser,
- ViewInPeVerify,
- ViewAsmInPeVerify,
- BrowseBack,
- BrowseForward,
- AddToProjectRefs,
- Refresh,
- Sort,
- Copy
Типы файлов Есть 2 формата файлов, с
которыми ассоциируется ILOGUI или NRObfuscator
(консольная версия) - .ilomap и .iloprj
- .ilomap - тип файла карты обфускации.
- .iloprj - тип файла проекта обфускации.
- Также ILO открывает отдельные сборки - т.е
файлы типа .exe, .dll и модули - тут тип
расширения не стандартизован - .mcl, .netmodule,
.mod, .module, .mdl
Преимущества
- Основным преимуществом ILO перед другими
обфускаторами является открытая компонентая
модель, когда пользователь может пользоваться
как предложенными средствами, так и создать свою
систему обфускации - add-in для Visual Studio,
сетевой обфускатор, online обфускатор и
дизассемблер.
- Кроме этого ILO полностью написан на С# и
managed C++. Кроме функций оптимизации размера
сборки все сборки содержат полностью managed
code
- ILOGUI - не только инструмент для
обфускации, но это мощный и удобный инструмент
для анализа сборки и верификации.
- Богатые возможности кросс-обфускации и
использования карт обфускации позволяют работать
с любого уровня сложности проектами и работать с
партнерами по разработке (вы или партнеры можете
использовать карты обфускации для обработки
своих проектов с использованием обфусцированных
сборок сторонних
производителей)
Перспективы В дальнейшем, за счет
новых plugin-ов его функциональность будет
расширена для более профессиональных нужд, как
то - исследование структуры PE-файла, броузинг
таблиц метаданных, создание self-installed
сборок all-in-one, декомпиляция в код C#,
VB.Net, работа и навигация по IL-коду.
|
|
|
|
|
|
|