ЛАБОРАТОРНАЯ РАБОТА №7

Тема работы: Программная организация защиты программных продуктов, с помощью пароля..

Цель работы: Научиться защищать свои программные продукты от несанкционированного использования. Изучить два способа организации и хранения пароля: в самой программе и в файле на диске.

Теоретическая часть:

Перед тем, как начать работать с пользователем, программа, защищенная от несанкционированного доступа запрашивает у него пароль - секретное слово (точнее, последовательность символов), которое известно только этому пользователю или создателю программы. Проблему представляет хранение паролей - ведь злоумышленник может добраться до хранящийся в общеизвестном месте паролей. Естественно, файл с паролями должен быть закрыт от чтения и, тем более, изменения посторонними. Но это не всегда так: в старых версиях Unix и в операционных системах без ограничения доступа к отдельным файлам всякий, кто может читать файловую систему от корня, может читать и файл с паролями. Против этого применяется шифрация паролей.

Пароль, используемый программой можно хранить в самой программе и в файле на жестком диске компьютера. Но пароль, хранимый уже в откомпилированной программе не подлежит изменению, тогда как пароль хранимый в файле легко изменяем. Но такой пароль доступен любому пользователю и его необходимо защищать – с помощью методов шифрования данных (преобразования символов пароля).

Самая простая парольная защита ПО – это создание и хранение пароля в откомпилированной программе. Значение этого пароля сравнивается с вводимым с клавиатуры. Если пароль введен правильно, то выполнение программы продолжается, если пароль введен не верно, то выполнение программы прекращается. В приведенной программе parol.c, рассматривается этот метод.

Также для создания парольной защиты используется программа, сравнивающая пароль вводимый с клавиатуры с хранимым в файле. В приведенном примере parolf.c, программа получает ASCII коды символов вводимых с клавиатуры и считанных из файла, суммирует их и при равенстве сумм кодов выдает сообщение о правильности введенного пароля и продолжает выполнение программы, в противном случае выполнение программы прекращается.

 

Ход работы:

1.             В компилятор ТС++ загрузите программу parol.c. В случае отсутствия файла на диске используйте текст приведенной ниже программы (наберите ее в текстовом редакторе компилятора ТС++, комментарии, данные в тексте программы не набирать!):

/*Программа запрашивающая пароль перед выполнением,

сравнивает строку содержащуюся в программе с введенной с клавиатуры*/

#include <stdio.h>

main()

{                          

char *par="parol"; /*Указатель на строковую константу пароль*/

char *par1[5]; /*Указатель на массив символов-строку*/

clrscr(); /*Очистка экрана*/

printf("Введите пароль: ");

scanf("%s",&par1); /*Чтение строки в переменную par1*/

if((strcmp(par,par1))==0) /*Сравнение 2-х строк*/

{

printf("Верный пароль!");

printf("\nИсполняется основная группа операторов, основной блок программы");

 /*Основная группа операторов, основной блок программы*/

delay(1000); /*Задержка выполнения программы*/

}

else

printf("Неверный пароль! Повторите ввод!\n");

delay(800); /*Задержка выполнения программы*/

exit();  /*Выход из программы*/

return 0;

}

2.             Проверьте работу этой программы: исполните ее пошагово (трассировка), запишите имена операторов и функций, используемых данной программой, дайте их краткую характеристику.

3.             Измените пароль, измените его длину. Проверьте длину пароля 1 символ, 10 символов, 20 символов (указывайте размер массива). Какие результаты выдает программа?

4.             Проверьте работу программы с символами русского алфавита.

5.             В компилятор ТС++ загрузите программу parolf.c. В случае отсутствия файла на диске используйте текст приведенной ниже программы (наберите ее в текстовом редакторе компилятора ТС++, комментарии, данные в тексте программы не набирать!):

/*Программа запроса пароля, открывает файл, считывает оттуда пароль и

сравнивет его с введенным с клавиатуры*/

#include <stdio.h>

#include <ctype.h>

int t, s, s1;

int f, e, i;

int ii,iii;

main()

{

clrscr(); /*Очистка экрана*/

printf("(C),inn,2001\n");

printf("Введите пароль: ");

s1=0;

while ((f=getchar())!='\n')/*Ввод символов пароля с клавиатуры*/

{

e=toascii(f);/*Преобразование символов в ASCII коды*/

s1=s1+e;/*Суммирование чисел кода*/

}

file_open();  /*Функция открытия файла и сравнения его содержимого

с введенным с клавиатуры*/

return 0;

}

 

file_open()  /*Функция открытия файла и сравнения его содержимого

с введенным с клавиатуры*/

{              

FILE *fp;  /*Указатель на файловую переменную*/

int b, c;

int d, s;

fp=fopen("c:\\parol.pwl", "r");

if ((fp=fopen("c:\\parol.pwl", "r"))==NULL)/*Открытие

файла на чтение*/

{

printf("Не могу открыть файл! Файл с паролем не существует!");

return 1;

}  

s=0;

while((b=fgetc(fp))!=EOF)/*Чтение символов из файла*/

{     

if (b!=EOF)

{

c=toascii(b);/*Преобразование символов в ASCII коды*/

s=s+c;

}

}

fclose(fp);  /*Закрытие файла*/

if (s==s1)/*Сравнение сумм кодов из введенного

с клавиатуры пароля и считанного из файла*/

{

printf("Пароль верный!"); }

else

{

printf("Пароль не верный! Попробуйте еще раз!");

delay(1000);

exit();

}

return 0;

}

6.             Выполните эту программу пошагово (трассировка), запишите имена операторов и функций, используемых данной программой, дайте их краткую характеристику. Какое диагностическое сообщение выдает данная программа и почему она не может быть исполнена (запишите это сообщение в отчет)?

7.             Создайте средствами операционной системы текстовой файл с именем: parol.pwl  и запишите в него пароль (латинские символы или цифры), сохраните файл.

8.             Запустите вновь эту программу на выполнение пошагово. Каков теперь результат выполнения программы (запишите сообщение выданное программой)?

9.             Измените пароль в файле сделайте пароль состоящий из цифр и букв, затем проверьте работу программы с паролем состоящем из символов русского алфавита. Как работает программа с разными паролями?

10.         Какой метод сравнения паролей используется в программах parol.c  и parolf.c ?

 

Контрольные вопросы:

1.                Назначение пароля, способы хранения пароля в системе (в программе и в файле на диске).

2.                Какие функции и операторы С++ используются для организации пароля (для 2-х методов организации пароля)?

 

Отчет должен содержать:

1.             Тему работы, цель работы.

2.             Распечатку программы.

3.             Описание хода выполнения работы и письменные ответы на задания хода работы.

4.             Ответы на контрольные вопросы.