You are on page 1of 19

2

КП.ХПФК. 00481 - 05 81 01

Зміст
С.

1 Вступ 3
2 Технічні характеристики 5
2.1 Постановка задачі 5
2.2 Визначення структури вхідних даних 6
2.3 Визначення структури вихідних даних 6
2.4 Вимоги до технічних засобів 6
2.5 Вибір мови програмування 7
2.6 Опис алгоритму рішення задачі 9
2.7 Виконання програми 10
Висновок 13
Список використаних джерел 14
Додаток А Схема алгоритму програми 15
Додаток Б Лістинг програми 16
3
КП.ХПФК. 00481 - 05 81 01

1 Вступ

Мова програмування Java зародилася в 1991р. в лабораторіях компанії Sun


Microsystems inc. Як не дивно, поштовхом для створення Java стала зовсім не
Internet. Головним мотивом була потреба в мові програмування, яка не залежала б
від платформи ( тобто від архітектури ) і яку можна було б використовувати для
створення програмного забезпечення, яке вбудовується в різноманітні побутові
електронні прилади, такі як мобільні засоби зв’язку, пристрої дистанційного
управління тощо. Розробка першої робочої версії зайняла 18 місяців і вона мала
назву «Oak», але 1995 р. проект був перейменований на «Java».
Період становлення Java співпав за часом з розквітом міжнародної
інформаційної служби World Wide Web. Ця обставина відіграла вирішальну роль в
майбутньому Java, оскільки Web теж вимагала переносних програм. Як наслідок,
були зміщені акценти в розробці Sun з побутової електроніки на програмування
для Internet.
Багатоплатформеність середовища Web висуває надзвичайно високі вимоги
до надійності програм. Як наслідок, при розробці Java приорітет був відданий
можливості створення стійких до помилок програм. Java звільняє програміста від
хвилювань з приводу багатьох поширених причин, які викликають помилки
програмування. Як вже згадувалося, Java є строго типіованою мовою
програмування. Ще виконуюча система Java бере на себе «прибирання сміття»,
тобто автоматично звільняє пам’ять, яка була розподілена динамічно. Звичайно,
це дещо знижує ефективність коду, але запобігає типових помилок, коли
програміст забуває звільнити виділену пам’ять, або, навпаки, звільняє пам’ять, яка
ще використовується. Java підтримує об’єктно-орієнтовану обробку виключних
ситуацій подібно до С++. Але на відміну від С++ в Java обробка виключних
ситуацій є обов’язкувою. Тобто неможливо скомпілювати програму, яка відкриває
файл, не обробивши можливі помилки типу «файл не знайдено», які виникають
4
КП.ХПФК. 00481 - 05 81 01

при цьому. Добре написана Java-програма може сама обробляти всі помилки часу
виконання.
Java розроблялася з орієнтацією на вимоги до створення інтерактивних
програм, які працюють з мережею. З цією метою Java підтримує багатопоточне
програмування, яке дозволяє легко розробляти програми, що викинують багато
процесів одночасно. Виконання Java-програми засновано на елгантному, але в той
самий час високоорганізованому рішенні багатопроцесової синхронізації, яке
дозволяє вам створювати високоефективні інтерактивні системи [2].
5
КП.ХПФК. 00481 - 05 81 01

2 Технічні характеристики
2.1 Постановка задачі

Мій курсовий проект «Утиліта захисту виконавчих файлів від запуску»


Програма дозволяє захистити будь-який файл від несанкціонованого виконання
(відкриття).
Алгоритм програми захисту виконуваних файлів від несанкціонованого
виконання складається з 2-х основних частин: захист (блокування) і
розблокування..
Інтерфейс програми містить:
- Поле для вибору файлу.
- Поле для введення пароля.
- Кнопка «Заблокувати».
- Кнопка «Розблокувати».
Алгоритм блокування:
- Користувач вибирає файл, який треба заблокувати.
- Вводить пароль блокування.
- Натискає кнопку «Заблокувати».
- Програма, використовуючи встановлений в системі архіватор
WinRAR архівує файл із зазначеним користувачем паролем. После цього вихідний
файл видаляється.
Алгоритм розблокування:
- Користувач вибирає файл, який треба розблокувати.
- Вводить пароль розблокування.
- Натискає кнопку «Розблокувати».
- Програма, використовуючи встановлений в системі архіватор
WinRAR розархівуйте вказаний файл з введенням користувачем паролем. Після
цього заблокований архівний файл видаляється.
6
КП.ХПФК. 00481 - 05 81 01

2.2 Визначення структури вхідних даних

Таблиця 2.1- Вхідні дані


№ Ідентифікатор Тип Діапозон Пояснення
1 directory Текстові
string Шлях до файла
символи
2 OpenFile Текстові Шлях до файла з назвою
string
символи файлу
3 Passw Текстові
string пароль
символи

2.3 Визначення структури вихідних даних

Таблиця 2.2- Вихідні дані


№ Змінна Тип Діапозон Пояснення
1 BlockedFile string Текстові Результат шифрування
символи файлу
2 OriginalFile string Текстові Результат дешифрування
символи файлу

2.4 Визначення вимог до технічних засобів

Програма була розроблена на комп’ютері такої конфігурації:


- Intel Core I5-5200U 2.20 GHz;
- пам’ять 8 Гбайт;
- жорсткий диск 2 Тбайт;
- кольоровий монітор;
7
КП.ХПФК. 00481 - 05 81 01

- операційна система Windows 10.


Для нормального функціонування програми необхідний наступний
мінімальний набір технічних і програмних засобів :
- пк з операционной системой Windows 7 64 - Біт і вище;
- на якому встановлена Java 8 Update 231 і вище;
- встановлений архиватор WinRaR 5.0 і вище.

2.5 Вибір мови програмування

Програма “ Утиліта захисту виконавчих файлів від запуску ” написана на мові


високого рівня Delphi.
Delphi - це продукт Borland International для швидкого створення додатків.
Процес створення інтерфейсу майбутньої програми нагадує забаву з ігровим
комп'ютерним конструктором. Тому RAD-середовища ще називають візуальними
середовищами розробки: якими ми бачимо робітники і діалогові вікна програми при
проектуванні, такими вони і будуть, коли програма запрацює.
Високопродуктивний інструмент візуального побудови додатків включає в
себе справжній компілятор коду і надає засоби візуального програмування,
наскільки схожі на ті, що можна виявити в Microsoft Visual Basic (вона не є RAD-
системою) або в інших інструментах візуального проектування. В основі Delphi
лежить мова Object Pascal, який є розширенням об'єктно-орієнтованої мови Pascal. В
Delphi також входять локальний SQL-сервер, генератори звітів, бібліотеки
візуальних компонентів, та інше, необхідне для того, щоб відчувати себе абсолютно
впевненим при професійній розробці інформаційних систем або просто програм для
Windows-середовища.
Насамперед Delphi призначений для професійних розробників, бажаючих дуже
швидко розробляти додатки в архітектурі клієнт-сервер. Delphi виробляє невеликі за
розмірами високоефективні виконувані модулі (.exe і .dll), тому в Delphi мають бути,
перш за все, зацікавлені ті, хто розробляє продукти на продаж. З іншого боку
8
КП.ХПФК. 00481 - 05 81 01

невеликі за розмірами і швидко виконувані модулі означають, що вимоги до


