- •1 Аналіз систем захисту програмного забезпечення
- •1.1 Огляд існуючих систем захисту пз
- •1.2 Методи захисту програмного забезпечення від несанкціонованого доступу
- •1.3 Методи захисту комп’ютера від несанкціонованого доступу
- •2 Теоретичні підходи до побудови.
- •2.1 Метод створення програми перевірки доступу за методом Тюрінга
- •2.2 Розробка структури програми
- •2.3 Вибір мови програмування
- •3 Практична реалізація
- •3.1 Розробка програми
- •3.2 Інструкція по роботі з програмою
- •3.3 Тестування програми
- •Список використаних джерел:
- •Додатки
2.3 Вибір мови програмування
В данний час розроблено багато високорівневих мов програмування, серед який я виділив для себе мову C#. Для реалізації даного проекту було обрано об’єктно-орієнтовану мову програмування С#.
C # розроблявся як мова програмування прикладного рівня для CLR і, як такий, залежить, насамперед, від можливостей самої CLR. Це стосується, перш за все, системи типів C #, яка відображає BCL. Присутність або відсутність тих чи інших виразних особливостей мови диктується тим, чи може конкретна мовна особливість бути транслювали у відповідні конструкції CLR. Так, з розвитком CLR від версії 1.1 до 2.0 значно збагатився й сам C #; подібної взаємодії слід чекати і надалі. (Проте ця закономірність була порушена з виходом C # 3.0, що представляє собою розширення мови, не спираються на розширення платформи. NET.) CLR надає C #, як і всім іншим. NET-орієнтованим мовам, багато можливостей, яких позбавлені «класичні» мови програмування. Наприклад, збірка сміття не реалізована в самому C #, а проводиться CLR для програм, написаних на C # точно так само, як це робиться для програм на VB.NET, J # та інших. Синтаксис C # дуже виразний, але простий у вивченні. Усі, хто знайомий з мовами C, C + + або Java з легкістю впізнають синтаксис з фігурними дужками, характерний для мови C #. Розробники, які знають будь-який з цих мов, як правило, зможуть домогтися ефективної роботи з мовою C # за дуже короткий час. Синтаксис C # робить простіше те, що було складно в C + +, і забезпечує потужні можливості, такі як типи значень Nullable, перерахування, делегати, лямбда-вирази і прямий доступ до пам'яті, чого немає в Java. C # підтримує універсальні методи і типи, забезпечуючи більш високий рівень безпеки і продуктивності, а також ітератори, що дозволяють при реалізації колекцій класів визначати власну поведінку ітерації, яке може легко використовуватися в клієнтському коді. В C # 3.0 вирази LINQ (Language-Integrated Query) роблять строго-типізований запит першокласної конструкцією мови. Як об'єктно-орієнтована мова, C # підтримує поняття інкапсуляції, успадкування та поліморфізму. Всі змінні і методи, включаючи метод Main - точку входу додатки - інкапсулюються в визначення класів. Клас може успадковувати безпосередньо з одного родового класу, але може реалізовувати будь-яке число інтерфейсів. Для методів, які перевизначають віртуальні методи в батьківському класі, необхідно ключове слово override, щоб виключити випадкове повторне визначення. У мові C # структура схожа на полегшений клас: це тип, який розподіляється по стопках, реалізовує інтерфейси, але не підтримує спадкування.
3 Практична реалізація
3.1 Розробка програми
Створення програми починається власне з створення форми (рис.1.1)

Рисунок 1.1 – Створення форми капчі
Форма має 5 елементів: безпосередньо сама форма капчі, PictureBox де власне знаходиться капча, текстове поле для вводу символівTextBox1, кнопки Не Бачу Символів і ОК.
Для Роботи програми підключені наступні бібліотеки:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
Далі конструктор форми Form1:
У коді проекту в клас Form1 додамо рядок:
private string text = String.Empty; button1 буде відповідати за оновлення картинки, а button2 за перевірку вводу. Тепер потрібно написати функцію генерації зображення з випадковим текстом. Це зможе зробити наступний код:
private Bitmap CreateImage (int Width, int Height)
{
Random rnd = new Random ();
Створимо зображення:
Bitmap result = new Bitmap (Width, Height);
Обчислимо позицію тексту :
int Xpos = rnd.Next (0, Width - 50); int Ypos = rnd.Next (15, Height - 15);
Додамо різні кольори :
Brush [] colors = {Brushes.Black,Brushes.Red,Brushes.RoyalBlue, Brushes.Green};
Вкажемо де малювати:
Graphics g = Graphics.FromImage ((Image) result);
Нехай фон картинки буде сірим:
g.Clear (Color.Gray);
Згенеруємо текст text = String.Empty; string ALF = "1234567890QWERTYUIOPASDFGHJKLZXCVBNM";
for (int i = 0; i <5; + + i) text + = ALF [rnd.Next (ALF.Length)];
Намалюємо сгеніріруемий текст:
g.DrawString (text, new Font ("Arial", 15),colors [rnd.Next (colors.Length)],new PointF (Xpos, Ypos));
Додамо трохи перешкод.
Лінії з кутів: g.DrawLine (Pens.Black, new Point (0, 0),new Point (Width - 1, Height - 1));g.DrawLine (Pens.Black,new Point (0, Height - 1),new Point (Width - 1, 0)); Білі точки:
for (int i = 0; i <Width; + + i)for (int j = 0; j <Height; + + j)if (rnd.Next ()% 20 == 0)result.SetPixel (i, j, Color.White);
return result;
}
Викличемо дану функцію з події завантаження форми та події натискання на кнопку button1:
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image=this.CreateImage(pictureBox1.Width, pictureBox1.Height);
}
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image=this.CreateImage(pictureBox1.Width, pictureBox1.Height);
}
На подію кліка по другій кнопки повісимо наступний код:
private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text == this.text)
MessageBox.Show("Верно!");
else
MessageBox.Show("Ошибка!");
}
