ЛАБОРАТОРНАЯ РАБОТА №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.
Ответы на
контрольные
вопросы. |