клієнтських робочих місцях істотно знижуються - це має важливе значення і для
кінцевих користувачів.
Переваги Delphi порівняно з аналогічними програмними продуктами.
- Швидкість розробки додатку (RAD);
- Висока продуктивність розробленого додатка;
- Низькі вимоги розробленого додатка до ресурсів комп'ютера;
- Можливість розробки нових компонентів та інструментів власними коштами
Delphi (існуючі компоненти і інструменти доступні у вихідних кодах);
- Вдала проробка ієрархії об'єктів.
Система програмування Delphi розрахована на програмування різних додатків
і надає велику кількість компонентів для цього. До того ж роботодавців цікавить,
насамперед, швидкість і якість створення програм, а ці характеристики може
забезпечити тільки середу візуального проектування, здатна взяти на себе значні
обсяги рутинної роботи по підготовці додатків, а також узгодити діяльність групи
постановників, кодировщиков, тестерів і технічних письменників . Можливості
Delphi повністю відповідають подібним вимогам і підходять для створення систем
будь-якої складності [2-3].
Основним конкурентом Borland Delphi 7 є її рідний брат - RAD-середу Borland
C ++ Builder, технологія роботи з якої повністю збігається з технологією, прийнятою
в Delphi 7. Тільки в Delphi програмний код пишеться на мові програмування
Паскаль, точніше на його об'єктно-орієнтованої версії ObjectPascal , а не мовою C +
+.
Для того щоб обгрунтувати, чому наш вибір зупинився на Borland Delphi 7,
достатньо просто перерахувати деякі недоліки мови С ++ порівняно з ObjectPascal:
- Треба робити багато ініціалізації (реєструвати клас вікна, організовувати
цикл обробки повідомлень, створювати віконну функцію, піктограму та інше ...) і
частково бути системним програмістом. На Delphi-же системне програмування вже
9
КП.ХПФК. 00481 - 05 81 01

вбудовано і ініціалізація працює за замовчуванням, тому програміст головний упор


