Реферат: Защита от несанкционированного доступа - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Защита от несанкционированного доступа

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 414 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Защита данных от несанкционированного дос тупа 1 . Введение. Появив шиеся в начале 80-ых персонал ьные ЭВМ (ПЭВМ или ПК ) прочно вошли во все сферы человеческой деятельности . Вместе с ними у эксплуатирующих ПЭВМ организаци й и ведомств возникли и многочисленные пр облемы . Одна из них — защита информации . Согласно статистическ и м данным б олее 80% компаний и агентств несут финансовые убытки из-за нарушения безопасности данных. Проблема защиты информации предст авляет собой совокупность тесно связанных про блем в областях права , организации управления , разработки технических средств, программир ования и математики . Одна из центральных з адач проектирования систем защиты состоит в рациональном распределении имеющихся ресурсов. Характерная особенность использования ПЭВМ в нашей стране заключатся в том , что доступ к ним имеют многие пользо ватели . В связи с таким "многопользова тельским " режимом работы возникает целый набо р взаимосвязанных вопросов по защите информац ии , хранящейся в ПЭВМ. При создании и использовании ПЭВМ воз никает целый ряд взаимосвязанных теоретических и практических пробле м . В коммерческих и военных областях одной из основных является проблема защиты информации . Так мо жно выделить следующие объективные причины , о пределяющие важность проблемы защиты информации : · высокие темпы роста парка ПЭВМ , находящихся в эксплуатации ; · широкое применение ПЭВМ в самых различных сферах человеческой деятельности ; · высокая степень кон центрации информации в ПЭВМ ; · совершенствование спосо бов доступа пользователей к ресурсам ПЭВМ ; · усложнение вычислительн ого процесса в ПЭВМ. Усложнение методов и средств организации машинной обработки информации приводят к тому , что информация становится все более уязвимой . Э тому способствуют такие факторы , как постоянн о возрастающие объемы обрабатываемых данных , накопление и хранение данных в ограниченн ы х местах , постоянное расширение к руга пользователей , имеющих доступ как к р есурсам ПЭВМ , так и к программам и дан ным , хранящихся в них , усложнение режимов эксплуатации вычислительных систем и т . п . [ 6 ] 1. Постановка задачи 1. 1. Организационно-экономичес кая сущность задачи Защита информации в процессе ее сбора , хранения и обработки принимает исключительн о важное значение . Под защит ой информации принято принимать совокупность мероприятий , методов и средств , обеспечивающих решение следующих задач : · прове рка целост ности информации ; · исключение несанкционир ованного доступа к защищаемым программам и данным ; · исключение несанкционир ованного использования хранящихся в ПЭВМ прог рамм (т . е . защита программ от копирования ). Использование ПЭВМ в военной , комме рческой и других областях человеческой деятельности порождает ряд специфических проблем , которые необходимо решить для защиты обрабатываемой и храня щейся в ПЭВМ информации . Одной из них является классификация возможных каналов утечки информации . Под возмож н ым каналом утечки подразумеваетс я способ , позволяющий нарушителю получить дос туп к обрабатываемой и хранящейся в ПЭВМ информации [7] . Классификацию возможных каналов у течки информации исходя из типа средства , являющегося основным при получении информации по возможному каналу утечки . Следовательн о , можно выделить три типа средств : челове к , аппаратура , программа . Применительно к ПЭВМ группу каналов , в которых основным средст вом является человек , составляют следующие ос новные возможные каналы утечки : · хищен ие носителей информации (дискет ; лазерных , магнитных и магнитооптическ их дисков и т . д .); · чтение информации с экрана посторонним лицом (во время отобра жения информации на экране законным пользоват елем или при отсутствии законного пользовател я на рабочем месте ); · чтение информации и з оставленных без присмотра распечаток програ мм. В группе ка налов , в которых основным средством является аппаратура , можно выделить следующие основны е каналы утечки : · подключение к устро йствам ПЭВМ специально разработанных аппара тных средств, · обеспечивающих доступ к информации ; · использование специальн ых технических средств для перехвата электром агнитных излучений технических средств ПЭВМ. В группе ка налов , в которых основным средством является программа , можно выделит ь следующие о сновные каналы утечки : · несанкционированный дос туп программы к информации ; · расшифровка программой зашифрованной информации ; · копирование программой информации с носителей. В данной ра боте нас интересует последняя группа поэтому система защиты данных от несанкциониро ванного доступа должна обеспечивать выполнение следующих функций : · идентификация ресурсов , т . е . присвоение ресурсам идентификаторов — уникальных признаков , по которым в д альнейшем система производит аутентификацию ; · ауте нтификация защищаемых ресурсов , т . е . установление их подлинности на основе сравнения с эталонными идентификаторами ; · разграничение доступа пользователей по операциям над ресурсами (п рограммы , данные ), защищаемыми с помощью програ ммных средств ; · админи стрирование : · определение прав до ступа к защищаемым ресурсам, · установка системы з ащиты на ПЭВМ , · снятие системы защи ты с ПЭВМ, · контроль целостности и работоспособности систем защиты. Во время со здания системы защиты можно выделить следующи е осно вные принципы , которых следует п ридерживаться при проектировании : Простота механизма защиты . Этот принцип общеизвестен но не всегда глубоко осознает ся . Действительно , некоторые ошибки , не выявлен ные в ходе проектирования и эксплуатации , позволяют обнаружит ь неучтенные пути дост упа . Необходимо тщательное тестирование программн ого или аппаратного средства защиты , однако на практике такая проверка возможна только для простых и компактных схем. Отсутствие доступа . В механизме защиты в нормальных условиях доступ должен о тсутствовать , и для работы системы защиты необходимы условия , при которых доступ станов ится возможным . Кроме того , считается , что запрет доступа при отсутствии особых указаний обеспечивает высокую степень надежности меха низма защиты. Механизм защи ты можно не засекреч ивать , т . е . не имеет смысла засекречивать детали реализации систем защиты , предназначе нной для широкого пользования. Психологическая привлекательность . Система за щиты должна быть простой в эксплуатации [ 6 ] . Исходя из этого , требуется р азрабо тать систему защиты от несанкционированного д оступа , которая должна обеспечивать выполнение следующих функций : · аутентификация пользов ателя по паролю и по ключевой дискете ; · шифрование выбранных файлов ; · установка на прогр аммы защиты от несанкц ионированного запус ка ; · реакция на несанкц ионированный доступ. 1. 2. Входная информация Т . к . программа работает с файлами (шифрование , установка защит ), то входными данн ыми являются файлы различного типа для ши фрования и EXE - и COM -файлы для установки пароля и проверки по ключевой диск ете. 1. 3. Постоянная информация В качестве постоянной информации использу ются таблицы перестановок и константы генерат ора псевдослучайных чисел при шифровании файл ов (подробнее см . Описание программы . Криптогра фия ). 1 . 4. Выходная информация Выходные данные — зашифрованные файлы и защищенные программы. 2. Вычислительная система 2. 1. Операционная система Программа “Защита данных от НСД” разр абатывалась под управлением операционной системы MS - DOS 6.22 . Предполагается , что программа б удет работать без сбоев с MS - DOS и PC - DOS версий не ниже 5.0. Операционная система (ОС ) является неотъем лемой частью ПЭВМ . ОС обеспечивает управление всеми аппаратными компонентами и поддержку работы программ пользователя , предоставляя е м у возможность общего управления машиной . К основным достоинствам MS DOS относятся : · возможность организации многоуровневых каталогов ; · возможность подключения пользователем дополнительных драйверов внешних устройств ; · возможность работы со всеми пос ледовательными устройствами к ак с файлами ; · развитый командный язык ; · возможность запуска фоновых задач одновременно с диалоговой ра ботой пользователя и др. Важнейшей особенностью MS DOS является модульность , что позволяет при необходимости расширения функций системы модифицировать о тдельные ее модули . DOS состоит из следующих основных модулей : · базовая система ввода /вывода (BIOS); · блок начальной загр узки (Boot Record); · модуль расширения б азовой системы ввода /вывода (___BIO.COM); · модуль обрабо тк и прерываний (___DOS.COM); · командный процессор (COMMAND.COM); · утилиты DOS. Достоинством DOS является то , что любая программа может играть роль сервисной , поскольку для ее запуска достаточно указать лишь имя файла , в котором она содержится . Следова тел ьно , с точки зрения пользователя такие про граммы не отличаются от встроенных команд DOS. Программа может воспринимать параметры , задав аемые в командной строке . Храниться она мо жет в любом каталоге на любом диске . У казанное свойство делает ДОС открытой д ля расширения . Неизменное ядро системы составляют лишь BIOS и три основных моду - л я : BIO.COM, DOS.COM и COMMAND.COM Общий объем оперативной памяти , занимаемой этими модулями , составляет до 60 К байт . 2. 2. Технические средства реализации задачи Программа работает на компьютерах к лона IBM , н ачиная с процессора Intel 80-286. Требуемый объем оперативной памяти — минимум 1,5 Mb . Минимальные требования к видеоаппаратуре — карта VGA и 256 Kb видеопамяти. 2. 3. Программные средства реализации задачи Программа “Защита данных от несанкц ионированного доступа” разработана в среде Borland Pascal 7.0 ( Borland International © , 1992) . Пакет Borland Pascal 7.0 учитывает новейшие достижения в п рограммировании и практике создания программ и включает в себя три режима рабо ты : · обычный режим опера ционной системы MS - DOS · защищенный режим MS-DOS · режим Windows . Пакет Borland Pascal включает в себя как язык программирования — одно из расширений языка Паскаль для ПЭВМ клон ов IBM , так и среду , предназначенную для написания, отладки и запуска программ. Язык характеризуется расширенными возможност ями по сравнению со стандартом , хорошо раз витой библиотекой модулей , позволяющих использова ть возможности операционной системы , создавать оверлейные структуры , организовывать ввод-выв од , формировать графические изображения и т . д. Среда программирования позволяет создавать тексты программ , компилировать их , находить ошибки и оперативно их исправлять , компоноват ь программы из отдельных частей , включая с тандартные модули , отлаживать и вы полнять отлаженную программу . Пакет предоставляет по льзователю также большой объем справочной инф ормации. Версия 7.0 также , как и предыдущая , позво ляет применять объектно-ориентированное программирова ние , обладает встроенным ассемблером , имеет ин струментал ьное средство создания интерактивн ых программ — Turbo Vision , но появился ряд характерных особ енностей : · выделение цветом ра зличных элементов программы ; · ряд дополнительных расширений языка , таких , как использование отк рытых массивов , параметров-конста нт , типизирова нного адресного оператора @ и т . д .; · расширенные возможности объектно-ориентированного программирования ; · усовершенствованные про граммы Turbo Vision [ 2 ] . При написании программы также использовался интегрированный пакет Turbo Vision 2.0. При создании прикладной программы прог раммист большие усилия затрачивает на организ ацию ввода-вывода информации , т . е . на форми рование интерфейса . Они соизмеримы с усилиями , затрачиваемыми на программирование основного алгоритма программы , по которому ре ш ается конкретная задача . Работа , связанная с организацией ввода-вывода , повторяется от программы к программе , требует выполнения о днотипных операций , отвлекает внимание программис та от выполнения основной задачи. Прекрасным средством упрощения работы по ор ганизации ввода-вывода , его унификации с учетом требований к интерфейсу програм м является разработанный фирмой Borland International пакет Turbo Vision 2.0, представляющий объектно-ориентированную библиотеку средств форм ирования пользовательского интерфейс а . Кстати , интерфейс самого Borland Pascal 7.0 (и Turbo Pascal 7.0 тоже ) построен на стандартных объект ах Turbo Vision 2.0. Согласно этому рисунку програм му можно представить как совокупность двух частей : часть программы , обеспечивающая решение основной п рограммы , и часть , обеспечи вающая организацию ввода-вывода с внешних уст ройств (на внешние устройства ), — так назы ваемый интерфейс программы . В основную часть (из основной части ) информация может пере даваться двумя способами — непосредственная передача ин ф ормации (например , програм ма формирует какие-то данные и размещает и х в конкретном файле на магнитном диске ) и передача информации с помощью организаци и диалога (например , после формирования тех же данных происходит уточнение , в какой конкретно файл следу е т поместить сформированную информацию ). Способ , основанный н а организации диалога , является более универс альным и именно для организации диалога п редназначен в первую очередь пакет Turbo Vision . В программах , работающих в текстовом р ежиме , диалог обычно ор ганизуется с по мощью трех средств : меню , диалоговых окон и строк состояния [3] . Также при создании программы использовалс я ассемблер — машинно-ориентированный язык . Н а ассемблере написаны основные подпрограммы , где требуется высокое быстродействие и минима льный размер программного кода. 3. Алгоритм задачи Программу условно можно разделить на несколько частей : Инсталляционный модуль. Оболочка программы (написана с использова нием Turbo Vision 2.0 ). Криптографическая защита ( Borland Pascal 7.0) . Защита прогр амм паролем ( TASM 3.0) . Защита программ с помощью ключевой ди скеты ( TASM 3.0) . Блокировка винчестера ( TASM 3.0) . 3. 1 Инсталляционный модуль Модуль инсталляции будет устанавливать пр ограмму на винчестер в определенный каталог , а также осуществлять привяз ку програ ммы к уникальным идентификаторам BIOS . 3. 2. Оболочка программы При создании интерактивного пользовательског о интерфейса (оболочки программы ) использовались стандартные объекты пакета Turbo Vision . Горизонтальное двухуровневое ме ню , строка состояния , рабочее поле , диалоговые окна , инфор мационные сообщения и сообщения об ошибках , поддержка “мыши” — вот некоторые атрибуты оболочки. 3. 2. Криптографическая защита Перед описанием алгоритма следует ввести некоторые термины. Зашифрова нием данных называется проце сс преобразования открытых данных в зашифрова нные с помощью шифра , а расшифрованием дан ных — процесс преобразования закрытых данных в открытые с помощью шифра. Шифрованием называется процесс зашифрования или расшифрования данных. Дешифрованием будем называть процесс прео бразования закрытых данных в открытые при неизвестном ключе и , возможно , неизвестном а лгоритме. Криптографическая защита — это защита данных с помощью криптографического преобразов ания , под которым понимается прео бразован ие данных шифрованием. Уравнение зашифрования — соотношение , оп исывающее процесс образования зашифрованных данн ых из открытых данных в результате преобр азований , заданных алгоритмом криптографического преобразования. Уравнение расшифрования — соотн ошени е , описывающее процесс образования открытых д анных из зашифрованных данных в результате преобразований , заданных алгоритмом криптографичес кого преобразования. Под шифром понимается совокупность обрати мых преобразований множества открытых данных на мно жество зашифрованных данных , заданн ых алгоритмом криптографического преобразования. Криптостойкостью называется характеристика ш ифра , определяющая его стойкость к дешифрован ию . Обычно эта характеристика определяется пе риодом времени , необходимым для дешифр ова ния [ 6 ] . Принцип зашифрования заключается в генера ции гаммы шифра с помощью датчика псевдос лучайных чисел (ПСЧ ) и наложением полученной гаммы на открытые данные с помощью логической операции “исключающее ИЛИ” (т . е . обратимым образом ). Процесс расшифр ования данных сводится к повторной генерации гаммы шифра при известном ключе и наложению такой гаммы на зашифрованные данные . Полученный зашифрованн ый текст является достаточно трудным для раскрытия в том случае , когда гамма шифра не содержит повторяющихс я битовых последовательностей . По сути дела гамма ш ифра должна изменяться случайным образом для каждого шифруемого слова . Фактически если период гаммы превышает длину всего зашифро ванного текста и неизвестна никакая часть исходного текста , то шифр можно ра с крыть только прямым перебором (подбором ключа ). В этом случ ае криптостойкость определяется размером ключа. Чтобы получить линейные последовательности элементов гаммы , используются датчики ПСЧ . К настоящему времени на основе теории груп п разработано несколь ко типов таких д атчиков. В своей программе я использовал так называемый конгруэнтный генерато р ПСЧ — наиболее доступный и эффективный . Для этого класса генератор ов ПСЧ можно сделать математически строгое заключение о том , какими свойствами обладаю т выходны е сигналы этих генераторов с точки зрения периодичности и случайности. Данный линейный конгруэнтный датчик ПСЧ вырабатывает последовательности псевдослучайных чисел T ( i ) , описываемые соотношением (1) T (0) — исходная величина , выбранная в качестве порождающего числа. Этот датчик ПСЧ генерирует псевдослучайны е числа с определенным периодом повторения , зависящим от выбранных значений A и C . Значение М обычно устанавлива ется равным 2 b , где b — длина слова ЭВМ в битах . Датчик имеет максимальный период М до того , как генерируемая последователь ность чисел начнет повторяться . Линейный конг руэнтный датчик ПСЧ имеет максимальную длину М тогда и только тогда , когда A mod 4 = 1 и С — нечетное . В своей программе я положил А = 5, С = 27, Т (0) — па роль , вводимый пользователем. С полученной последовательностью Т ( i ) поступают следующим образом : F ( i ) = T ( i ) xor D ( i ) (2) Где в (2) D ( i ) — последовательность открытых данных , F ( i ) — последовательность зашифрованных данных [ 4 ] . Также при разработке алгоритма шифрования использовался алгоритм американского федерально го стандарта на шифрование данных — Data Encryption Standard ( DES ) . При зашифровании входные данные шифруются по формул е (2), далее обрабатываются бло ками по 64 слова ( word ) . Эта обработка з аключается в следующем : :4 слова переставляются в соответствии с таблицей , изображенной на рис . 2 : 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25 Рис . 2. Перестановка после зашифрования. Как видно из данной таблицы , слово 40 входной последовательности становится 1-ым , сло во 8 — 2-ым и т . д . Пр оцесс расшифрования данных является инверсным относительно процесса зашифрования . Т . е . данные сначала переставляются в со ответствии с таблицей , изображенной на рис . 3 , а затем преобразуются по формуле (2). Как легко видеть , данная перестановка является об ратной по отношению к начальной. 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 Рис . 3. Перестановка перед расши фр ованием 4. Описание программы При написании программы использовались сл едующие стандартные библиотеки Borland Pascal 7.0 и Turbo Vision 2.0: Модуль Objects. Модуль Objects содержит основные опре деления объектов Turbo Vision, включая базовый объект и ера рхии Turbo Vision TObject, а также все невидимые э лементы Turbo Vision: потоки , коллекции и ресурсы. Модуль App. Модуль App (предоставлен в исходных кодах ) обеспечивает элементы оболочки Turbo Vision. 4 очень мощных объектных типа определены в App, включа я объекты TApplication и TProgram, которые служат в к ачестве программ Turbo Vision и объект панели экрана , который управляет большинством элементов в оконных программах. Модуль Views. Модуль Views содержит основные компо ненты видимых элементов и полезные ко мпо ненты более сложных групп , таких как рамки окон и полосы скроллинга . Более сложные видимые элементы находятся в модулях Dialogs и TextView. Модуль Dialogs. Модуль Dialogs определяет большинство элементов наиболее часто используемых при со здании диалогов ых окон. Этот модуль включ ает сами диалоговые окна (которые являются специализированными окнами ) и различные элемент ы управления , такие как кнопки , метки , зави симые и независимые кнопки , строки ввода и списки истории. Модуль Menus. Модуль Menus обеспечивае т все объекты и процедуры для системы меню Turbo Vision, включая выпадающие меню и активные элемен ты строки статуса. Модуль Drivers. Модуль Drivers содержит все специализ ированные драйверы Turbo Vision, включая драйверы мышки и клавиатуры , поддержку экрана и сист ему обработки ошибок с монитором событий для программ , управляемых событиями. Модуль Memory. Модуль Memory содержит процедуры мони тора памяти Turbo Vision, которые обеспечивают функции управления кучей. Модуль CRT . Модуль CRT содержит константы , пер еменные и подпрограммы , предназначенные для работы с консолью . В отличие от стандартного ввод а-вывода , когда он осуществляется через операц ионную систему , подпрограммы этого модуля раб отают с BIOS и непосредственно с видеопамятью. Модуль DOS . Модуль DOS по зволяет использовать возможнос ти операционной системы MS-DOS , не предусмотренные в стан дарте языка Паскаль , и содержит типы , конс танты , переменные и для реализации этих до полнительных возможностей. Кроме вышеперечисленных стандартных модулей был разработан модуль SetConf , в котором находится функция привязки программы к BIOS компьютера , т . е . защита от копирования. При запуске программы в первую очеред ь проверяется целостность системы ; т . е . на личие всех файлов системы , соответствуют ли их имена и размеры т аблице . Далее происходит инициализация : проверяются параметры BIOS . Если какой либо файл системы был изменен ил и параметры BIOS не соответствуют установленным в прогр амме , система работать не будет . Для входа в систему необходимо ввести пароль . Эти проверк и осуществляются в конструкторе Init объек та TMyApp . Эт от же объект инициализирует меню ( TMyApp.InitMenu) , строку со стояния ( TMyApp.InitStatusLine) , рабочее поле ( TMyApp.InitDeskTop) , устанавливает специальную цветовую палитру ( TMyApp.GetPalette). Обработк а событий (нажатие клавиш клавиатуры , работа с “мышью” ) осуществл яется в методе HandleEvent объекта TMyApp . При выборе какого-либо пункта меню упр авление передается соответствующему объекту или вызывается нужная подпрограмма. В программе используются следу ющие процедуры , функции и объекты : · Shifr ( процедура ). Зашифрование файлов любог о типа . Сначала получаем пароль от пользов ателя , затем создаем файл зашифрованных данны х ( *.M&A) . Исходный файл считывается блоками по 64 word , кодируется с помощью генератор а ПСЧ , затем переставляется в соответствии с таблицей , изображенной на рис . 2 . Полученну ю последовательность записываем в файл с расширением *.M&A и т . д. · DeShifr (процедура ). Расшифрование файлов , за шифрованных процедурой Shifr . · Plus (процедура ). Ус тановка защиты паролем или по ключевой дискете на про граммы. · Block ( процедура ). Защита винчестера от з аписи. · Passwords (процедура ). Изменение пароля входа в программу . Сначала запрашивает старый п ароль , затем два раза новый. · TOptions ( объект , пот омок объекта TDialog ). Выводит диалоговое окно изменения настроек шифрования файлов : удалять или не удалять исходный файл , высвечивать или не высвечивать инди катор процесса шифрования. · CheckExec ( процедура ). Обрабатывает ошибки DOS . 5. Описание примен ения программы Программа предназначена для защиты данных от несанкционированного доступа ; в ней ре ализованы следующие функции : · шифрование файлов ; · защита паролем испо лняемых файлов ; · защита исполняемых файлов с помощью ключевой дискеты ; · отслежив ание и реакция на ошибки ; · изменение паролей ; · привязка к BIOS . Установка сист емы происходит с ключевой дискеты программой INSTALL.EXE , которая проверяе т не была ли установлена система ранее ; если нет , то создает на винчестере ката лог C:\SUB ROSA и коп ирует в него файлы системы ( Sub Rosa.exe, Block, KeyDisk, Plus, Passw, Setup.res, System.res ) . При запуске программы Sub Rosa.exe сначала проверяется наличие всех файлов системы . Если хотя бы один файл изменен или удален , то система работать не будет . Для работы с программой необходимо ввести пароль. В верхней части экрана находится поло ска меню , состоящая из следующих пунктов : “Файлы” : — “Выбрать” (выбор файла для работы ); — “Сменить каталог” (смена текущего к аталога ); — “Выход в DOS” (временный выход в DO S ); — “ Зав ершение” (завершение работы с программой ); “Защита” : — “Установить пароль” (защита EXE - и COM -файлов паролем ); — “Блокировать винчестер” (запрет записи любых данных на винчестер ); “Ключевая дискета” : — “Добавить проверку по ключу” (защит а EXE - и COM -файлов с помощью ключевой дискеты ); “Криптография” : — “Зашифровать файл данных” (зашифровани е выбранного файла ); — “Расшифровать файл данных” (расшифрова ние выбранного файла ); “Настройки” : — “Криптография” (изменение настроек кри птографии ); — “Пароли ” (изменение пароля вход а в систему ); “О Программе” (информация о программе ) . Во всех случаях , кроме блокировки вин честера , сначала необходимо выбрать файл для работы . Для установки защиты паролем или по ключевой дискете выбирается EXE - или COM -файл , для шифрования — файл любого типа. 6. Заключение В заключении проведем анализ некоторых систем защиты от копирования . Следует отмет ить , что этот анализ не является исчерпыва ющим , так как эти системы постоянно развив аются , а также не всегда можно получить исч ерпывающее описание алгоритмов — р азработчики не стремятся раскрывать принципы их построения. RANK — пак ет защиты от НСД . Этот пакет реализует функцию контроля доступа к EXE- и COM -файлам . Следует отметить , что анализ разграничения доступа к программам ста вит под серьезное сомнение возможность реализации такой функции без дополнительных мероприятий. LATCH — комплекс программ защиты ПЭВМ от НСД . Этот комплекс обеспечивает безопасность данных , х ранящихся на винчестере . При несанкционированном доступе происхо дит “зависание” ПЭВМ или не обнаруживается НЖМД. Тезис о невозможности обнаружения НЖМД вызывает серьезные сомнения : например , для к онтроллеров SCSI не требуется определение типа НЖМД в памяти CMOS , так как параметры винчестера могут быть считаны с помощью команды контро ллера. Приложение 1 Листинг программы Program Sub_Rosa; Uses App, Dialogs, Drivers, Menus, MsgBox, Objects, Validate, Views, Memory, StdDlg, Editors, Модули Turbo Vision, далее - TV CRT, DOS, Стандартные модули SetConf; Модуль фун кции привязки к BIOS Var MyRes : TResourceFile; Переменная файла р есурсов , TV FName, MainDir, DName: string; Переменные работы с файлами и каталогами MainPass, Pass : string; Переменные паролей Pos : string[3]; FilePass : file of char; Перемен ная фа йла паролей OptFile, OptInd : word; Переменные опций Int09_Save : pointer; Переменная адреса 09h прерывания Const Константы кодов команд , TV cmAboutBox = 700; Окно "О Программе " cmCode = 1001; Кодировать файл cmDeCode = 1002; Декоди ровать фа йл cmSetPass = 1005; Установить пароль н а вход в систему cmLockDisk = 1006; Запретить доступ к винчестеру cmOptions = 1007; Опции криптографии cmKeyDisk = 1008; Ключевая дискета cmPasswords = 1009; Пароль на исполняем ый файл cmCha ngePass= 1010; Сменить пароль на вход в систему SetPass = 'passw.com'; KeyDisk = 'keydisk.com'; RMenuBar: TStreamRec = ( Запись для работы с потоком , TV ObjType: 2000; VmtLink: Ofs(TypeOf(TMenuBar)^); Load: @TMenuBar.Load; Store: @TMenuBar.Sto re); Type Установка опций криптографии POptions = ^TOptions; TOptions = object(TDialog) constructor Init; end; Объект для работы с те кстом PMyStaticText = ^TMyStaticText; TMyStaticText = object(TStaticText) function GetPalette: PPalette ; virtual; Переопределен ие палитры end; Объекты для работы с ф айлами и каталогами PMyFDialog = ^TMyFDialog; TMyFDialog = object(TFileDialog) function GetPalette: PPalette; virtual; end; PMyFileDialog = ^TMyFileDialog; TMyFileDialog = object(T MyFDialog) constructor Init(AWildCard: tWildStr; const ATitle, InputName: string; AOptions: Word; HistoryId: Byte); end; PDirDialog = ^TDirDialog; TDirDialog = object(TChDirDialog) function GetPalette: PPalette; virtual; end; PMyChDirDialog = ^TMyChDirDialog; TMyChDirDialog = object(TDirDialog) constructor Init(AOptions: Word; HistoryId: Word); procedure SetUpDialog; function Valid(Command: Word): Boolean; virtual; end; Установка основного фона программы PMyBackgrou nd = ^TMyBackground; TMyBackground = object(TBackground) Text: TTitleStr; constructor Init(var Bounds: TRect; AText: TTitleStr); procedure Draw; virtual; end; PMyDesktop = ^TMyDesktop; TMyDesktop = object(TDesktop) procedure InitBackground; virtua l; end; Объект "О Программе " PAboutBox = ^TAboutBox; TAboutBox = object(TDialog) constructor Init; end; Основной объект PMyApp = ^TMyApp; TMyApp = object(TApplication) constructor Init; инициализация destructor Done; virtual; завершение рабо ты procedure HandleEvent(var Event: TEvent); virtual; обработка событ ий procedure InitMenuBar; virtual; инициализация меню procedure InitDeskTop; virtual; инициализация рабоч его поля procedure InitStatusLine; virtual; инициализация строк и состояния procedure FileOpen(WildCard: PathStr); окно для работ ы с файлами function GetPalette: PPalette; virtual; изменение стандар тной палитры end; Русифицированная функция форм ирования сообщения function MyMessageBoxRect(var R: TRect; con st Msg: string; Params: pointer; AOptions: word): word; const ButtonName: array[0..3] of string[6] = ('Ага ', 'Нека ', 'Ага ', 'Нека '); Commands: array[0..3] of Word = (cmYes, cmNo, cmOK, cmCancel); Titles: array[0..3] of string[11] = ('Предупреждение ', 'Ошибка ', 'Информация ', 'Подтверждение '); var I, X : integer; Dialog : PDialog; Control: PView; S : string; begin Dialog:= New(PDialog, Init(R, Titles[AOptions and $3])); with Dialog^ do begin Options:= Options or ofCentered; R.Assign(3, 2, Size.X - 2, Size.Y - 3); FormatStr(S, Msg, Params^); Insert(New(PStaticText, Init(R, S))); X:= -2; R.Assign(0, 0, 10, 2); for I:= 0 to 3 do if AOptions and ($0100 shl I) <> 0 then Inc(X, R.B.X - R.A.X + 2); X:= (Size.X - X) shr 1; for I:= 0 to 3 do if AOptions and ($0100 shl I) <> 0 then begin Control:= New(PButton, Init( R, ButtonName[I], Commands[i], bfNormal)); Insert(Control); Control^.MoveTo(X, Size.Y - 3); Inc(X, Control^.Size.X + 2); end; SelectNext(False); end; if AOptions and mfInsertInApp = 0 then MyMessageBoxRect:= DeskTop^.ExecView(Dialog) else MyMessageBoxRect:= Application^.ExecView(Dialog); Dispose(Dialog, Done); end; Русифицированная функция форм ирования сообщения стандартного размера function MyMessageBox(const Msg: String; Params: Pointer; AOptions: Word): Word; var R: TRect; begin R.Assign(0, 0, 40, 9); MyMessageBox:= MyMessageBoxRect(R, Msg, Params, AOptions); end; function GetCurDir: DirStr; var CurDir: DirStr; begin GetDir(0, CurDir ); if Length(CurDir) > 3 then begin Inc(CurDir[0]); CurDir[Length(CurDir)]:= '\'; end; GetCurDir:= CurDir; end; Процедура инициализации окна работы с файлами procedure TMyApp.FileOpen(WildCard: PathStr); var FileName: FNameStr; begin FileName:= '*.*'; if ExecuteDialog(New(PMyFileDialog, Init( WildCard, 'Открыть файл ', 'Имя ', fdOpenButton, 100)), @FileName) <> cmCancel then FName:=FileName; открыть файл , потом... end; ************************************************************ **************** *----------============= К Р И П Т О Г Р А Ф И Я ================----------* **************************************************************************** Шифрование файлов procedure Shifr(InputFileName: s tring); const A = 5; Конс танты для C = 27; генератора M = 65536; псевдослучайных чисел , далее - ПСЧ var TempFile : file of byte; InpF, OutF : file of word; файлы на входе и выходе Password, Password1 : string; переменные для р аботы с паролями OutputFileName, Exten : string; переменные имен файлов I, J, K, tmp : byte; переменные кодирования Temp, SCode, TByte, Code: word; Position : LongInt; переменные данных о процессе NowPos : real; TPassword : array [1..255] of word; MasByte, Mas , MasEnd, PS: array [1..64] of word; массивы перестановок T : array [0..64] of word; DirInfo, DirInfo1 : SearchRec; данные о файле begin if length(FName) > 3 then Файл выбран ? begin Получить пароль Password := ''; Password1 := ''; Input Box('П А Р О Л Ь ', ' Введите пароль :', Password, 255); InputBox('П А Р О Л Ь ', 'Введите паро ль еще раз :', Password1, 255); if (Password = Password1) and (length(Password)<>0) then begin Преобразовать файл FindFirst(InputFileName, AnyFile, DirInfo); if DOSError = 0 then begin if DirInfo.Size mod 2 = 1 then begin assign(TempFile, InputFileName); reset(TempFile); while not EOF(TempFile) do read(TempFile, tmp); tmp := 255; write(TempFile, tmp); close(TempFile); end; Преобразовать имя файла Position := 0; assign(InpF, InputFileName); reset(InpF); for i := length(InputFileName) downto 1 do if InputFileName[i] = '.' then begin OutputFileName := copy(InputFileName, 1, i) + 'M&A'; break; end; assign(OutF, OutputFileName); rewrite(OutF ); for i:= 0 to length(InputFileName) do if InputFileName[length(InputFileName) - i] = '.' then case i of 0: Exten := chr(0) + chr(0) + chr(0); 1: Exten := copy(FName, length(FName)-2, i) + chr(0) + chr(0); 2: Exten := copy(FName, length(FName)-2, i) + chr(0) else Exten := copy(FName, length(FName)-2, 3) end; for i := 1 to 3 do begin Temp := ord(Exten[i]); Write(OutF, Temp); end; Начать шифрование k := 1; repeat begin Считать из исходного файл а блок размером 64*word for i:=1 to 64 do If EOF(InpF) then MasByte[i] := 0 else Read(InpF, MasByte[i]); Mas := MasByte; T[0] := ord(Password[k]); if k < length(Password) then inc(k) else k := 1; for i:= 1 to 64 do begin Получить текущую позицию процесса NowPos := 100*Position/DirInfo.Si ze; inc(Position, 2); if NowPos > 100 then NowPos := 100; Str(Round(NowPos):3, Pos); if OptInd = 0 then begin GoToXY(77, 1); Write(Pos + '%'); end; Шифровать с помощью ПСЧ Code:=Mas[i]; T[i] := (A * T[i-1] + C) mod M; Code:=T[i] xor Code; Mas[i] := Code; end; for i:=1 to 8 do Конечная перестановка for j:=1 to 8 do case i of 1: MasEnd[8*(j-1)+i] := Mas[41-j]; 2: MasEnd[8*(j-1)+i] := Mas[09-j]; 3: MasEnd[8*(j-1)+i] := Mas[49-j]; 4: MasEnd[8*(j-1)+i] := Mas[17-j]; 5: MasEnd[8*(j -1)+i] := Mas[57-j]; 6: MasEnd[8*(j-1)+i] := Mas[25-j]; 7: MasEnd[8*(j-1)+i] := Mas[65-j]; 8: MasEnd[8*(j-1)+i] := Mas[33-j] end; for i:= 1 to 64 do Write(OutF, MasEnd[i]); end; until eof(InpF); MyMessageBox('Файл '+ InputFileName + ' зашифрован с именем ' + OutputFileName, nil, mfInformation+mfOkButton); Close(InpF); if OptFile = 1 then Erase(InpF); Close(OutF); end else MyMessageBox('Файл '+ InputFileName + ' не существует !', nil, mfInformation+mfOkButton); end else MyMessageBox(' Ошибка ввода пароля !!!', nil, mfError+mfOkButton); end else MyMessageBox(' Файл не выбран !!!', nil, mfError+mfOkButton); end; procedure DeShifr(InputFileName: String); const A = 5; C = 27; M = 65536; var InpF, OutF : file of word; Password, OutputFile Name : string; Password1 : string; Exten : string[3]; SCode, Temp, Ext, TByte, Code: word; I, J, K : byte; Position : LongInt; NowPos : real; TPassword : array [1..255] of word; MasByte, Mas, MasEnd, PS : array [1..64] of word; T : a rray [0..64] of word; DirInfo : SearchRec; begin if (length(InputFileName) > 3) and (copy(InputFileName, length(InputFileName)-2, 3) = 'M&A') then begin Password := ''; Password1 := ''; InputBox('П А Р О Л Ь ', ' Введите пар оль :', Password, 255); I nputBox('П А Р О Л Ь ', 'Введите пароль еще раз :', Password1, 255); if (Password = Password1) and (length(Password)<>0) then begin FindFirst(InputFileName, AnyFile, DirInfo); if DOSError = 0 then begin Assign(InpF, InputFileName); Reset(InpF); Posit ion := 0; Exten := ''; for i:= 1 to 3 do begin Read(InpF, Temp); Exten := Exten + chr(Temp); end; for i := length(InputFileName) downto 1 do if InputFileName[i] = '.' then begin OutputFileName := copy(InputFileName, 1, i) + Exten; break; end; Assign(OutF, OutputFileName); Rewrite(OutF); for i := 1 to length(Password) do TPassword[i]:=ord(Password[i]); k := 1; repeat begin for i:=1 to 64 do Read(InpF, MasByte[i]); for i:=1 to 8 do начальная перестановк а for j:=1 to 8 do case i of 1: Mas[8*(i-1)+j]:=MasByte[66-8*j]; 2: Mas[8*(i-1)+j]:=MasByte[68-8*j]; 3: Mas[8*(i-1)+j]:=MasByte[70-8*j]; 4: Mas[8*(i-1)+j]:=MasByte[72-8*j]; 5: Mas[8*(i-1)+j]:=MasByte[65-8*j]; 6: Mas[8*(i-1)+j]:=MasByte[67-8*j]; 7: Mas[8*(i-1)+j]:=MasByte[69-8*j] ; 8: Mas[8*(i-1)+j]:=MasByte[71-8*j] end; T[0] := ord(Password[k]); if k < length(Password) then inc(k) else k := 1; for i:= 1 to 64 do begin NowPos := 100*Position/DirInfo.Size; inc(Position, 2); If NowPos > 100 then NowPos := 100; Str(Round(NowPos):3, Pos); if OptInd = 0 then begin GoToXY(77, 1); Write(Pos + '%'); end; T[i] := (A * T[i-1] + C) mod M; Code:=Mas[i]; Code:=T[i] xor Code; Mas[i] := Code; end; MasEnd := Mas; for i := 1 to 64 do Write(OutF, MasEnd[i]); end; until eof(InpF); GotoXY(77, 1); write('100%'); MyMessageBox('Файл '+ InputFileName + ' расшифрован в ' + OutputFileName, nil, mfInformation+mfOkButton); Close(InpF); if OptFile = 1 then Erase(InpF); Close(OutF); end else MyMessageBox('Файл '+ In putFileName + ' не существует !', nil, mfInformation+mfOkButton); end else MyMessageBox(' Ошибка ввода пароля !!!', nil, mfError+mfOkButton); end else MyMessageBox(' Файл не выбран !!!', nil, mfError+mfOkButton); end; Опции криптографии constructor TOptions.Init; var R : TRect; Q, Q1: PView; Butt : TRadioButtons; begin R.Assign(0, 0, 60, 11); inherited Init(R, 'Криптография '); Options := Options or ofCentered; R.Assign(10, 8, 20, 10); Insert(New(PButton, Init(R, '~А ~га ', cmOK, bf Default))); R.Assign(40, 8, 50, 10); Insert(New(PButton, Init(R, '~Н ~ека ', cmCancel, bfNormal))); R.Assign(2, 2, 25, 3); Insert(New(PLabel, Init(R, 'Исходный файл :', Q))); R.Assign(5, 4, 21, 6); Q:=New(PRadioButtons, Init(R, NewSItem('~Н ~е удаля ть ', NewSItem('~У ~далять ', nil)))); Insert(Q); R.Assign(27, 2, 45, 3); Insert(New(PLabel, Init(R, 'Индикатор :', Q1))); R.Assign(30, 4, 50, 6); Q1:=New(PRadioButtons, Init(R, NewSItem('~В ~ысвечивать ', NewSItem('~Н ~е высвечивать ', nil)))); Insert(Q 1); end; Изменение пароля на вход в систему procedure Passwords; var Ps, Ps1: string; I : byte; tmp : char; begin Ps := ''; Ps1 := ''; InputBox('П А Р О Л Ь ', 'Введите паро ль :', Ps, 255); for i:= 1 to length(Ps) do Ps[i] :=chr(ord(Ps[i]) xor 27); if Ps <> Pass then begin MyMessageBox(' Неверный пароль !!!', nil, mfError+mfOkButton); ClrScr; writeln('Несанкционированный доступ !'); Halt; end; InputBox('И З М Е Н Е Н И Е П А Р О Л Я ', 'Введите новый пароль :', Ps, 255); InputBox('И З М Е Н Е Н И Е П А Р О Л Я ', ' Повторите ввод :', Ps1, 255); if (Ps = Ps1) and (Ps <> '') then begin Assign(FilePass, 'system.res'); Rewrite(FilePass); for i := 1 to length(PS) do begin tmp := chr(ord(Ps[i]) xor 27); Write(FilePass, tmp); end; Close(FileP ass); end else MyMessageBox(' Ошибка ввода пароля !!!', nil, mfError+mfOkButton); end; Обработка ошибок procedure CheckExec; var St: string; begin Str(DOSError, St); case DOSError of 2: MyMessageBox(' Ошибка DOS № ' + St + ' "Файл не найден "', nil, mfError + mfOkButton); 3: MyMessageBox(' Ошибка DOS № ' + St + ' "Путь не найден "', nil, mfError + mfOkButton); 5: MyMessageBox(' Ошибка DOS № ' + St + '"Неверный код доступа к файлу "', nil, mfError + mfOkButton); 6: MyMessageBox(' Ошибка DOS № ' + St + '"Неверный код системного обработчика файла "', nil, mfError + mfOkButton); 8: MyMessageBox(' Ошибка DOS № ' + St + ' "Недостаточно памяти "', nil, mfError + mfOkButton); 10: MyMessageBox(' Ошибка DOS № ' + St + ' "Неверная среда "', nil, m fError + mfOkButton); 11: MyMessageBox(' Ошибка DOS № ' + St + ' "Неправильный формат "', nil, mfError + mfOkButton); 18: MyMessageBox(' Ошибка DOS № ' + St + '"Нет свободных обработчиков для файло в "', nil, mfError + mfOkButton); end; end; proc edure MakeComFile(k: byte); const S : array [1..4] of string = ('c:\sub_rosa\plus.', 'c:\sub_rosa\passw.', 'c:\sub_rosa\block.', 'c:\sub_rosa\keydisk.'); Size : array [1..4] of word = (1068, 204, 617, 2118); Inden: array [1..4, 1..3] of byte = ((ord('ы '), 26 , ord('Р ')), (ord('ы '), 39 , ord('Р ')), (ord('щ '), ord('Й '), ord('_')), (ord('щ '), ord('А '), ord('_'))); var I, Tmp : byte; F : array [1..4, 1..2] of file ; M : array [1..2200] of byte ; NumRead, NumWritten: Word; begin assign(F[k, 1], S[k]) ; reset(F[k, 1], 1); assign(F[k, 2], S[k]+'com'); rewrite(F[k, 2], 1); for i := 1 to 3 do begin BlockRead(F[k, 1], tmp, 1, NumRead); BlockWrite(F[k, 2], Inden[k, i], 1, NumWritten); end; BlockRead(F[k, 1], M, Size[k]-3, NumRead); BlockWrite(F[k, 2], M, Size[k]-3, NumWritten); close(F[k, 1]); close(F[k, 2]); end; procedure DelComFile(k: byte); const S: array [1..4] of string = ('plus.com', 'passw.com', 'block.com', 'keydisk.com'); S : array [1..4] of string = ('c:\sub_rosa\pl us.com', 'c:\sub_rosa\passw.com', 'c:\sub_rosa\block.com', 'c:\sub_rosa\keydisk.com'); var F: array [1..4] of file; begin Assign(F[k], S[k]); Erase(F[k]); end; **************************************************************************** *-------- --=========== Д О П И С А Т Ь К Ф А Й Л У ==========----------* **************************************************************************** procedure Plus(WhatDo: string); var FileStr, Err: string; CmdLine : string; I : byte; FileName : FNameStr; Regs : Registers; begin Проверка условий if Length(FName) > 3 then begin if (copy(FName, length(FName)-2, 3) = 'EXE') or (copy(FName, length(FName)-2, 3) = 'COM') then begin Преобразование имени файла for i:= length(fname) downto 1 do if fna me[i] = '\' then begin CmdLine := copy(FName, i+1, length(FName) - i); break; end; for i := 1 to length(CmdLine) do if CmdLine[i] in ['A'..'Z'] then CmdLine[i] := chr(ord(CmdLine[i]) + 32); for i := 1 to length(MainDir) do if MainDir[i] in ['A'..' Z'] then MainDir[i] := chr(ord(MainDir[i]) + 32); MakeComFile(1); If WhatDo = SetPass then MakeComFile(2); If WhatDo = KeyDisk then MakeComFile(4); Выполнить дописывание SwapVectors; Exec( MainDir + 'plus.com ', CmdLine + ' ' + MainDir + WhatDo); SwapVectors; DelComFile(1); If WhatDo = SetPass then DelComFile(2); If WhatDo = KeyDisk then DelComFile(4); Обработчик ошибок if DosError <> 0 then CheckExec else begin regs.ah := $4D; with regs do msdos(regs); case Regs.AH of 0 : MyMessage Box(' Файл ' + FName + ' защищен .', nil, mfInformation + mfOkButton); 1 : MyMessageBox(' Ctrl-C или Ctrl-Break.', nil, mfError + mfOkButton); 2 : MyMessageBox(' Критическая ошибка устройства .', nil, mfError + mfOkButton); 3 : MyMessageBox(' TSR - про грамма .', nil, mfError + mfOkButton); end; end; end else MyMessageBox(' Ошибка выбора файла !!! ', nil, mfError + mfOkButton); end else MyMessageBox(' Файл не выбран !!! ', nil, mfError + mfOkButton); end; **************************************************************************** *----------===== Б Л О К И Р О В К А В И Н Ч Е С Т Е Р А ======----------* **************************************************************************** procedure LockDisk; la bel end_; var Regs: registers; Err : string; Inst: byte; begin Проверка наличи программы в памяти asm push ax push dx mov Inst, 0 mov ax,1059h mov dx,2517h int 13h cmp ax,2517h jne End_ cmp dx,1059h jne End_ mov Inst, 1 End_: pop dx pop ax end; if Inst = 0 then begin MakeComFile(3); Установить защиту SwapVectors; SetIntVec($09, Int09_Save); Exec(MainDir + 'block.com', ''); GetIntVec($09, Int09_Save); SwapVectors; Обраюотчик ошибок if DosError <> 0 then CheckExec els e begin regs.ah := $4D; with regs do msdos(regs); case Regs.AH of 0 : MyMessageBox(' Ненормальное завершение .', nil, mfError + mfOkButton); 1 : MyMessageBox(' Ctrl-C или Ctrl-Break.', nil, mfError + mfOkButton); 2 : MyMessageBox(' Критическая оши бка устройства .', nil, mfError + mfOkButton); 3 : MyMessageBox(' Винчестер блокирован .', nil, mfInformation + mfOkButton); TSR end; end; end else MyMessageBox(' Защита уже установлена .', nil, mfError + mfOkButton); end; Изменить стандартную палит ру function TDirDialog.GetPalette: PPalette; const Синяя палитра CMyCluster = #64#65#66#67#68#69#70#71#72#73#74#75#76#77#78#79#80#81#82+ #83#84#85#86#87#88#89#90#91#92#93#94#95; P: string [32] = CMyCluster; begin GetPalette := @P; end; Окно работы с каталога ми constructor TMyChDirDialog.Init(AOptions: Word; HistoryId: Word); var R : TRect; ScrollBar: PScrollBar; CurDir : DirStr; begin Создание окна R.Assign(16, 2, 64, 20); TDialog.Init(R, 'Изменить катлог '); Options := Options or ofCentered; Строка ввода имени катало га R.Assign(3, 3, 30, 4); DirInput := New(PInputLine, Init(R, 68)); Insert(DirInput); R.Assign(2, 2, 17, 3); Insert(New(PLabel, Init( R, '~И ~мя каталога ', DirInput))); Список катал огов R.Assign(32, 6, 33, 16); ScrollBar := New(PScrollBar, Init(R)); Insert(ScrollBar); R.Assign(3, 6, 32, 16); DirList := New(PDirListBox, Init(R, ScrollBar)); Insert(DirList); R.Assign(2, 5, 19, 6); Insert(New(PLabel, Init( R, '~Д ~ерево катало гов ', DirList))); Формирование кнопок R.Assign(35, 6, 45, 8); OkButton := New(PButton, Init( R, '~А ~га ', cmOK, bfDefault)); Insert(OkButton); Inc(R.A.Y,3); Inc(R.B.Y,3); ChDirButton := New(PButton, Init( R, '~С ~мена ', cmChangeDir, bfNormal)); Insert(ChDirButton); Inc(R.A.Y,3); Inc(R.B.Y,3); Insert(New(PButton, Init( R, '~Н ~ека ', cmCancel, bfNormal))); if AOptions and cdNoLoadDir = 0 then SetUpDialog; SelectNext(False); end; procedure TMyChDirDialog.SetUpDialog; var CurDir: DirStr; begi n if DirList <> nil then begin CurDir := GetCurDir; DirList^.NewDirectory(CurDir); if (Length(CurDir) > 3) and (CurDir[Length(CurDir)] = '\') then CurDir := Copy(CurDir,1,Length(CurDir)-1); if DirInput <> nil then begin DirInput^.Data^ := CurDir; DirInput^.DrawView; end; end; end; function TMyChDirDialog.Valid(Command: Word): Boolean; var P: PathStr; begin Valid := True; if Command = cmOk then begin P := FExpand(DirInput^.Data^); if (Length(P) > 3) and (P[Length(P)] = '\') then Dec(P[0]); $I- ChDir(P); if IOResult <> 0 then begin MyMessageBox(' Неправильный каталог !', nil, mfError + mfOkButton); Valid := False; end; $I+ end; end; Инициализировать рабочее поле constructor TMyBackground.Init(var Bounds: TRect; AT ext: TTitleStr); begin inherited Init(Bounds, ' '); Text := AText; while Length(Text) < SizeOf(TTitleStr) - 1 do Text := Text + AText; end; procedure TMyBackground.Draw; var DrawBuffer: TDrawBuffer; begin MoveStr(DrawBuffer, Text, GetColor(1)); WriteLine(0, 0, Size.X, Size.Y, DrawBuffer); end; procedure TMyDesktop.InitBackground; var R: TRect; begin GetExtent(R); Background := New(PMyBackground, Init(R, '___')); end; Изменить стандартную палитру function TMyStaticText.GetPalette: PPalette ; const Синяя палитра CMyCluster = #64#65#66#67#68#69#70#71#72#73#74#75#76#77#78#79#80#81#82+ #83#84#85#86#87#88#89#90#91#92#93#94#95; P: string [32] = CMyCluster; begin GetPalette := @P; end; Окно "О Программе " constructor TAboutBox.Init; var R: TRect; begin R.Assign(0, 0, 30, 16); inherited Init(R, 'О программе '); Options := Options or ofCentered; R.Assign(10, 13, 20, 15); Insert(New(PButton, Init(R, '~А ~га ', cmOK, bfDefault))); R.Assign(11, 2, 19, 3); Insert(New(pMyStaticText, Init( R, 'Sub Rosa'))); R.Assign(1, 4, 29, 5); Insert(New(pStaticText, Init(R, 'Система защиты данных от НСД '))); R.Assign(5, 5, 29, 6); Insert(New(pStaticText, Init(R, 'выполнена учащимися '))); R.Assign(10, 6, 29, 7); Insert(New(pStaticText, Init(R, 'г р . 4641'))); R.Assign(6, 7, 29, 8); Insert(New(pStaticText, Init(R, 'Егановым Максимом '))); R.Assign(14, 8, 22, 9); Insert(New(pStaticText, Init(R, 'и '))); R.Assign(6, 9, 29, 10); Insert(New(pStaticText, Init(R, 'Юзефовичем Артемом '))); R.Assign (6, 11, 29, 12); Insert(New(pStaticText, Init(R, 'МГВРК , Минск , 1996'))); end; Работа программы начинается здесь... constructor TMyApp.Init; var ReturnVal, i : Word; DirInfo, DirInfo1, DirInfo2 : SearchRec; DirInfo3, DirInfo4, DirInfo5: SearchRec; Pas : string; st : char; begin OptInd := 1; Инициализировать файл ресурсо в MyRes.Init(New(PBufStream, Init('Setup.res', stOpen, 1024))); if MyRes.Stream^.Status <> stOK then begin Write('Нарушение целостности !'); halt(1); end; RegisterType(RMenuBar); Проверить целостность системы MainDir := GetCurDir; FindFirst('plus', AnyFile, DirInfo); FindFirst('passw', AnyFile, DirInfo1); FindFirst('block', AnyFile, DirInfo2); FindFirst('keydisk', AnyFile, DirInfo3); FindFirst('set up.res', AnyFile, DirInfo4); if (DOSError = 0) and (DirInfo.Size = 1068) and (DirInfo1.Size = 204) and (DirInfo2.Size = 617) and (DirInfo3.Size = 2118) and (DirInfo4.Size = 522) then begin Получить пароль Assign(FilePass, 'system.res'); Reset(File Pass); Pass := ''; while not EOF(FilePass) do begin read(FilePass, st); Pass := Pass + st; end; Close(FilePass); Инициализировать систему TApplication.Init; Pas := ''; ReturnVal := ExecuteDialog(New(PAboutBox, Init), nil); InputBox('П А Р О Л Ь ', 'Введите пароль :', Pas, 255); for i:= 1 to length(Pas) do Pas[i] :=chr(ord(Pas[i]) xor 27); if Pas <> Pass then begin MyMessageBox(' Неверный пароль !!!', nil, mfError+mfOkButton); ClrScr; writeln('Несанкционированный доступ !'); Halt; end; end else begin writeln('Нарушение целостности !'); Halt; end; end; Завершение работы destructor TMyApp.Done; begin TApplication.Done; MyRes.Done; end; Обработка событий procedure TMyApp.HandleEvent(var Event: TEvent); procedure ChangeDir; var D: PMyChDirDialog; begin D:= New(PMyChDirDialog, Init(cdNormal, 101)); ExecuteDialog(D, nil); end; var ReturnVal: Word; regs : Registers; R : TRect; begin inherited HandleEvent(Event); case Event.What of evCommand: begin case Event.Command of cmAboutBox : ReturnVal := ExecuteDialog(New(PAboutBox, Init), nil); cmOpen : FileOpen('*.*'); cmChangeDir : ChangeDir; cmSetPass : Plus(SetPass); cmKeyDisk : Plus(KeyDisk); cmCode : Shifr(FName); cmDeCode : DeShifr(FName); cmLockDisk : LockDisk; cmOptions : ReturnVal := ExecuteDialog(New(POptions, Init), @OptFile); cmPasswords : Passwords end; ClearEvent(Event); end; end; end; Инициализировать меню procedure TMyApp.InitMenuBar; var R: TRect; begin Получить меню из файла ресурсов по кл ючу "Config" - функция получения даты BIOS; модуль SetConf MenuBar := PMenuBar(MyRes.Get(Config)); if MenuBar = nil then begin Write(' Нелегальная копия !!!'); halt(1); end; end; Инициализировать рабочее поле procedure TMyApp.InitDesktop; var R: TRect; begin GetExtent(R); R.Grow(0, -1); Desktop := New(PMyDesktop, Init(R)); end; Инициализировать строку состояни я procedure tMyApp.InitStatusLine; var R: tRect; begin GetExtent(R); R.A.Y:= R.B.Y - 1; StatusLine:= New(pStatusLine, Init(R, NewStatusDef(0, $FFFF, NewStatusKey('~F1~ О программе ', kbF1, cmAboutBox, NewStatusKey('~F3~ Файл ', kbF3, cmOpen, NewStatusKey('~F5~ Пароль ', kbF10, cmMenu, NewStatusKey('~F9~ Настройки ', kbF9, cmOptions, NewStatusKey('~F10~ Меню ', kbF10, cmMenu, N ewStatusKey('~Alt-X~ Выход ', kbAltX, cmQuit, nil)))))), nil))); end; Изменить основную палитру function TMyApp.GetPalette: PPalette; const P: Array [apColor..apMonochrome] of string[Length(CAppColor)] = (CAppColor, CAppBlackWhite, CAppMonochrome); begin P[apColor, 50] := #$11; 1F P[apColor, 51] := #$11; 2F P[apColor, 1] := #$21; 71 GetPalette := @P[AppPalette]; end; Изменить палитру окна выбора файлов function TMyFDialog.GetPalette: PPalette; const Синяя палитра CMyCluster = #64#6 5#66#67#68#69#70#71#72#73#74#75#76#77#78#79#80#81#82+ #83#84#85#86#87#88#89#90#91#92#93#94#95; P: string [32] = CMyCluster; begin GetPalette := @P; end; Инициализировать окно выбора файлов constructor TMyFileDialog.Init(AWildCard: tWildStr; const AT itle, InputName: string; AOptions: Word; HistoryId: Byte); var ScrollBar: PScrollBar; R : TRect; begin Создание окна диалога R.Assign(15, 1, 64, 20); TDialog.Init(R, ATitle); Options:= Options or ofCentered; WildCard:= AWildCard; Строка вво да имени файла R.Assign(3, 3, 31, 4); FileName:= New(PFileInputLine, Init(R, 79)); FileName^.Data^:= WildCard; Insert(FileName); R.Assign(2, 2, 6, 3); Insert(New(PLabel, Init(R, InputName, FileName))); R.Assign(31, 3, 34, 4); Insert(New(PHistory, Init(R, FileName, HistoryId))); Линейка скроллинга и спис ок файлов R.Assign(3, 14, 34, 15); ScrollBar:= New(PScrollBar, Init(R)); Insert(ScrollBar); R.Assign(3, 6, 34, 14); FileList:= New(PFileList, Init(R, ScrollBar)); Insert(FileList); R.As sign(2, 5, 8, 6); Insert(New(PLabel, Init(R, 'Файлы ', FileList))); Задание кнопок R.Assign(35, 3, 46, 5); if AOptions and fdOpenButton <> 0 then begin Insert(New(PButton, Init( R, 'Открыть ', cmFileOpen, bfDefault))); Inc(R.A.Y,3); Inc(R.B.Y,3); end; if AOptions and fdOkButton <> 0 then begin Insert(New(PButton, Init( R, 'Ага ', cmFileOpen, bfNormal))); Inc(R.A.Y,3); Inc(R.B.Y,3); end; if AOptions and fdReplaceButton <> 0 then begin Insert(New(PButton, Init( R, 'Замена ',cmFileReplace, bfNormal))); Inc(R.A.Y,3); Inc(R.B.Y,3); end; if AOptions and fdClearButton <> 0 then begin Insert(New(PButton, Init( R, 'Удал .',cmFileClear, bfNormal))); Inc(R.A.Y,3); Inc(R.B.Y,3); end; Insert(New(PButton, Init( R, 'Н ека ', cmCancel, bfNormal))); Информационная панель с п араметрами файла R.Assign(1, 16, 48, 18); Insert(New(PFileInfoPane, Init(R))); SelectNext(False); Загрузка каталога if AOptions and fdNoLoadDir = 0 then begin FileList^.ReadDirectory(WildCard); Directory:= NewStr(GetCurDir); end; end; Var MyApp: TMyApp; Переменная основного объекта Begin WriteLn('Система защиты данных от НСД . Вер сия 1.0 beta. '+ +' 1996 МГВРК Еганов М . Ю ., Юзефович А . Г .'); GetIntVec( $09,Int09_Save); MyApp.Init; MyApp.Run; MyApp.Done; SetIntVec($09, Int09_Save); End.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Блондинка, записывая телефон психотерапевта, рассуждает:
- Хорошо же было в 17 лет! Придёт подружка, прыщи на морде подавит, ногти подпилит, про "все мужики - козлы" послушает-посочувствует, новую юбчонку оценит, а в качестве алаверды - всего-то ответный визит.
А в 25 лет - косметолог, стилист, маникюрша, парикмахер, портниха, гинеколог... И все, блин, денег хотят!
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Защита от несанкционированного доступа", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru