Смекни!
smekni.com

Криптографическая защита информации 2 (стр. 5 из 7)

- \Driver\AES\boxes-fst.inc – таблицы перестановок;

- \Driver\AES\consts.inc – объявление констант и структур;

- \Driver\AES\EncodeDecode.inc – функции шифрования и дешифрации блоков по 16 байт, а также вспомогательные по отношению к ним функции;

- \Driver\AES\usefull_functions.inc – вспомогательные функции и макросы;

- \Loader\*.* – файлы исходных кодов загрузчика и оболочки;

- \Loader\Loader.asm – основной модуль загрузчика;

- \Loader\DelImageDlg.inc – диалог удаления файла образа;

- \Loader\DriverService.inc – функции взаимодействия с драйвером;

- \Loader\MainWndProc.inc – главная оконная функция;

- \Loader\NewImageDlg.inc – диалог создания нового образа диска;

- \Loader\PasswordDlg.inc – диалоговое окно ввода пароля при монтировании файла образа новым виртуальным логическим диском в систему;

- \Loader\TrayIcon.inc – модуль реализации иконки в трее;

- \Loader\Loader.rc – список подключаемых ресурсов;

- \Loader\Loader.rap – файл проекта RadASM;

- \Loader\Loader.exe – сам загрузчик;

- \Loader\Icons\*.ico – иконки, используемые в загрузчике;

- \Loader\Res\*.* – файлы ресурсов используемых в загрузчике;

- \Loader\Res\XPMan.manifest – манифест для программы;

- \Loader\Res\DialogForms.rc – ресурсы диалоговых окон;

- \Loader\Res\LoaderRes.rc – иконки, добавляемые в ресурсы;

- \Loader\Res\XPMan.rc – подключение к проекту манифеста.

3.2.2. Структура данных

Для реализации программного продукта кроме стандартных заголовочных файлов необходимы файлы из KmdKit (Kernel Mode Driver Development Kit for MASM32 programmers) от Four-F, являющийся переработкой заголовочный файлов из DDK. Без них совершенно невозможна компиляция драйвера, а также компиляция нескольких модулей загрузчика.

3.2.3. Средства обмена данными

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

Система взаимодействует с драйвером через диспетчер ввода-вывода (Input/Output Manager), а загрузчик – через функции диспетчера управления службами (Service Control Manager, SCM).

3.2.4. Алгоритм работы программы

Общий принцип работы программного приложения следующий:

После запуска приложения-загрузчика Loader.exe сначала проверяется, а не запущена ли уже эта программа на данной машине. Для этого с помощью функции CreateFileMapping в виртуальной памяти создается блок, имеющий уникальное имя. В случае ошибки, т.е. наличия другой запущенной копии, выводится сообщение об ошибке и работа приложения завершается. Первая копия в конце своей работы освобождает выделенный блок памяти вызовом CloseHandle.

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

При создании окна функцией AC_TrayIconCreate создается иконка в трее, затем с помощью функции AC_FindDriverInMem осуществляется поиск драйвера в памяти. Если драйвер загружен, то вызов AC_GetUsedDriveLetter возвращает букву диска, с которой связан драйвер. Затем в зависимости от состояния драйвера функция AC_TrayIconMenuItemsCheckState меняет иконку в трее и доступность пунктов контекстного меню, информируя пользователя о состоянии драйвера.

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

Сообщения, приходящие от иконки в трее, обрабатываются вызовами функций AC_TrayIconWndProc_WM_COMMAND и AC_TrayIconWndProc_WM_TRAY, где первая обрабатывает выбор пунктов меню пользователем, а вторая вызывает, при необходимости, контекстное меню.

При выборе пункта «Загрузить образ диска» вызывается функция AC_Cmd_LoadDriver, производящая загрузку драйвера и монтирование образа на создаваемый файл. После того, как функция отработает, вызывается AC_TrayIconMenuItemsCheckState.

При выборе пункта «Выгрузить диск» сначала вызывается AC_Cmd_UnloadDriver, выгружающая образ, драйвер и удаляющая диск, затем вызывается AC_TrayIconMenuItemsCheckState.

При выборе пункта «Создать образ диска» вызывается единственная функция NewImageDlgShow, описанная в модуле NewImageDlg.inc и реализующая весь процесс создания нового файла образа диска.

При выборе пункта «Удалить образ диска» также вызывается единственная функция DelImageDlgShow, внутри которой происходит весь процесс удаления существующего файла образа диска.

Алгоритм загрузки образа реализован внутри функции AC_Cmd_LoadDriver, и состоит из следующего: первоначально с помощью функции AC_FindDriverInMem осуществляется поиск драйвера в памяти и, если он работает, выводится сообщение о невозможности загрузки нового образа без предварительной выгрузки старого, после чего происходит прерывание функции загрузки образа. Иначе вызов AC_RegisterService загружает драйвер в память, а функция AC_StartService монтирует диск из файла, путь к которому передан ей в качестве параметра.

Выгрузка образа реализована в функции AC_Cmd_UnloadDriver следующим образом: сначала драйвер ищется вызовом AC_FindDriverInMem. Если он не найден, то выводится соответствующее сообщение и выгрузка на этом завершается. Иначе в функции AC_StopService производится выгрузка образа и удаление диска, затем вызов AC_DeleteService удаляет из памяти сам драйвер.

Процесс создания нового файла образа происходит внутри вызова функции NewImageDlgShow. Данная функция создает модальное диалоговое окно из окна, прописанного в ресурсах исполняемого файла загрузчика. Все действия выполняются внутри диалоговой оконной функции NewImageDlgWndProc. Основное действие выполняется в вызове функции AC_Cmd_LoadDriver, уже описанной выше. Остальные действия заключаются в проверке корректности введенных данных, доступности файла на запись и реализации интерфейса пользователя.

Процесс удаления существующего файла образа происходит внутри вызова функции DelImageDlgShow, по своему устройству весьма похожей на NewImageDlgShow тем, что так же создает диалог из ресурсов. Само удалении происходит в обработчике нажатия кнопки «Удалить».

3.2.5. Описание основных функций программы

Описание функций дано в порядке вхождения модулей, в которых те описаны, в список файлов проектов.

Программа загрузчик (Loader.exe):

ProcessMessages proc hWnd:DWORD

Обработка всех сообщений из очереди для данного окна;

DelImageDlgWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

Диалоговая оконная функция диалога удаления файла;

DelImageDlgShow proc

Вызов диалогового окна удаления файла;

AC_ErrorMessage proc error:DWORD

Вывод системной информации о произошедшей ошибке;

AC_FindDriverInMem proc

Поиск драйвера в памяти и получение его состояния;

AC_RegisterService proc

Загрузка драйвера в память;

AC_StartService proc lpFileName:DWORD

Загрузка образа из указанного файла и создание диска;

AC_StopService proc

Выгрузка образа и удаление диска;

AC_DeleteService proc

Выгрузка драйвера из памяти;

AC_CreateNewImage proc imgsize:DWORD, imgpath:DWORD

Процесс создания нового файла образа диска;

AC_Cmd_LoadDriver proc lpFileName:DWORD

Интерфейс загрузки существующего файла образа диска;

AC_Cmd_UnloadDriver proc

Интерфейс выгрузки драйвера из памяти;

AC_GetUsedDriveLetter proc

Поиск логического диска, с которым связан загруженный драйвер;

WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD

Создание и поддержка главного окна приложения;

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

Оконная функция главного окна приложения;

_SaveFileDialog_ proc lpTitle:DWORD, lpFilter:DWORD, lpDefExt:DWORD

Вызов системного диалога выбора файла;

SwapButtonsEnabling proc hOwnerDlgWnd:DWORD

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

NewImageDlgWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

Оконная функция диалогового окна, в котором создается новый файл образа диска;

NewImageDlgShow proc

Создание диалогового окна, в котором создается новый файл образа диска;

FillDriveLetters proc hWndComboBox:DWORD

Заполнение всплывающего списка выбора (ComboBox) буквами дисков, не зарегистрированных в системе;

PasswordDlgWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

Оконная функция ввода пароля;

PasswordDlgShow proc

Создание диалогового окна ввода пароля;

AC_TrayIconCreate proc

Создание иконки в трее и контекстного меню для нее;

AC_TrayIconDelete proc

Удаление иконки приложения из трея;

AC_TrayIconChange proc hNewIcon:DWORD

Изменение изображения у иконки приложения в трее;

AC_TrayIconWndProc_WM_TRAY proc wParam:DWORD, lParam:DWORD

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

AC_TrayIconWndProc_WM_COMMAND proc wParam:DWORD, lParam:DWORD

Функция обработки сообщений от пунктов контекстного меню;

AC_TrayIconMenuItemsCheckState proc

Функция меняет доступность пунктов меню и изображения иконки в трее в зависимости от текущего состояния драйвера.

Драйвер устройства (ACVHDD.SYS):

AC_OpenFileDrive proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP

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

AC_CloseFileDrive proc pDeviceObject : PDEVICE_OBJECT, pIrp : PIRP

Освобождение выделенных ресурсов, закрытие файла образа, завершение работы системы шифрования;

AC_DriverUnload proc pDriverObject : PDRIVER_OBJECT

Функция вызывается при выгрузке драйвера и освобождает все выделенные ресурсы;

AC_DriverEntry proc pDriverObject : PDRIVER_OBJECT, pusRegistryPath : PUNICODE_STRING

Точка входа при первоначальной загрузке драйвера. Создает само устройство, инициализирует мютекс, а также устанавливает обработчики в DRIVER_OBJECT на системные запросы IRP_MJ_ xxx;

InitAES proc passwrd:DWORD

Инициализация системы шифрования по заданному паролю;

DoneAES proc

Завершение работы системы шифрования;

EncodeBuffer proc src:DWORD, dst:DWORD, block_count:DWORD

Шифрование буфера src длиной block_count 16 байтных блоков с записью результатат в dst;

DecodeBuffer proc src:DWORD, dst:DWORD, block_count:DWORD

Дешифровка буфера src длиной block_count 16 байтных блоков с записью результате в dst;

b_SetUp_Encode proc

Внутренняя функция, используемая при шифровании;