робить на своїх алгоритмах, а не на організації допоміжних робіт.
- Значно більша, порівняно з Object Pascal, складність мови, навіть,
незважаючи на компактність коду, виникають складнощі в його сприйнятті.
- Одна особливість, на мій погляд, мови С ++ дуже псує цю мову - він
чутливий до регістру символів, тобто змінна A і змінна a - це різні змінні.
В Delphi класи (об'єкти) можуть розташовуватися тільки в динамічної пам'яті,
а в C ++ в будь якій пам'яті (статична, стек, динамічна). Це додає безпеки
програмування в Delphi [1,3].

2.6 Опис алгоритму рішення задачі

На початку програми імпортуємо необхідні бібліотеки:


- import java.awt.*;
- import java.awt.event.*;
- import java.io.*;
- import javax.swing.*;
- import java.util.concurrent.TimeUnit;
Далі - обявляем основний клас ProtectFile, в ньому - панель (основне вікно
програми) - panel (class - JPanel). На panel розміщуємо поля і кнопки:
- поле label (class JLabel) - в нього записуємо ім'я обраного файлу;
- поле label3 (class JLabel) - Додаткове невидиме поле для зберігання
шляху до вибраного файлу- поле label2 (class JLabel) - метка для поля с паролем;
- поле password (class JPasswordField) - поле для введення пароля (поле
password має особливість - всі хто водиться в ньому символи виводяться на екран у
вигляді символу підстановки - зірочка);
- кнопка button4 (class JButton) - кнопка "Розблокувати";
- кнопка button3 (class JButton) - кнопка "Блокувати";
- кнопка button (class JButton) - кнопка "Вибрати файл ".
10
КП.ХПФК. 00481 - 05 81 01

Процедура main викликає основний клас програми ProtectFile.До кожної з


кнопок додана певна процедура яку ця кнопка буде ініціювати.
Кнопка «Вибрати файл» ініціює процедуру fileopen (class JFileChooser) -
системна процедура вибору папки і файлу. Після вибору файлу за допомогою
методів getCurrentDirectory () виділяється шлях до файлу і методу getSelectedFile
() - ім'я файлу.
Після вибору файлу в залежності від розширення файлу розблокуються
відповідні кнопки (button3 або button4).Паралельно з цим інформація про вибрану
транслюється на консоль системного виведення. Клас JFileChooser зберігається
шлях до файлу в UNIX стилі, тому за допомогою методу replace в шляху до файлу
міняємо символ "\" на "/".
Кнопка «Блокувати» - при натисканні викликається програма RAR.EXE з
заданими параметрами. яка архівує файл із заданим паролем після чого якщо
архівація пройшла успішна, вихідний файл видаляється. Якщо процедура не
пройшла успішно, то вихідний файл не видаляється і відкривається спливаюче
вікно з інформацією про помилку.
Кнопка «Розблокувати» - викликає процедуру розархівації файлу
архіватором. Зчитується текстове поле з паролем і викликається програма
RAR.EXE, яка розархівуйте файл. У разі успішного розпакування архів
видаляється і замість нього з'являється вихідний файл. У тестових цілях в теж
місце, де знаходився файл, що відкривається записується Log роботи програми
RAR.EXE. Паралельно з цим в системну консоль записуються повідомлення про
виконувані програмою діях. У разі виникнення помилки відкривається спливаюче
вікно з інформацією про помилку.

2.7 Виконання програми


11
КП.ХПФК. 00481 - 05 81 01

Для створення програми використовувалася середовище розробки Netbeans


IDE 8.2 Java файл був скомпільований в jar файл, який розташований за адресою:
C: / users / admin / documents / Netbeans Project / Protect file. Файл називається:
ProtectFile.jar
Скомпільований JAR файл можна перемістити в будь-яку папку. Якщо на
комп'ютері встановлено Java то цей файл можна відразу запускати подвійним
кліком мишки. Після відкриття файлу відкривається основне вікно програми в
якому є три кнопки і поле для введення пароля.Перша кнопка «Вибрати файл».
Натискаючи на цю кнопку відкривається вікно в якому переміщаючись по
директоріях, можна вибрати файл. Для цього потрібно, подвійним кліком миші
вибрати потрібну директорію, і в ній вибрати файл.

Обмеження на обраний файл:


- В імені файлу не повинно бути пробілів.
- Файл не повинен бути прихований системою і призначений лише
для читання.
- Чи не захищений файл не повинен мати розширення RAR.
Після вибору файлу праворуч від кнопки «Вибрати файл» з'являється
повний шлях і назву обраного файлу.
Після того як файл був обраний необхідно у вікні для введення пароля
ввести пароль. Пароль повинен представляти із себе комбінація букв і цифр не
більше. 32 символів і не повинен містити пробіли та спеціальні символи. Пароль
можна не вводити, програма сама за замовчуванням поставити пароль - 1111.
Якщо був обраний незахищений файл - розблокується кнопка «Блокувати»,
кнопка «Разлокіровать» недоступна. Якщо був обраний захищений файл тоді,
кнопка «Блокувати» недоступна, а розблокується кнопка «Розблокувати».
Після вибору файлу в поле введення пароля можна ввести свій пароль і
натиснути на розблокувати кнопку («Блокувати» або «Розблокувати»).Якщо
12
КП.ХПФК. 00481 - 05 81 01

процедура блокування після натискання кнопки «Блокувати» пройшла успішно,


кнопка «Блокувати» стає недоступною і поле з ім'ям файлу очищається. Обидві
кнопки («Блокувати» і «Розблокувати») - недоступні.
Для того щоб розблокувати файл необхідно натиснути на кнопку «Вибрати
файл» і у спливаючому вікні вибрати захищений файл. Захищений файл має
розширення RAR тому при захисті файл шифрується за допомогою архіватора
RAR.
Після вибору заблокованого файлу у нас активується тільки кнопка
«Розблокувати». Натискаючи на цю кнопку ми розблокуємо файл і якщо
розблокування пройшла успішно, то заблокований файл видаляється і замість
нього створюється вихідний файл. Ніяких додаткових повідомлень програма не
видає.
У разі, якщо операція не пройшла успішно, програма видає спливаюче вікно
«Помилка», яке говорить нам про виникнення помилки. При цьому заблокований
файл не видаляється і розблокований файл не з'являється.
Блокування файлу відбувається шляхом його упаковки і шифрування з
введенням користувачем паролем. При введенні криптостійкого пароля
розшифрувати його не знаючи самого пароля - практично не можливо. Відповідно
і відкрити / запустити його - неможливо. Для коректної роботи програми
необхідно щоб в системі був встановлений архіватор WinRar Ver 5.0 і вище а
також Виконавча JavaRE.
.
13
КП.ХПФК. 00481 - 05 81 01

Висновок

В даному курсовому проекті розроблена програма утиліта захисту виконавчих


файлів від запуску.
В результаті розробки проекту я розширив свої знання про захист файлів
комп’ютера, та як з ним працювати за допомогою мови Delphi.
Також я здобув навички у написанні програм, а також дуже багато дізнався
про методи роботи з операційною системою за допомогою мови високого рівня
Java.
При написанні курсового проекту я також ознайомився з різноманітними
утилітами операційної системи, вивчив деякі навички системного програмування[4].
14
КП.ХПФК. 00481 - 05 81 01

Список використаних джерел

1. Програмування на мові Java [Електронний ресурс] – Режим доступу:


https://www.yakaboo.ua/ua/java-polnoe-rukovodstvo-tom-2.html#tab-attributes/ вільний
(09.12.19). – Назва з екрана. – Мова російська.
2. Java. Библиотека профессионала. Том 2. Основы [Електронний ресурс] –
Режим доступу: http://www.williamspublishing.com/Books/978-5-8459-1482-8.html/
вільний (08.12.19). – Назва з екрана. – Мова російська.
3.Основи програмування мовою Java [Електронний ресурс] – Режим
доступу:http://ami.lnu.edu.ua/wpcontent/uploads/2013/10/Book_Ivankiv_Koputko_Java.
pdf/ вільний (07.12.19). – Назва з екрана. – Мова ураїнська.
4. Сафонов, М. С. Методичні вказівки до курсового проекту з дисципліни
«Операційні системи»[Текст] / М. С. Сафонов // Херсон, 2019.
15
КП.ХПФК. 00481 - 05 81 01

Додаток А
Схема алгоритму програми

Рисунок А.1 – Схема роботи програми


16
КП.ХПФК. 00481 - 05 81 01

Додаток Б
Лістинг програми

program FicLock;

uses
Forms,
Unit1 in 'Unit1.pas' {FormMain};

{$R *.res}

begin
Application.Initialize;
Application.Title := 'FicLock';
Application.CreateForm(TFormMain, FormMain);
Application.Run;
end.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, ExtCtrls, ComCtrls, Tabs, ShellCtrls,
CheckLst, ShellApi, Menus;

type
TFormMain = class(TForm)
OpenDialog: TOpenDialog;
ChkLock1: TCheckBox;
btBrowse: TBitBtn;
ListFiles: TCheckListBox;
StatusBar: TStatusBar;
PopupMenu: TPopupMenu;
Toutsupprimer: TMenuItem;
Supprimerlescochs1: TMenuItem;
Supprimerlesnoncochs1: TMenuItem;
procedure btBrowseClick(Sender: TObject);
procedure ListFilesClickCheck(Sender: TObject);
procedure FormCreate(Sender: TObject);
17
КП.ХПФК. 00481 - 05 81 01

procedure ChkLock1Click(Sender: TObject);


procedure ListFilesKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure TraiteMessage(var Msg: TMsg; var Handled: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ToutsupprimerClick(Sender: TObject);
private

procedure MajStatusBar;
public

end;

var
FormMain: TFormMain;
F: array of HFILE;
LblCoche: array[boolean] of string = ('Обрати всі файли', 'Зняти всі файли');

implementation

{$R *.dfm}

procedure TFormMain.btBrowseClick(Sender: TObject);


begin
if OpenDialog.Execute then
if ListFiles.Items.IndexOf(OpenDialog.FileName)=-1 then
ListFiles.Items.Add(OpenDialog.FileName);
MajStatusBar;
end;

procedure TFormMain.ListFilesClickCheck(Sender: TObject);


var X: Integer;
Tmp: OFSTRUCT;
begin
SetLength(F, 0);
for X:=0 to ListFiles.Count-1 do
if ListFiles.Checked[X] then
begin
SetLength(F, Length(F)+1);
try
F[X]:= OpenFile(PChar(ListFiles.Items.Strings[X]), Tmp, OF_READWRITE);
except
on E:Exception do
18
КП.ХПФК. 00481 - 05 81 01

begin
MessageDlg('Помилка блокування файлів '+ListFiles.Items.Strings[X], mtError,
[mbOK], 0);
ListFiles.Checked[X]:= False;
end;
end;
end
else
begin
try
if F[X] <> 0 then
CloseHandle(F[X]);
except
//
end;
end;
MajStatusBar;
end;

procedure TFormMain.TraiteMessage(var Msg: TMsg; var Handled: Boolean);


var
NombreDeFichiers, Size, i:integer;
NomDuFichierStr:string;
NomDuFichier:array[0..255] of char;
begin
if Msg.message=WM_DROPFILES then
begin
NombreDeFichiers:= DragQueryFile(Msg.wParam, $FFFFFFFF, NomDuFichier,
SizeOf(NomDuFichier));
for i:=0 to NombreDeFichiers-1 do
begin
Size:= DragQueryFile(Msg.wParam, i, NomDuFichier, SizeOf(NomDuFichier));
NomDuFichierStr:=NomDuFichier;
if ListFiles.Items.IndexOf(NomDuFichierStr)=-1 then
ListFiles.Items.Add(NomDuFichierstr);
end;
end;
end;

procedure TFormMain.FormCreate(Sender: TObject);


begin
FillChar(F, SizeOf(F), 0);
DragAcceptFiles(ListFiles.handle, True);
19
КП.ХПФК. 00481 - 05 81 01

Application.OnMessage := TraiteMessage;
if FileExists(ChangeFileExt(Application.ExeName, '.lst')) then
ListFiles.Items.LoadFromFile(ChangeFileExt(Application.ExeName, '.lst'));
end;

procedure TFormMain.ChkLock1Click(Sender: TObject);


var X: Integer;
begin
ChkLock1.Caption:= LblCoche[ChkLock1.Checked];
for X:=0 to ListFiles.Count-1 do
ListFiles.Checked[X]:= ChkLock1.Checked;
ListFilesClickCheck(nil);
end;

procedure TFormMain.ListFilesKeyDown(Sender: TObject; var Key: Word;


Shift: TShiftState);
begin
if (Key=46) and (ListFiles.ItemIndex>-1) then
begin
try
if ListFiles.Checked[ListFiles.ItemIndex] then
CloseHandle(F[ListFiles.ItemIndex]);
ListFiles.Items.Delete(ListFiles.ItemIndex);
MajStatusBar;
except
on E:Exception do MessageDlg('Помилка блокування файлів
'+ListFiles.Items[ListFiles.ItemIndex], mtError, [mbOK], 0);
end;
end;
end;

procedure TFormMain.MajStatusBar;
var X, Nb: Integer;
begin
Nb:= 0;
for X:=0 to ListFiles.Count-1 do
if ListFiles.Checked[X] then
Inc(Nb);
if ListFiles.Count>0 then
StatusBar.SimpleText:= ' '+IntToStr(Nb)+' файли заблоковані
'+IntToStr(ListFiles.Count)+' шт.'
else StatusBar.SimpleText:= StatusBar.Hint;
end;
20
КП.ХПФК. 00481 - 05 81 01

procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);


begin
SetLength(F, 0);
ListFiles.Items.SaveToFile(ChangeFileExt(Application.ExeName, '.lst'));
end;

procedure TFormMain.ToutsupprimerClick(Sender: TObject);


var X: Integer;
begin
ListFiles.Items.BeginUpdate;
for X:= ListFiles.Count-1 downto 0 do
begin
try
case TMenuItem(Sender).Tag of
1: begin // tout
if ListFiles.Checked[X] then
CloseHandle(F[X]);
ListFiles.Items.Delete(X);
end;
2: begin // coche
if ListFiles.Checked[X] then
begin
CloseHandle(F[X]);
ListFiles.Items.Delete(X);
end;
end;
3: begin // non coche
if not ListFiles.Checked[X] then
ListFiles.Items.Delete(X);
end;
end;
except
on E:Exception do MessageDlg('Помилка додавання файлу '+ListFiles.Items[X],
mtError, [mbOK], 0);
end;
end;
ListFiles.Items.EndUpdate;
MajStatusBar;
end;

end.

You might also like