Символьна обфускація включає в себе обфускацію імен класів, назв методів, параметрів і т. п. Дані обфускатори застосовують такі методи:
· Перейменування методів, змінних і т.д. в набір безглуздих символів Наприклад: метод класу GetPassword(), після обфускаціі буде мати ім'я KJHS92DSLKaf(). Проте існує одна проблема - багато декомпіляторів, зустрічаючи на своєму шляху подібного роду імена замінюють їх на більш читабельні (method_1, method_2), тим самим зводячи всю роботу обфускатора нанівець.
· Перейменуванняв коротші імена. Проходячи по всіх класах, методах, параметрах, обфускатори замінюють імена на їх порядкові номери. Наприклад, метод - GetConnectionString(), після обфускаціїназивається 0(). Подібні обфускатори можна також використовувати як оптимізуючі компілятори. Також подібне рішення добре тим, що існує ймовірність того, що одне і те ж ім'я буде використано для іменування класу, методів класу (наприклад відрізняються тільки типом повертається значення). Це дозволить також заблокувати роботу окремих дизассемблерів.
· Використання для імен змінних нечитабельних символів. Частина обфускаторов вставляють в імена нечитабельні символи, наприклад символи японської мови. Не всі декомпілятори адекватно обробляють такі символи. Деякі замінюють імена з такими символами на більш зрозумілі, деякі проставляють замість незрозумілих символів їх код, деякі просто відмовляються працювати з даними символами.
· Використання ключових слів мов програмування. Цей вид символьної обфускаціі дозволить захиститися від самих примітивних декомпіляторов, які, побачивши в якості імені зарезервоване слово вважають, що файл не правильний і відмовляються з ним працювати.
· Використання імен, які змінюють зміст. Цей тип обфускаціівикористовує психологічний чинник. Припустимо, був клас SecurityInformation з методом GetInformation, а став Car, з методом Wash.Звичайно, це може заплутати голову недосвідченому зломщикові, але процесу декомпіляції ніяк не зашкодить.
До більш складних обфускаторів, що дають більше гарантій, що Ваш код не зможуть зрозуміти зловмисники, відносяться обфускатори другого порядку. Вони застосовують методи обфускаціі даних і графа потоку керування.
Обфускація даних складається з таких методів, як:
· Зміна місця розташування даних - об'єднання декількох сутностей в одну або навпаки поділ однієї сутності на кілька. Наприклад: два рядки можуть бути об'єднані в масив рядків.
· Кодуючі перетворення. Деякі дані кодуються і в процесі виконання або завантаження програми декодуються.
· Заміна статичних членів на виклики методів. Деякі статичні члени замінюються на виклики методів.
· Додавання невикористовуваних даних. На основі невикористовуваних даних надалі формують помилкові умови.
· Зміна способу зберігання даних. Деякі відкриті члени робляться закритими і навпаки.
· Виконання фіналізації (finalization). Для певних полів і методів класу може бути виконана фіналізація (Finalization), тобто дані можуть бути захищені від перевизначення у класах нащадків, створених від класу, якому належить даний член. Даний процес зменшує час виконання програми.
Найбільш складною в плані реалізації, але найбільш стійкою до спроб злому є обфускація графа потоку керування. На сьогоднішній день існує лише кілька подібних обфускаторів. Обфускатори даного типу застосовують наступні методи:
· Перетворення обчислень. Даний метод полягає у вставці в алгоритми помилкових умов.
· Видалення або додавання абстракцій коду. Видалення абстракцій коду дозволяє крім рішення задачі обфускаціі також оптимізувати роботу програми. Наприклад: обфускатор може замінити виклик який-небудь функції безпосередньо тілом функції, або навпаки одну функцію замінити на кілька маленьких функцій.
· Перемішування випадковим чином лінійних ділянок.
3. Захист від дослідження ПЗ створеного за допомогою технології .NET
· Обфускація коду програми. Цей метод є найбільш простим і поширеним.
· Компіляція збірки у машинний (native)код при його встановленні на комп'ютер користувача. Зокрема, це можна виконати з допомогою утиліти ngen, яка поставляється у комплекті із .NETFramework.Але, цей метод може призвести до деяких непередбачуваних наслідків, наприклад, при встановленні нової версії .NETFramework, програма, встановлена таким чином, може припинити працювати.
· Використання оптимізуючих компіляторів.
· Розроблення критичних частин програмного коду на ManagedC++, що дещо ускладнить процес декомпіляції.
· Розроблення критичних частин прогрманого коду на С++, з компіляцією його в машинний (native)код у формі динамічних бібліотек (dll) та їх подальше використання в програмі на .NETFramework. Для захисту коду отриманої dllможна використовувати ты ж сами методи, що ы для звичаних програм.
· Виконання і зберігання критичних модулів програми на зовнішньому носії (наприклад, електроний ключ) чи в мережі (наприклад, інтернет), що унеможливлює доступ користувача до програмного коду цього модуля. Недоліком цього методу є необхідність використання деякого апаратного засобу або наявність підключення до мережі.
Висновки
В курсовій роботі були розглянуті проблеми захисту програмного забезпечення, засоби і методи унеможливлення несанкціонованого дослідження програмного коду. Також була розглянута технологія .NETFramework, та проблеми захисту ПЗ створеного на її основі. Технологія .NETFramework дає розробникам багато зручних і корисних засобів, які дозволяють швидко створювати і розповсюджувати (за рахунок незалежності від апартної платформи і використання MSIL) якісні програмні продукти.Але вона має суттєвий недолік - програми на її основі дуже легко піддаються дослідженню за допомогою декомпіляторів, таких як .NETReflector, роботу якого було розглянуто в курсовій роботі. Найбільш простим і найменш трудомістким способом захисту таких програм, є використання обфускаторів. Нажаль, на даний час, не існує безкоштовних обфускаторів .NET коду, які забезпечують достатньо високий рівень захисту. Проте існує досить багато платних обфускаторів, які використовують одночасно і символьну обфускацію, і заплутування програмного коду і заплутування потоку управління. Зокрема всі ці функції має DotfuscatorProfessionalEdition безкоштовна версія якого постачається разом із середою розроблення VisualStudio.
Страницы: 1, 2, 3