Курсовая работа: Захист програмного забезпечення
3) забезпечення стійкості до цілеспрямованих і випадкових дестабілізуючих впливів;
4) ідентифікація користувача та/або середовища виконання;
5) захист від відновлення та/або вивчення вихідного програмного коду та алгоритмів функціонування ПЗ.
2. Методи захисту ПЗ від несанкціонованого доступу до програмного коду
2. 1 Класифікація засобів дослідження програмного коду
Всі засоби дослідження ПЗ можна розбити на 2 класи: статичні і динамічні. Перші оперують вихідним кодом програми як даними і будують її алгоритм без виконання, другі ж вивчають програму, інтерпретуючи її в реальному або віртуальному обчислювальному середовищі. Звідси випливає, що перші є більш універсальними в тому сенсі, що теоретично можуть отримати алгоритм всієї програми, в тому числі і тих блоків, які ніколи не отримають управління. Динамічні засоби можуть будувати алгоритм програми тільки на підставі конкретної її траси, отриманої при певних вхідних даних. Тому завдання отримання повного алгоритму програми в цьому випадку еквівалентно побудові вичерпного набору текстів для підтвердження правильності програми, що практично неможливо, і взагалі при динамічному дослідженні можна говорити тільки про побудову деякої частини алгоритму.
Два найбільш відомих типу програм, призначених для дослідження ПЗ, як раз і належать до різних класів: це відладчик (динамічний засіб) і дизасемблер (засіб статистичного дослідження). Якщо перший широко застосовується користувачем для налагодження власних програм і завдання побудови алгоритму для нього вторинні і реалізуються самим користувачем, то другий призначений виключно для їх вирішення і формує на виході асемблерний текст алгоритму.
Крім цих двох основних інструментів дослідження, можна використовувати:
· «Діскомпілятори», програми, які генерують з виконуваного коду програму на мові високого рівня;
· «Трасировщики», спочатку запам'ятовують кожну інструкцію, що проходить через процесор, а потім переводять набір інструкцій у форму, зручну для статичного дослідження, автоматично виділяючи цикли, підпрограми тощо;
· «Слідкуючі системи», запам'ятовують і аналізують трасу вже не інструкції, а інших характеристик, наприклад викликаних програмою переривань.
2.2 Методи захисту ПЗ від дослідження
Для захисту програм від дослідження необхідно застосовувати методи захисту від дослідження файлу з виконуваним кодом програми, що зберігається на зовнішньому носії, а також методи захисту виконуваного коду, який завантажується в оперативну пам'ять для виконання цієї програми.
У першому випадку захист може бути заснований на шифруванні конфіденційної частини програми, а в другому - на блокуванні доступу до виконуваного коду програми в оперативній пам'яті з боку відгадчика. Крім того, перед завершенням роботи програми повинен обнулятися весь її код в оперативній пам'яті. Це запобігає можливості несанкціонованого копіювання з оперативної пам'яті дешифрованого виконуваного коду після виконання програми.
Таким чином, захищувана від дослідження програма повинна включати наступні компоненти:
· ініціалізатор;
· зашифровану конфіденційну частину;
· деструктор (деіцініалізатор).
Ініціалізатор повинен забезпечувати виконання таких функцій:
· збереження параметрів операційного середовища функціонування (векторів переривань, вмісту регістрів процесора і т.д.);
· заборона всіх внутрішніх і зовнішніх переривань, обробка яких не може бути записана в програмі;
· завантаження в оперативну пам'ять і дешифрування коду конфіденційної частини програми;
· передача керування конфіденційної частини програми.
Конфіденційна частина програми призначена для виконання основних цільових функцій програми і захищається шифруванням для попередження внесення до неї програмної закладки.
Деструктор після виконання конфіденційної частини програми повинен виконати наступні дії:
· обнулення конфіденційного коду програми в оперативній пам'яті;
· відновлення параметрів операційної системи (векторів переривань, вмісту регістрів процесора і т.д.), які були встановлені до заборони неконтрольованих переривань;
· виконання операцій, які неможливо було виконати при забороні неконтрольованих переривань;
· звільнення всіх незадіяних ресурсів комп'ютера і завершення роботи програми.
Для більшої надійності ініціалізатор може бути частково зашифрованим, по мірі виконання може дешифрувати сам себе. Дешифруватися по мірі виконання може і конфіденційна частина програми. Таке дешифрування називається динамічним дешифруванням виконуваного коду. У цьому випадку чергові ділянки програм перед безпосереднім виконанням розшифровуються, а після виконання відразу знищуються.
Для підвищення ефективності захисту програм від дослідження необхідно внесення в програму додаткових функцій безпеки, спрямованих на захист від трасування. До таких функцій можна віднести: