МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Защита информации в системах дистанционного обучения с монопольным доступом

    ознакомиться в разделе 4.2. Интерфейсы, описанные в IDL файле,

    преобразуются IDL-компилятором (MIDL.EXE) в двоичный формат и записываются

    в файл с расширением TLB, который называется библиотекой типов. Этот файл

    будет необходим, например, для использования модуля Uniprot.dll из среды

    Visual Basic. С процессом подключения TLB файлов в Visual Basic можно

    ознакомиться в разделе 4.4.2.

    Для регистрации модуля в системе необходимо вызвать в нем функцию

    DllRegisterServer, которая внесет нужные изменения в реестр. Для этих целей

    можно воспользоваться утилитой regsvr32.exe. Она поставляется вместе с

    операционной системой, а потому должна находиться на любой машине. Regsvr32

    должна загрузить СОМ-сервер и вызвать в нем функцию DllRegisterServer,

    которая внесет нужные изменения в реестр.

    Организация работы с зашифрованными файлами строится на основе

    механизмов дескрипторов (или описателей файла). Каждому открытому или

    созданному файлу назначается уникальный (в рамках данного процесса)

    идентификатор, представляющий собой число в формате short. Этот

    идентификатор возвращается вызывающей программе, после чего она может

    проводить над этим файлом набор операций. Все номера открытых файлов

    хранятся во внутренней таблице модуля, и каждому из них соответствует

    структура данных, необходимая для работы с ним. В частности, там хранится

    текущая позиция для чтения данных, алгоритм для шифрования/расшифрования

    данных. Когда работа с файлом закончена, программа должна закрыть файл с

    соответствующим идентификатором. Он будет удален из таблицы, и в следующий

    раз тот же самый идентификатор может послужить для работы с другим файлом.

    Если файл не будет закрыт, то после завершения программы, использующей

    модуль защиты, файл будет поврежден, и работа с ним в дальнейшем будет

    невозможна.

    3.4. Защита исполняемых файлов

    Одним из средств, входящих в комплект разрабатываемой системы

    должна стать программа для защиты их от модификации. Было принято решение

    использовать уже имеющиеся механизмы шифрования, основанные на полиморфный

    алгоритмах. О преимуществах такого метода говорилось ранее. Во- первых, это

    большая сложность создания универсального взломщика, а, во-вторых,

    возможность запрещения запуска программ без наличия соответствующего файла

    с алгоритмом расшифрования.

    Разработанная программа имеет два возможных режима запуска. Первый –

    для генерации зашифрованного файла из указанного исполняемого модуля.

    Второй –для запуска защищенного модуля. Рассмотрим шаги, которые

    выполняет механизм шифрования исходного файла.

    1. Инициализация библиотеки Uniprot.

    2. Чтение исполняемого файла в память.

    3. Запуск исполняемого файла с флагом остановки. То есть программа

    загружается, но управления не получает.

    4. Чтение частей загруженной программы и поиск ее соответствующих частей

    в прочитанном файле. Найденные части кода сохраняются отдельно. После

    чего их места в буфере с прочитанным файлом заменяются случайными

    значениями.

    5. Генерация алгоритма шифрования и расшифрования.

    6. Запись в зашифрованный файл буфера с прочитанным, а затем измененным

    файлом. В этот же файл пишутся выделенные фрагменты кода.

    7. Удаление файла шифрования, так как он более не предоставляет интереса.

    Теперь рассмотрим шаги, которые выполняет механизм запускающий

    зашифрованный файл на исполнение.

    1. Поиск соответствующего файла с алгоритмом расшифрования.

    2. Создание временного исполняемого файла и запись в него "испорченного"

    файла (см. механизм шифрования, пункт 4).

    3. Запуск "испорченного" исполняемого файла с флагом остановки. То есть

    программа загружается, но управления не получает.

    4. Восстановление "испорченных" мест в памяти. Изначальный код для

    исправления также хранится в зашифрованном файле.

    5. Передача управления расшифрованному файлу.

    6. Ожидание окончания выполнения запущенной программы.

    7. Удаление временного файла.

    Как видно из описания, данная программа достаточна проста в своем

    устройстве и достаточна эффективна.

    ГЛАВА 4. ПРИМЕНЕНИЕ СИСТЕМЫ ЗАЩИТЫ

    4.1. Состав библиотеки Uniprot

    В состав библиотеки входят следующие компоненты:

    1. Исходные тексты COM модуля Uniprot.dll.

    2. Исходные тексты программы ProtectEXE.exe.

    3. Отдельно собранные файлы, необходимые для подключения Uniprot.dll.

    Этими файлами являются: export.cpp, export.h, Uniprot.tlb.

    4. Файл reg_uniprot.bat для регистрации COM модуля Uniprot.dll.

    5. Руководство программиста по использованию модуля Uniprot.dll.

    6. Руководство программиста по использованию программы ProtectEXE.exe.

    7. Набор примеров написанных на Visual Basic, демонстрирующих работу с

    библиотекой Uniprot.

    4.2. Руководство программиста по использованию модуля Uniprot.dll

    Вначале опишем вспомогательный тип CreateMode, используемый в методе

    Create. Он описывает тип создаваемого зашифрованного файла. В данной версии

    модуля Uniprot он может иметь два значения: DEFAULT и DISABLE_ARC. Первый

    из них сообщает функции, что будет создан обыкновенный зашифрованный файл.

    Данные в нем будут вначале упакованы библиотекой zlib, а затем уже

    зашифрованы. Это может дать существенный выигрыш в плане уменьшения размера

    выходного файла, например, на картинках в формате BMP или простом тексте.

    Использование DISABLE_ARC приведет к созданию зашифрованного, но не сжатого

    файла. Это даст выигрыш по времени при распаковке и упаковке, но не

    уменьшит размер зашифрованного файла. Это также может быть полезно при

    шифровании уже сжатых файлов. Примером могут являться картинки в формате

    JPG.

    enum CreateMode

    {

    DEFAULT = 0,

    DISABLE_ARC = 1

    } CreateMode;

    Теперь опишем функции, предоставляемые интерфейсом IProtect. В этот

    интерфейс собраны функции общего плана и генерации файлов с полиморфными

    алгоритмами шифрование и расшифрования.

    interface IProtect : IDispatch

    {

    [id(1), helpstring("method GetInfo")]

    HRESULT GetInfo(

    [out] short *version, [out] BSTR *info);

    [id(2), helpstring("method Generate UPT files")]

    HRESULT GenerateUPTfiles(

    [in] BSTR algorithmCryptFileName,

    [in] BSTR algorithmDecryptFileName);

    [id(3), helpstring("method Generate Time Limit UPT files")]

    HRESULT GenerateTimeLimitUPTfiles(

    [in] BSTR algorithmCryptFileName,

    [in] BSTR algorithmDecryptFileName,

    [in] long LimitDays);

    [id(4), helpstring("method Generate Time Limit UPT files")]

    HRESULT GenerateTimeLimitUPTfiles2(

    [in] BSTR algorithmCryptFileName,

    [in] BSTR algorithmDecryptFileName,

    [in] long LimitDaysCrypt,

    [in] long LimitDaysDecrypt);

    };

    Теперь опишем каждую из функций интерфейса IProtect.

    HRESULT GetInfo([out] short *version, [out] BSTR *info);

    Функция GetInfo возвращает строку с краткой информации о данном модуле

    и его версии. Может быть использована для получения рядя сведений о модуле.

    Например, имя автора и год создания. Версия хранится в виде числа следующим

    образом: 0x0100 – версия 1.00, 0x0101 – версия 1.01, 0x0234 – версия 2.34 и

    так далее.

    Описание используемых параметров:

    version – сюда будет занесена версия модуля.

    info – сюда будет занесена строка с краткой информацией о модуле.

    HRESULT GenerateUPTfiles(

    [in] BSTR algorithmCryptFileName,

    [in] BSTR algorithmDecryptFileName);

    Функция GenerateUPTfiles генерирует два файла-ключа. Они представляют

    собой сгенерированные полиморфным генератором алгоритмы шифрования и

    расшифрования. При этом расшифровать зашифрованный файл можно только

    соответствующим алгоритмом расшифрования. Генерируемая пара ключей на

    практике уникальна. Вероятность генерации двух одинаковых пар составляет:

    (2^32*3)^5 ( 3.5*10^50. Где 2^32 – случайно используемая константа для

    шифрования. 3 – количество возможных операций над числом. 5 – максимальное

    количество проходов для шифрования.

    Описание используемых параметров:

    algorithmCryptFileName – имя выходного файла с алгоритмом шифрования.

    algorithmDecryptFileName – имя выходного файла с алгоритмом расшифрования.

    HRESULT GenerateTimeLimitUPTfiles(

    [in] BSTR algorithmCryptFileName,

    [in] BSTR algorithmDecryptFileName,

    [in] long LimitDays);

    Функция GenerateTimeLimitUPTfiles генерирует два файла-ключа,

    ограниченных в использовании по времени. В целом функция эквивалентна

    GenerateUPTfiles, но генерируемые ею алгоритмы имеют дополнительное

    свойство. Их использование ограничено определенным временем. Количество

    дней, в течении которых они будут работать, указывается в третьем параметре

    LimitDays. Отсчет начинается с текущего дня. Это может быть полезно,

    например, для ограничения срока использования проектов. Естественна защита

    сама по себе ненадежна, так как невозможно защититься от перевода часов на

    компьютере или модификации кода модуля защиты с целью удаления

    соответствующих проверок. Но тем не менее это может дать дополнительные

    свойства защищенности, по крайней мере от рядовых пользователей.

    Описание используемых параметров:

    algorithmCryptFileName – имя выходного файла с алгоритмом шифрования.

    algorithmDecryptFileName – имя выходного файла с алгоритмом расшифрования.

    LimitDays – количество дней, в течении которых будут функционировать

    сгенерированные алгоритмы.

    HRESULT GenerateTimeLimitUPTfiles2(

    [in] BSTR algorithmCryptFileName,

    [in] BSTR algorithmDecryptFileName,

    [in] long LimitDaysCrypt,

    [in] long LimitDaysDecrypt);

    Функция GenerateTimeLimitUPTfiles2 генерирует два файла-ключа,

    ограниченных в использовании по времени. В отличие от функции

    GenerateTimeLimitUPTfiles, время ограничения использования алгоритма

    шифрования и расшифрования задается не общее, а индивидуальное.

    Описание используемых параметров:

    algorithmCryptFileName – имя выходного файла с алгоритмом шифрования.

    algorithmDecryptFileName – имя выходного файла с алгоритмом расшифрования.

    LimitDaysCrypt – количество дней, в течении которых будут функционировать

    сгенерированный алгоритм шифрования.

    LimitDaysDecrypt – количество дней, в течении которых будут функционировать

    сгенерированный алгоритм расшифрования.

    Следующий предоставляемый модулем защиты интерфейс имеет имя

    IProtectFile. В нем собраны функции работы с зашифрованными файлами, такие

    как создание зашифрованного файла, запись в него, чтение и так далее.

    Идеология работы с зашифрованными файлами построена на дескрипторах. При

    создании или открытии зашифрованного файла ему в соответствие ставится

    дескриптор, с использованием которого в дальнейшем и ведется работа с

    файлом.

    interface IProtectFile : IDispatch

    {

    [id(1), helpstring("method Create New File")]

    HRESULT Create(

    [in] BSTR name,

    [in] CreateMode mode,

    [in] BSTR uptFileNameForWrite,

    [out, retval] short *handle);

    [id(2), helpstring("method Open File")]

    HRESULT Open(

    [in] BSTR name,

    [in] BSTR uptFileNameForRead,

    [in] BSTR uptFileNameForWrite,

    [out, retval] short *handle);

    [id(3), helpstring("method Close File")]

    HRESULT Close(

    [in] short handle);

    [id(4), helpstring("method Write To File")]

    HRESULT Write(

    [in] short handle,

    [in] VARIANT buffer,

    [out, retval] long *written);

    [id(5), helpstring("method Read From File")]

    HRESULT Read(

    [in] short handle,

    [out] VARIANT *buffer,

    [out, retval] long *read);

    [id(6), helpstring("method Write String To File")]

    HRESULT WriteString(

    [in] short handle,

    [in] BSTR buffer,

    [out, retval] long *written);

    [id(7), helpstring("method Read String From File")]

    HRESULT ReadString(

    [in] short handle,

    [out] BSTR *buffer,

    [out, retval] long *read);

    [id(8), helpstring("method From File")]

    HRESULT FromFile(

    [in] short handle,

    [in] BSTR FileName,

    [out, retval] long *read);

    [id(9), helpstring("method To File")]

    HRESULT ToFile(

    [in] short handle,

    [in] BSTR FileName,

    [out, retval] long *written);

    };

    Опишем функции в данном интерфейсе.

    HRESULT Create(

    [in] BSTR name,

    [in] CreateMode mode,

    [in] BSTR uptFileNameForWrite,

    [out, retval] short *handle);

    Функция Create служит для создания новых зашифрованных файлов.

    Поскольку во вновь созданный файл можно только писать, то функции необходим

    для работы только файл с алгоритмом шифрования. Имя файла с этим алгоритмом

    передается третьим параметром и является обязательным. Параметр mode имеет

    тип CreateMode, для чего он служит, было сказано ранее. При успешном

    создании файл, в handle возвращается его дескриптор. По окончании работы с

    файлом, его обязательно нужно закрыть, используя функцию Close.

    Описание используемых параметров:

    name – имя создаваемого файла.

    mode – тип создаваемого файла (см. ранее описание типа CreateMode)

    uptFileNameForWrite – имя файла с алгоритмом шифрования.

    handle – возвращаемый дескриптор созданного файла.

    HRESULT Open(

    [in] BSTR name,

    [in] BSTR uptFileNameForRead,

    [in] BSTR uptFileNameForWrite,

    [out, retval] short *handle);

    Функция Open открывает уже ранее созданный зашифрованный файл. Файл

    может быть открыт как для чтения так и для записи. После чего производить с

    ним можно только одну из двух операций - чтение или запись данных. Это

    обусловлено тем, что записи в файле представляют собой блоки различного

    размера. Данная особенность является следствием необходимости хранения

    такого типа данных, как VARIANT. Таким образом, запись к данным в файле

    может быть только последовательная. И если после открытия файла произвести

    в него запись, то прочитать старые данные из него будет уже невозможно.

    Можно сказать, что открытие файла для записи эквивалентно его созданию, за

    парой исключений. Первое исключение состоит в том, что при открытии файла

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

    паковать данные перед шифрованием или нет. Информация о типе берется из уже

    существующего файла. Второе состоит в том, что для открытия файла, в

    отличии от создания, обязательно необходим файл с алгоритмом расшифрования.

    Режим открытия файла зависит от того, указан ли файл с алгоритмом

    шифрования. Имя файла с алгоритмом расшифрования является обязательным

    параметром. Файл с алгоритмом расшифрования – нет. Если он не будет указан,

    то из такого файла возможно будет только чтение. Если указан, то будет

    возможно как чтение, так и запись. При успешном открытии файла в handle

    возвращается дескриптор этого файла. По окончании работы с файлом его

    обязательно нужно закрыть, используя функцию Close.

    Описание используемых параметров:

    name – имя открываемого файла.

    uptFileNameForRead – имя файла с алгоритмом расшифрования.

    uptFileNameForWrite – имя файла с алгоритмом шифрования.

    handle – возвращаемый дескриптор открытого файла.

    HRESULT Close(

    [in] short handle);

    Функция Close закрывает ранее созданный или отрытый файл. Если

    программа при своей работе создаст новый зашифрованный файл или откроет уже

    существующий файл для записи, но не вызовет функцию Close до своего

    завершения, но файл будет поврежден. После закрытия файла дескриптор

    становится поврежденным и его более нельзя использовать в качестве

    параметра для других функций.

    Описание используемых параметров:

    handle – дескриптор закрываемого файла.

    HRESULT Write(

    [in] short handle,

    [in] VARIANT buffer,

    [out, retval] long *written);

    Функция Write производит запись в файл данных, переданных в переменной

    типа VARIANT. Запись производится в файл связанный с дескриптором,

    передаваемый в параметре handle. В возвращаемом значении written после

    завершения работы функции, будет указано количество байт записанных в файл.

    Поскольку при разработке модуля защиты изначально был заложен принцип

    возможности использования его в программах, написанных на различных языках,

    то немаловажным вопросом является программный интерфейс. Именно по этой

    причине и был выбран типа VARIANT.

    Тип VARIANT предназначен для представления значений, которые могут

    динамически изменять свой тип. Если любой другой тип переменной

    зафиксирован, то в переменные VARIANT можно вносить переменные разных

    форматов. Шире всего VARIANT применяется в случаях, когда фактический тип

    данных изменяется или неизвестен в момент компиляции. Переменным типа

    VARIANT можно присваивать любые значения любых целых, действительных,

    строковых и булевых типов. Для совместимости с другими языками

    Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.