Інновації народжуються на стику наук. Цікаві програмні продукти - на стику технологій.
Xenocode Postbuild for .NET - це гібрид двох технологій. З одного боку - це якісний обфуськатор з широкими можливостями захисту і оптимізації коду. З іншого - це система віртуалізації. що дозволяє перетворити ваш додаток з усіма його збірками і DLL в єдиний виконуваний файл, якому для роботи навіть .NET Framework встановлювати не потрібно. Postbuild for .NET здатний захистити код вашої програми від зворотного інжинірингу та декомпіляцію, оптимізувати продуктивність програми, зменшити розмір програми на диску і в пам'яті, спростити процеси налагодження і поширення.
Вкрай корисна функціональність для розробників. Функціональність, вирішальна дві проблеми: проблему захисту і проблему поширення додатки .NET.
Захист додатків - процес нетривіальний. А захист додатків .NET - просто суцільний головний біль. Код, розроблений під платформу .NET Framework, компілюється в проміжний мову IL. Скомпільований код містить метадані, що описують структуру коду, - класи, методи, події. На практиці метадані приносять колосальну користь. Одночасно вони дають неприємний побічний ефект: в скомпільованому коді зберігається занадто велика кількість інформації про вихідний код програми. За допомогою спеціальної програми - декомпілятори - будь-який бажаючий може отримати цю інформацію і відновити велику частину вихідного коду програми. Так що якщо ви випустили в світ програму, написану під .NET, і не подбали про її захист, можете вважати, що ви виклали у відкритий доступ її вихідні коди.
З цією проблемою борються обфускація коду. Обфуськатор трансформують скомпільований код додатка таким способом, щоб утруднити чи зробити неможливим його декомпіляцію. Обфусцірованний код теоретично можна декомпілювати і вивчити. Але процес цей не на багато простіше, ніж декомпіляція машинного коду, тобто важкий, вимагає багато часу і сил. Обфуськатор знищують більшу частину високорівневою інформації про вашу програму, зберігаючи при цьому програму стовідсотково працездатною.
Поширення додатки .NET пов'язано з наступними проблемами. Перша - на машині клієнта повинна бути встановлена необхідна версія .NET Framework. Друга - технологія розробки під .NET передбачає "многосборчатость". Додаток слід розробляти у вигляді набору окремих збірок - файлів. В принципі нічого страшного. Але однофайловий додатки чомусь викликають у користувачів набагато більшу симпатію, ніж додатки, що складаються із сотні дрібних файлів. Нарешті, багато програм включають COM-компоненти, які при установці доводиться реєструвати в реєстрі Windows, - значить, потрібні права адміністратора, значить, установки в один ЦЗК не реалізувати.
Подібні проблеми поширення давно і успішно вирішують виртуализацией додатків. Додаток полягає в віртуальний контейнер, який стає посередником між операційною системою і додатком. Контейнер "підсовує" з додатком віртуальні версії реєстру і файлової системи. Додаток начебто пише в реєстр, начебто створює файл на диску C. а насправді все зміни фіксуються контейнером в спеціальній директорії - пісочниці. Операційна система всіх цих змін не бачить. А для програми завжди все виглядає так, як ніби в операційній системі ці зміни відбулися. Саме за такою технологією створюються портативні версії додатків, такі популярні останнім часом.
Віртуалізація вирішує всі перераховані проблеми поширення. Додаток може працювати без прав адміністратора. Додаток не потрібно встановлювати - все COM-компоненти, бібліотеки, складання в віртуальному додатку вже зареєстровані. Віртуальне додаток виглядає як один виконуваний файл, що включає всі необхідні файли, навіть .NET Framework. Запускай і працюй.
Postbuild for .NET здатний з легкістю перетворити ваше додаток зі звичайного в портативний. І це не дивно - одним з продуктів, що випускаються компанією Xenocode, є Virtual Application Studio - прямий конкурент VMWare ThinApp. Система віртуалізації, вбудована в Postbuild, дає додаткові переваги в порівнянні з окремими системами віртуалізації. Postbuild здатний визначити, які файли .NET Framework насправді використовуються вашим додатком, і включити в віртуальний контейнер тільки їх. Так що у вас є відмінна можливість мінімізувати розміри вашого портативного додатки.
Отже, захист і поширення, обфускація і віртуалізація. Дивимося, наскільки зручний Postbuild на практиці.
Захист додатки засобами Postbuild for .NET
Основна вкладка - Application. Тут ви вказуєте збірки, які хочете захистити. Тут же вибираєте один з попередньо встановлених наборів налаштувань (preset), найбільш підходящий для вашого застосування. Postbuild пропонує сім наборів: легка захист, агресивна, захист для додатків, які розповсюджуються методом Click Once, додатків ASP.NET, додатків Compact .Net Framework, захист для ресурсних збірок і набір налаштувань для налагодження. Одне клацання миші - проект налаштований для обраного типу програми. Клацання по кнопці Xenocode Application - Postbuild створить захищену версію програми. Швидше не буває.
Вікно вибору збірок захищається додатки
При бажанні можна виконати більш тонке налаштування програми. Для цього в Postbuild є чотири додаткові вкладки - для налаштування параметрів обфускаціі, оптимізації, віртуалізації і збірки додатку.
Параметри обфускаціі коду
Postbuild дозволяє оптимізувати код програми. Можлива оптимізація як по продуктивності, так і за обсягом використовуваної пам'яті. Postbuild здатний розпізнавати і видаляти невикористовувані ділянки коду - досить вказати Postbuild можливі точки входу в додаток. Postbuild може навіть видаляти невикористану інформацію з метаданих, щоб зменшити їх розмір. Крім цього, розмір метаданих може бути скорочений за рахунок заміни імен символів коду більш короткими іменами. Скажімо, ім'я клас MyClass може бути замінено ім'ям "a".
Параметри оптимізації коду
У Postbuild підтримується режим так званої инкрементной обфускаціі. В цьому режимі обфускація зберігає посилання між збірками в коректному вигляді. Обфускація всіх імен здійснюється на базі загального пароля, так що однакові імена в різних збірках трансформуються одноманітно і зв'язку між збірками зберігаються.
На вкладці Virtualize задаються параметри віртуалізації додатки. У вас є можливість задати метадані готового додатка (назва, опис, номер версії), параметри візуалізації додатки при запуску (картинку для сплеш-скрін під час запуску програми, області прозорості), а також параметри віртуалізації. Набір параметрів, до речі, досить великий. Можна вибрати бажану поведінку дочірніх процесів (запускати їх у віртуальному середовищі або в хостовой операційній системі), дати команду автоматично видаляти пісочницю після завершення роботи програми, заборонити додатком вносити зміни в віртуальне середовище і так далі.
Налаштування процесу віртуалізації
Остання вкладка, Output, дозволяє задати параметри генерації додатки. Прапорами можна вказати об'єднання всіх збірок додатки в один файл, включення в додаток діагностичної інформації, перетворення керованого коду в машинний (native) код. Можна задати ім'я результуючого MSI-файлу, вибрати директорію, в яку буде поміщений результуючий файл.
Налаштування генерації коду
Залишається додати, що на вкладці Application є цікава можливість - вбудувати в код програми так звані водяні знаки. Інформація про користувача (ім'я, серійний номер) може бути вбудована в додаток у видимому вигляді (відображатися в діалозі "Про програму" або на сплеш-скрині), а також в бінарний код збірки. Хакери зламали і виклали ваше додаток в Інтернет? За водяним знакам ви зможете відстежити користувача, якому був проданий зламаний згодом екземпляр додатку.
Інтеграція з Visual Studio
Postbuild інтегрується в Visual Studio, так що процес обробки збірки засобами Postbuild легко автоматизувати.
Файл проекту Postbuild задається в настройках плагіна. За замовчуванням всі збірки проекту автоматично обробляються Postbuild після кожної успішної компіляції. Postbuild оновлює вхідні збірки (копіює їх з директорії bin в розташування, вказане в файлі проекту), потім збірки обробляються Postbuild і результуючі файли записуються в автоматично створювану в директорії проекту піддиректорію Xenocode. Всю цю автоматизацію при бажанні можна відключити в налаштуваннях плагіна.
Налаштування плагіна Postbuild в Visual Studio
Postbuild надає можливості налагодження обфусцірованной збірки. Наприклад, він здатний перетворити інформацію про стек викликів з обфусцірованного виду в нормальний.
Postbuild дозволяє задавати настройки процесу обфускаціі прямо в тексті програми. Робиться це шляхом використання спеціальних атрибутів, оголошених в збірці Xenocode.Client.dll. За допомогою атрибутів можна задавати параметри перейменування об'єктів, вибирати пресети, контролювати обфускація потоку управління, включати придушення дизассемблирования і так далі.
Postbuild підтримує роботу з командного рядка. Тому процес захисту програми можна легко включити в процес автоматичного складання.
Postbuild for .NET. За та проти
Postbuild for .NET - дуже цікавий продукт. Можливість спільного використання обфускаціі, оптимізації та віртуалізації додатків .NET відкриває для розробників широкі можливості. Здатність надійно захистити код додатки .NET від сторонніх очей, простота установки і поширення додатків, зручний інтерфейс, повноцінна інтеграція з Visual Studio - все це, на мій погляд, робить Postbuild for .NET одним з кращих засобів захисту додатків .NET.
Що стосується недоліків, то я б відзначив відсутність менеджера ліцензій. Використовуючи один тільки Postbuild for .NET, повноцінно захистити додаток буде все-таки важкувато.