Розробка програми захисту від несанкціонованого копіювання, шляхом прив’язки до системного реєстру

 

Розробку програми будемо проводити у порядку виконання дій, згідно розробленого алгоритму.

1. Iніціалізація модулю захисту.

При першому запуску програми виконується ініціалізація модулю захисту.

2. Cтворення змінної типу Registry – var reg.

Клас Registry надає набір стандартних кореневих розділів, що знаходяться в реєстрі комп’ютерів, що працюють під управлінням Windows. Реєстр є засобом зберігання відомостей про додатки, користувачів і стандартних системних параметрах. Наприклад, додатки використовують реєстр для зберігання відомостей, які необхідно зберегти після закриття програми і до яких необхідно отримувати доступ при перезавантаженні програми. Наприклад, можна зберігати налаштування кольору, положення або розмір вікна. Для різних користувачів ці відомості можуть зберігатися в різних місцях реєстру.

Базові (кореневі) екземпляри RegistryKey, які показуються класом реєстру, створюють схему базового механізму зберігання в реєстрі вкладених розділів і значень. Всі розділи доступні тільки для читання, так як реєстр залежить від їх існування. Клас реєстру надає доступ до наступних розділів: CurrentUser (зберігає відомості про параметри користувача), LocalMachine (зберігає відомості про конфігурації для локального комп’ютера), ClassesRoot (зберігає відомості про класи та їх властивості), Users (зберігає відомості про стандартну конфігурацію користувача) та інші. [13]

 

 

3. Перевірка наявності певної гілки реєстру.

Відбувається перевірка гілки реєстру HKEY_CURRENT_USER\Smurf та її відкриття. Це виконується за допомогою поля CurrentUser та перезавантаження OpenSubKey.

Поле CurrentUser включає в себе дані про поточні параметри користувачів. Це поле зчитує кореневий розділ реєстру Windows HKEY_CURRENT_USER. Перезавантаження OpenSubKey відкриває даний розділ реєстру. [13]

Після цих дій частина коду програми має вигляд:

var reg = Registry.CurrentUser.OpenSubKey("Smurf", true);

У разі відсутності даної гілки вона створюється за допомогою поля CurrentUser та перезавантаження CreateSubKey, задача якого є створення нового розділу, або відкриття вже існуючого.

Отже, частина коду створення розділу має вигляд:

reg = Registry.CurrentUser.CreateSubKey("Smurf");

4. Отримання списку змінних.

Далі, після того як у системному реєстрі був знайдений або створений ключ відбувається створення змінної var values та отримується список всіх змінних, які записані в даному ключі. Ця дія виконується за допомогою функції GetValueNames, яка повертає масив всіх змінних, які включають в себе список всіх імен, пов’язаних з даним ключем;

5. Перевірка наявності змінної.

Коли список змінних, які записані в даному ключі отриманий, виконується перевірка наявності змінної у цьому спискові. Для виконання даної перевірки створюється змінна під назвою data, в яку пізніше будуть зчитуватись значення. Для початку задається початкове значення цієї змінної, яке дорівнює нулю:

Int64 data = 0;

Далі виконується сама перевірка. В даному випадку перевіряється, чи є в списку значень, створеному раніше змінна, яка називається Smurf. Якщо така змінна є, то її значення зчитується в змінну data, переводячись попередньо в тип Int64. Зчитування в змінну data відбувається за допомогою метода GetValue.

Метод GetValue повертає значення, що пов’язане із заданим ім’ям, в заданому розділі реєстру. Якщо ім’я не знайдене в заданому розділі, повертає надане значення по замовчуванню, або null, якщо заданий розділ не існує.

Коли виконується дана умова, то відбувається дія, яка має вигляд:

data = Convert.ToInt64(reg.GetValue("Smurf"));

Статичні методи класу Convert використовуються для підтримки перетворення в базовий тип даних та з нього в .Net Framework;

6. Перевірка значення зчитаної змінної.

Останнім кроком є перевірка значення зчитаної змінної. У тому випадку, коли значення дорівнює – «888», то на екран виводиться повідомлення – «Програма може бути запущена» і захищувана програма продовжить виконання у звичному режимі. Якщо ж значення ключа не дорівнює даному – «888», то виводиться повідомлення – «Неможливо запустити програму, так як вона не зареєстрована на даному персональному комп’ютері», після чого програма завершує свою роботу.

Повідомлення виводиться за допомогою спеціальної функції C# – MessageBox.Show, яка відображає вікно із заданим текстом.

Повідомлення про те, що програма може бути запущена на комп’ютері має вигляд:

MessageBox.Show("Програма може бути запущена");

Повідомлення про неможливість запуску програми таке:

MessageBox.Show("Неможливо запустити програму, так як вона не зареєстрована на даному персональному комп’ютері");

 

У тому випадку, коли програма не зможе бути запущеною викликається функція Environment.Exit(-1), яка дозволяє закривати дану програму.

Клас Environment використовується для отримання відомостей про аргументи командної строки, коді виходу, значення змінних середовища, вмісту стеку виклику, часу, який пройшов з моменту останнього завантаження, та версії середовища CLR. [13]

Після того як виводиться повідомлення про те, що програма може бути запущена, то викликається стандартний метод мови програмування C# – Application.Run(new Form1()), який дозволяє відкрити програму, яка захищається.

Лістинг коду захисту представлений у Додатку А.