Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Защита программного обеспечения защищенных автоматизированных систем



Защита программного обеспечения защищенных автоматизированных систем

 

Специальность: 090303 «Информационная безопасность автоматизированных систем»

Специализация: «Защищенные автоматизированные системы управления»

Квалификация выпускника: «Специалист по защите информации»

Форма обучения: очная

 

методические указания по выполнению

лабораторных работ

 

 

Тула 2012


Содержание:

Общие требования к выполнению лабораторных работ 3

Содержание отчета 3

Оборудование 3

Лабораторная работа 1. 4

Структура исполняемых программ 4

Лабораторная работа 2. 6

Резидентные программы 6

Лабораторная работа 3. 9

Обработчики прерываний 9

Лабораторная работа 4. 11

Порождение процессов 11

5. Контрольные вопросы 17

Лабораторная работа 5. 18

Файловые системы 18

Лабораторная работа 6. 21

Структуры исполняемых файлов 21

Лабораторная работа 7. 24

Защищенный режим процессора. Методы адресации и переключение режимов микропроцессора 24

Лабораторная работа 8. 27

Страничная организация памяти 27

Лабораторная работа 9. 30

Защищенный режим процессора. Обработка исключений 30

Лабораторная работа 10. 33

Защищенный режим процессора. Многозадачность 33

Лабораторная работа 11. 36

Процессы и потоки в Windows 36

Лабораторная работа 12. 39

Библиотеки динамической компоновки 39

Лабораторная работа 13. 42

Программирование сервисов 42

Список литературы 45

Список литературы 45

 

 

Общие требования к выполнению лабораторных работ

Содержание отчета

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

титульный лист с названием дисциплины и лабораторной работы;

задание на работу;

теоретическую справку;

постановку задачи;

алгоритмическое обеспечение;

программное обеспечение;

инструкцию по установке;

инструкцию программисту;

тестовое обеспечение;

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

Оборудование

IBM PC/AT – совместимый компьютер с процессором не ниже Pentium и операционной системой Windows XP, рабочая станция виртуальных машин VmWare WorkStation, виртуальная машина MS DOS с установленной операционной системой, транслятор Tasm 3.2, редактор связей Tlink, отладчик ТD 3.2, интегрированная среда разработки программ Visual Studio 2010.

 

Лабораторная работа 1.

Структура исполняемых программ

Цель работы

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

Краткие теоретические сведения

К исполняемым программам относятся программы, размещенные в файлах с расширениями *.BAT, *.EXE, *.COM. * BAT-файлы представляют собой текстовые файлы, состоящие из строк, в которых находятся команды DOS. Командный процессор COMMAND.COM при разборе *.BAT-файла вызывает на выполнение соответствующие системные или пользовательские программы.

Файлы.EXE и.COM являются результатом работы редактора связей LINK на вход которого поступают программы, записанные на объектном языке (.OBJ). Файлы.OBJ являются продуктом работы транслятора с языка высокого уровня или ассемблера. Встретив в.BAT-файле или в командной строке файл с расширением.EXE или.COM, командный процессор, в итоге, вызывает системный загрузчик, задачей которого является размещение этих программ в памяти и передача им управления.

Структура.EXE- и.COM-файлов различна:

 

*.EXE   *.COM
Заголовок Загружаемая часть
Загружаемая часть

 

В памяти после загрузки.EXE- и.COM-программы имеют одинаковую структуру:

1-я часть PSP - префикс программного сегмента (сегменты кода, данных, стека).

PSP предназначен для обеспечения интерфейса программы с DOS и опрератором, формат PSP приведен в табл. 1.

 

Длина 256 байт PSP
Размер занимаемой памяти определяется текущим свободным блоком системной памяти Сегменты кода и данных

Рис.1 Структура загруженной в память программы

 

Таблица 1. Формат PSP

Название Смещ. Дл. Значение поля
Int20h Функция DOS завершения программы
MEM_TOP +2 Нижняя гран. треб. пам. в параграфах
  +4 Резерв
CALL_DISP +5 Дальний вызов диспетчера DOS
  +0Ah Адрес завершения (Int 22h)
  +0Eh Адрес обраб. Ctrl_Break (Int 23h)
  +12h Адрес обр. крит. ошибки (Int 24h)
  +16h Резерв
ENV_SEG +2Ch Сегментный адрес среды окружения
  +2Eh Резерв
  +5Ch FCB1
  +6Ch FCB2
LEN +80h Длина поля UPA
UPA +81h Символы из командной строки

После загрузки программы регистры DS и ES содержат сегментный адрес PSP. Получить адрес PSP также можно, используя функцию DOS Int21h Fn37h, которая в регистре BX возвращает адрес PSP.

 

Оборудование

Задание на работу

Разработать программу в соответствии с заданием, выданным преподавателем по одному из вариантов заданий к лабораторной работе.

Перечень заданий:

1. Создать программу в формате функции int main(int argc, char *argv[]. char* env[]).

2. Создать программу разбора параметров командной строки. Параметры отделяются друг от друга хотя бы одним пробелом. Результат работы – вывод в файл 1.out строк, содержащих сообщения «Параметр 1», «Параметр 2» и т.д. в соответствии с порядком следования в командной строке.

3. Создать программу вывода в файл 1.out ASCII строки – пути загрузки программы. Путь взять из среды окружения.

4. Создать программу сканирования среды окружения на предмет поиска переменной среды TMP1. Значение найденной переменной вывести в файл 1.out.

5. Создать программу вывода в файл адреса обработчика прерывания 23h. Значение адреса вывести в файл 1.out в шестнадцатеричном формате. Адрес обработчика извлечь из PSP.

6. Создать программу вывода в файл адреса обработчика прерывания 24h. Значение адреса вывести в файл 1.out в шестнадцатеричном формате. Адрес обработчика извлечь из PSP.

7. Создать программу вывода в файл адреса PSP родительского процесса. Значение адреса вывести в файл 1.out в шестнадцатеричном формате. Адрес PSP родительского процесса извлечь из текущего PSP.

 

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

Лабораторная работа 2.

Резидентные программы

Цель работы

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

Оборудование

Задание на работу

Разработать программу в соответствии с заданием, выданным преподавателем по одному из вариантов заданий к лабораторной работе.

Перечень заданий:

1. Создать резидентный обработчик прерывания от клавиатуры. Передать данные от клавиатуры через стек.

2. Создать резидентный обработчик прерывания от клавиатуры. Передать данные от клавиатуры через область межзадачных связей.

3. Создать резидентный обработчик прерывания от таймера. Передать данные от таймера через стек.

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

 

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

 

Лабораторная работа 3.

Обработчики прерываний

Цель работы

Получить представление о системе прерываний в микропроцессорах семейства i86. Ознакомиться и практически изучить способы создания обработчиков прерываний.

Оборудование

IBM PC/AT – совместимый компьютер с процессором не ниже i486 и операционной системой МS DOS, компилятор Turbo Assembler.

Задание на работу

Разработать программу в соответствии с заданием, выданным преподавателем по одному из вариантов заданий к лабораторной работе.

Перечень заданий:

1. Создать резидентный обработчик прерывания от клавиатуры

2. Создать транзитный обработчик прерывания от клавиатуры

3. Создать резидентный обработчик прерывания от таймера

4. Создать транзитный обработчик прерывания от таймера

5. Создать резидентный обработчик прерывания в вектор 01.

6. Создать транзитый обработчик прерывания в вектор 01.

7. Создать резидентный обработчик прерывания в вектор 03.

8. Создать транзитый обработчик прерывания в вектор 03.

9. Создать резидентный обработчик прерывания в вектор 04.

10. Создать транзитый обработчик прерывания в вектор 04.

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

Лабораторная работа 4.

Порождение процессов

Цель работы

Получить представление о системе прерываний в микропроцессорах семейства i86. Ознакомиться и практически изучить способы создания обработчиков прерываний.

Пример. Программа загрузки и запуска оверлея.

; В сегменте данных размещаются следующие данные.

D SEGMENT

PATH DB 'E: \USER\SIDOROV\A.OVL', 0

BLOCK DW? ; адрес загрузки оверлея

DW?; фактор привязки

; Как правило, адрес загрузки и фактор привязки совпадают.

OVL_OFF DW 0

OVL_SEG DW 0

D ENDS

; сегмент кода

C SEGMENT

; освободить память Int 21h Fn 4Bh

; получить память Int 21h Fn 48h

; в AX находится сегментный адрес памяти

MOV OVL_SEG, AX

MOV AX, SEG BLOCK

MOV ES, AX

MOV AX, OFFSET BLOCK

MOV AX, OVL_SEG

MOV [BX], AX; занесение в блок адреса загрузки

MOV [BX+2], AX; оверлея и фактора привязки

LEA DX, PATH

MOV AH, 4BH

MOV AL.03H

INT 21h

CALL DWORD PTR OVL_OFF

C ENDS

END [имя точки входа]

 

Задание на работу

Разработать программу в соответствии с заданием, выданным преподавателем по одному из вариантов заданий к лабораторной работе.

Перечень заданий:

1. Создать программу *.com формата, порождающую дочерний процесс

2. Создать программу *.exe формата, порождающую дочерний процесс

3. Создать программу *.com формата, загружающую оверлей

4. Создать программу *.exe формата, загружающую оверлей

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

Лабораторная работа 5.

Файловые системы

Цель работы

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

Оборудование

Задание на работу

Разработать программу в соответствии с заданием, выданным преподавателем по одному из вариантов заданий к лабораторной работе.

Перечень заданий:

1. Установить на виртуальной машине операционную систему MS-DOS. Создать программу подсчета числа файлов в корневом каталоге диска С:.

2. Установить на виртуальной машине операционную систему MS-DOS. Создать программу подсчета числа каталогов в корневом каталоге диска С:.

3. Установить на виртуальной машине операционную систему MS-DOS. Создать программу вывода элемента каталога, соответствующего файлу A.TXT в корневом каталоге диска С:.

4. Установить на виртуальной машине операционную систему MS-DOS. Создать программу вывода элемента каталога, соответствующего каталогу ONE в корневом каталоге диска С:.

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

Лабораторная работа 6.

Цель работы

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

Оборудование

Задание на работу

Разработать программу в соответствии с заданием, выданным преподавателем по одному из вариантов заданий к лабораторной работе.

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

 

Лабораторная работа 7.

Цель работы

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

Оборудование

Задание на работу

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

Содержание отчета

7.1.5. 6. Контрольные вопросы

1. Какие значения может принимать уровень привилегированности PL процессора Pentium?

2. Уровень привилегированности дескриптора - это:

3. Какой формат имеет дескриптор сегмента данных?

4. Какое поле не содержит дескриптор шлюза?

5. Выберите правильную последовательность возврата в реальный режим?

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

7. Какая из приведенных ниже структур может быть пригодна для создания дескрипторов в программе:

8. Какое значение поля TYPE имеют дескрипторы LDT?

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

10. Сколько векторов прерываний зарезервировано фирмой Intel для обработки исключений в процессоре Pentium?

Лабораторная работа 8.

Цель работы

Получить представление о принципах страничной организации памяти в защищенном режиме.

Оборудование

IBM PC/AT – совместимый компьютер с процессором не ниже i486 и операционной системой Windows 95(98), отладчик SoftIce for Windows 98.

Задание на работу

С помошью отладчика SoftIce for WindowsXP проследить механизм работы страничной организации памяти в ОС Windows XP

Переключиться в отладчик нажатием комбинации клавиш Ctrl+D. Настроить интерфейс отладчика таким образом, чтобы можно было просматривать как данные, так и сообщения отладчика (то есть отключить за ненадобностью окна просмотра кода – “WC”, просмотра переменных – “WL”).

Узнать, включен ли механизм страничной организации памяти с помощью просмотра содержимого регистра процессора CR0, если механизм страниц включен, узнать физический адрес каталога страниц, который содержится в регистре CR3. Для этого использовать команду “CPU”.

Ознакомиться с работой команд “PAGE” и “PHYS”.

Внимание!!! При включенном механизме страниц просмотр и изменение данных в памяти возможны только в виртуальном адресном пространстве, а не в физическом. Поэтому прежде чем обратиться к данным по их физическому адресу следует изнать хоть один виртуальный (линейный) адрес с помощью команды “PHYS”, затем по этому адресу и следует производить обращение.

С помощью команды “PAGE” просмотреть сначала каталог страниц (фактически просто таблицу страниц, на которую указывает CR3), а затем хотя бы одну таблицу страниц (на нее указывают элементы каталога страниц). Получив из таблицы страниц линейный базовый адрес любой (произвольной) присутствующей в памяти страницы, просмотреть с помощью команд просмотра данных (“DB”, ”DW”, ”DD”) ее содержимое. При выполнении этих операций обратите внимание на различную информацию, содержищуюся в элементах каталога и таблиц страниц.

С помощью команды “PHYS” и команд просмотра данных (без использования команды “PAGE”) просмотреть содержание каталога страниц (в виде DWORD) и таблиц страниц. Вам предстоит самостоятельно выделить в элементах таблиц и каталога страниц необходимую информацию о местонахождении и атрибутах страницы. Сравните ваши результаты с результатом работы команды “PHYS”.

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

По окончании работы вернитесь из отладчика в ОС Windows XP нажатием Ctrl+D.

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

Что такое линейный и физический адреса, в каких случаях они различны, в каких совпадают?

Что такое страница памяти, какой она имеет размер (в процессорах до PentiumPro) и какие основные ее атрибуты?

Можно ли при включенном механизме страниц обратиться к физическому адресу (если можно, то как)?

Какие регистры процессора хранят информацию о страничной организации, и каково их конкретное назначение?

Что произойдет, если требуемой страницы не окажется в физической памяти (и при каких условиях это может произойти)?

 

Лабораторная работа 9.

Цель работы

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

Оборудование

Задание на работу

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

Содержание отчета

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

1. Что такое ловушки?

2. Что такое ошибки?

3. Что такое промахи?

4. Что может вызвать общую ошибку защиты?

5. Какая таблица отражает правильное распределение приоритетов прерываний или особых ситуаций?

6. Какой формат имеет вентиль исключения?

7. Какая последовательность из приведенных позволит программе корректно организовать обработку прерываний в защищенном режиме?

8. Для какого из приведенных исключений нельзя проанализировать код ошибки?

9. Какое из приведенных ниже исключений обладает свойством повторной запускаемости?

10. Какие особые ситуации не используются в реальном режиме?

Лабораторная работа 10.

Цель работы

Получить представление о принципах организации защиты и мультизадачных программ защищенного режима процессора iPentium.

Оборудование

Задание на работу

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

Содержание отчета

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

1. В какой последовательности процессор проверяет соблюдение мер защиты при выполнении команды загрузки регистров сегментов данных (DS, ES, FS и GS)?

Какую особую ситуацию вызывает отсутствие нужного кодового сегмента или сегмента данных?

Какую особую ситуацию вызывает отсутствие нужного стекового сегмента?

Передача управления в системе, использующей средства защиты, должна осуще­ствляться по определенным правилам. Какой список правил не содержит является корректным?

Что сохраняется в сегменте состояния задачи (выберите наиболее полный ответ)?

Для чего нужна битовая карта ввода/вывода процессора iPentium?

Для каких программ процессор не выполняет проверку битовой карты ввода/вывода (выберите наиболее правильный ответ)?

Как полностью запретить задаче обращаться к портам ввода/вывода (выберите наиболее правильный ответ)?

Какой может быть граница TSS в процессоре iPentium?

Что происходит с состоянием сопроцессора при переключении задач?

Лабораторная работа 11.

Процессы и потоки в Windows

Цель работы

Получить представление о принципах организации процессов и потоков в ОС Windows

Процессы

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

Исполнение процесса заканчивается при завершении всех его потоков.

Пример. Создание дочернего процесса

Дочерний процесс

#include < conio.h>

int main(int argc, char *argv[])

{

int i;

_cputs(" I am created." );

_cputs(" \nMy name is: " );

_cputs(argv[0]);

for (i = 1; i < argc; ++i)

_cprintf (" \n My %d parameter = %s", i, argv[i]);

_cputs(" \nPress any key to finish.\n" );

_getch();

return 0;

}

Родительский процесс

 

#include < windows.h>

#include < conio.h>

int main()

{

char lpszAppName[] = " ConsoleProcess.exe";

STARTUPINFO si;

PROCESS_INFORMATION piApp;

ZeroMemory(& si, sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO);

// создаем новый консольный процесс

if (! CreateProcess(lpszAppName, NULL, NULL, NULL, FALSE,

CREATE_NEW_CONSOLE, NULL, NULL, & si, & piApp))

{

_cputs(" The new process is not created.\n" );

_cputs(" Check a name of the process.\n" );

_cputs(" Press any key to finish.\n" );

_getch();

return 0;

}

_cputs(" The new process is created.\n" );

// ждем завершения созданного процесса

WaitForSingleObject(piApp.hProcess, INFINITE);

// закрываем дескрипторы этого процесса в текущем процессе

CloseHandle(piApp.hThread);

CloseHandle(piApp.hProcess);

return 0;

}

 

Потоки

Поток – последовательность инструкций программы, выполняемая процессором.

Потоком в Windows называется объект ядра, которому операционная система выделяет процессорное время для выполнения приложения.

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

 

Пример. Создание потока

 

#include < windows.h>

#include < iostream.h>

volatile int n;

DWORD WINAPI Add(LPVOID iNum)

{

cout < < " Thread is started." < < endl;

n += (int)iNum;

cout < < " Thread is finished." < < endl;

return 0;

}

int main()

{

int inc = 10; HANDLE hThread; DWORD IDThread;

cout < < " n = " < < n < < endl;

// запускаем поток Add

hThread = CreateThread(NULL, 0, Add, (void*)inc, 0, & IDThread);

if (hThread == NULL)

return GetLastError();

// ждем, пока поток Add закончит работу

WaitForSingleObject(hThread, INFINITE);

// закрываем дескриптор потока Add

CloseHandle(hThread);

cout < < " n = " < < n < < endl;

return 0;

}

 

Пример. Завершение потока

 

#include < windows.h>

#include < iostream.h>

volatile UINT count;

void thread()

{

for (;; )

{ ++count; Sleep(100); } // задержка

}

int main()

{

HANDLE hThread; DWORD IDThread; char c;

hThread =

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread, NULL, 0, & IDThread);

if (hThread == NULL)

return GetLastError();

for (;; )

{

cout < < " Input 'y' to display the count or any char to finish: ";

cin > > c;

if (c == 'y') cout < < " count = " < < count < < endl;

else break;

}

// прерываем выполнение потока thread

TerminateThread(hThread, 0);

// закрываем дескриптор потока

CloseHandle(hThread);

return 0;

}

Оборудование

Задание на работу

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

Содержание отчета

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

Лабораторная работа 12.

Цель работы

Получить представление о принципах создания библиотек динамической компоновки.

Оборудование

Задание на работу

Создать и протестировать работу Dll­-модуля по варианту, заданному преподавателем.

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

Лабораторная работа 13.

Программирование сервисов

Цель работы

Получить представление о принципах создания и использования сервисов.

Концепция сервиса

Сервис – процесс, который выполняет служебные функции.

Сервис запускается при загрузке операционной системы или по специальной команде.

Завершение работы сервиса осуществляется либо по специальной команде, либо при завершении работы ОС.

Пример сервиса – фоновый процесс для доступа к базе данный. Этот тип сервиса называется сервером.

Другой тип сервиса –программа доступа к внешним устройствам.

Монитор – сервис, который отслеживает работу приложения.

Управляет работой сервисов специальноая программа – менеджер сервисов.

Установка сервиса влечет изменение ключа реестра Services.

Структура сервиса

Сервис может быть консольным приложением и приложением с графическим интерфейсом.

Сервисы взаимодействуют с пользователем через рабочий стол или окно сообщений.

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

Создание сервиса.

Пример 1. Создание сервиса

#include < windows.h>

#include < fstream.h>

char service_name[] = " DemoService"; // имя сервиса

SERVICE_STATUS service_status;

SERVICE_STATUS_HANDLE hServiceStatus;

VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);

VOID WINAPI ServiceCtrlHandler(DWORD dwControl);

ofstream out; // выходной файл для протокола работы сервиса

int nCount; // счетчик

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

int main()

{

// инициализируем структуру сервисов

SERVICE_TABLE_ENTRY service_table[] =

{

{service_name, ServiceMain}, // имя сервиса и функция сервиса

{ NULL, NULL } // больше сервисов нет

};

// запускаем диспетчер сервиса

if (! StartServiceCtrlDispatcher(service_table))

{

out.open(" C: \\ServiceFile.log" );

out < < " Start service control dispatcher failed.";

out.close();

return 0;

}

return 0;

}

VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)

{

// регистрируем обработчик управляющих команд для сервиса

hServiceStatus = RegisterServiceCtrlHandler(

service_name, // имя сервиса

ServiceCtrlHandler // обработчик управляющих команд

);

if (! hServiceStatus)

{

out.open(" C: \\ServiceFile.log" );

out < < " Register service control handler failed.";

out.close();

return;

}

// инициализируем структуру состояния сервиса

service_status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;

service_status.dwCurrentState = SERVICE_START_PENDING;

service_status.dwControlsAccepted = SERVICE_ACCEPT_STOP |

SERVICE_ACCEPT_SHUTDOWN;

service_status.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;

service_status.dwServiceSpecificExitCode = 0;

service_status.dwCheckPoint = 0;

service_status.dwWaitHint = 5000;

// устанавливаем состояние сервиса

if (! SetServiceStatus(hServiceStatus, & service_status))

{

out.open(" C: \\ServiceFile.log" );

out < < " Set service status 'SERVICE_START_PENDING' failed.";

out.close();

return;

}

// определяем сервис как работающий

service_status.dwCurrentState = SERVICE_RUNNING;

// нет ошибок

service_status.dwWin32ExitCode = NO_ERROR;

// устанавливаем новое состояние сервиса

if (! SetServiceStatus(hServiceStatus, & service_status))

{

out.open(" C: \\ServiceFile.log" );

out < < " Set service status 'START_PENDING' failed.";

out.close();

return;

}

// открываем файл протокола работы сервиса

out.open(" C: \\ServiceFile.log" );

out < < " The service is started." < < endl < < flush;

out < < " My name is: " < < lpszArgv[0] < < endl < < flush;

for (int i = 1; i < (int)dwArgc; ++i)

out < < " My " < < i < < " parameter = " < < lpszArgv[i] < < endl < < flush;

// рабочий цикл сервиса

while (service_status.dwCurrentState == SERVICE_RUNNING)

{

++nCount;

Sleep(3000);

}

}

VOID WINAPI ServiceCtrlHandler(DWORD dwControl)

{

switch(dwControl)

{

case SERVICE_CONTROL_STOP: // остановить сервис

// записываем конечное значение счетчика

out < < " Count = " < < nCount < < endl;

out < < " The service is finished." < < endl < < flush;

// закрываем файл

out.close();

// устанавливаем состояние остановки

service_status.dwCurrentState = SERVICE_STOPPED;

// изменить состояние сервиса

SetServiceStatus(hServiceStatus, & service_status);

break;

 

case SERVICE_CONTROL_SHUTDOWN: // завершить сервис

service_status.dwCurrentState = SERVICE_STOPPED;

// изменить состояние сервиса

SetServiceStatus(hServiceStatus, & service_status);

break;

default:

// увеличиваем значение контрольной точки

++service_status.dwCheckPoint;

// оставляем состояние сервиса без изменения

SetServiceStatus(hServiceStatus, & service_status);

break;

}

return;

}

 

Установка сервиса

Пример 2. Установка сервиса

#include < windows.h>

#include < iostream.h>

int main()

{

SC_HANDLE hServiceControlManager, hService;

// связываемся с менеджером сервисов

hServiceControlManager = OpenSCManager(

NULL, // локальная машина

NULL, // активная база данных сервисов

SC_MANAGER_CREATE_SERVICE // возможно создание сервиса

);

if (hServiceControlManager == NULL)

{

cout < < " Open service control manager failed." < < endl

< < " The last error code: " < < GetLastError() < < endl

< < " Press any key to exit." < < endl;

cin.get();

return 0;

}

cout < < " Service control manager is opened." < < endl

< < " Press any key to continue." < < endl;

cin.get();

// устанавливаем новый сервис

hService = CreateService(

hServiceControlManager, // дескриптор менеджера сервисов

" DemoService", // внутреннее имя сервиса, используемое SCM

" Demo_Service", // внешнее имя сервиса в панели управления

SERVICE_ALL_ACCESS, // полный контроль над сервисом

SERVICE_WIN32_OWN_PROCESS, // сервис является процессом

SERVICE_DEMAND_START, // запускается сервис по требованию

SERVICE_ERROR_NORMAL, // обработка ошибок нормальная

" C: \\DemoService.exe", // путь к сервису

NULL, // сервис не принадлежит к группе

NULL, // тэг группы не изменяется

NULL, // сервис не зависит от других сервисов

NULL, // имя совпадает с текущим именем учетной записи

NULL // пароля нет

);

if (hService == NULL)

{

cout < < " Create service failed." < < endl

< < " The last error code: " < < GetLastError() < < endl

< < " Press any key to exit." < < endl;

cin.get();

// закрываем дескриптор менеджера сервисов

CloseServiceHandle(hServiceControlManager);

return 0;

}

cout < < " Service is installed." < < endl

< < " Press any key to exit." < < endl;

cin.get();

// закрываем дескрипторы

CloseServiceHandle(hService);

CloseServiceHandle(hServiceControlManager);

return 0;

}

 

Запуск сервиса

Пример 3. Открытие и запуск сервиса

#include < windows.h>

#include < iostream.h>

int main()

{

char service_name[] = " DemoService"; // имя сервиса

char *param[] = { " p1", " p2", " p3" }; // список параметров

SC_HANDLE hServiceControlManager, hService;

// связываемся с менеджером сервисов

hServiceControlManager = OpenSCManager(

NULL, // локальная машина

NULL, // активная база данных сервисов

SC_MANAGER_CONNECT // соединение с менеджером сервисов

);

if (hServiceControlManager == NULL)

{

cout < < " Open service control manager failed." < < endl

< < " The last error code: " < < GetLastError() < < endl

< < " Press any key to continue." < < endl;

cin.get();

return 0;

}

cout < < " Service control manager is opened." < < endl

< < " Press any key to continue." < < endl;

cin.get();

// открываем сервис

hService = OpenService(

hServiceControlManager, // дескриптор менеджера сервисов

service_name, // имя сервиса

SERVICE_ALL_ACCESS // полный доступ к сервису

);

if (hService == NULL)

{

cout < < " Open service failed." < < endl

< < " The last error code: " < < GetLastError() < < endl

< < " Press any key to exit." < < endl;

cin.get();

// закрываем дескриптор менеджера сервисов

CloseServiceHandle(hServiceControlManager);

return 0;

}

cout < < " Service is opened." < < endl

< < " Press any key to continue." < < endl;

cin.get();

// стартуем сервис

if (! StartService(

hService, // дескриптор сервиса

3, // три параметра

(const char**)param // указатель на массив параметров

))

{

cout < < " Start service failed." < < endl

< < " The last error code: " < < GetLastError() < < endl

< < " Press any key to exit." < < endl;

cin.get();

// закрываем дескрипторы

CloseServiceHandle(hServiceControlManager);

CloseServiceHandle(hService);

return 0;

}

cout < < " The service is started." < < endl

< < " Press any key to exit." < < endl;

cin.get();

// закрываем дескрипторы

CloseServiceHandle(hServiceControlManager);

CloseServiceHandle(hService);

return 0;

}

Оборудование

Задание на работу

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

Содержание отчета

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

 

Список литературы

Основная литература

1. Гордеев, А.В. Системное программное обеспечение: Учебник для вузов / А.В.Гордеев, А.Ю.Молчанов.— М.и др.: Питер, 2003.— 736с.< 6>

2. Гордеев, А.В. Системное программное обеспечение: Учебник для вузов / А.В.Годеев, А.Ю.Молчанов.— СПб.[и др.]: Питер, 2001.— 736с.< 7>

3. Агуров, П.В. Интерфейс USB.Практика использования и программирования / П.В.Агуров.— СПб.: БХВ-Петербург, 2005.— 576с.< 5>

4. Хорев, П.Б. Методы и средства защиты информации в компьютерных системах: учеб.пособие для вузов / П.Б.Хорев.— 3-е изд., стер. — М.: Академия, 2007.— 256с.< 6>

5. Хорев, П.Б. Методы и средства защиты информации в компьютерных системах: учеб.пособие для вузов / П.Б.Хорев.— 2-е изд., стер. — М.: Академия, 2006.— 256с.< 6>

Дополнительная

1. Петраков, А.В. Основы практической защиты информации: учеб.пособие для вузов / А.В.Петраков.— 3-е изд. — М.: Радио и связь, 2001.— 361с.< 3>

2. Рябко, Б.Я. Криптографические методы защиты информации: учеб.пособие для вузов / Б.Я.Рябко, А.Н.Фионов.— М.: Горячая Линия-Телеком, 2005.— 229с.< 5>

3. Верма, Р.Д. Справочник по функциям Win32 API / Р.Д.Верма.— 2-е изд., доп. — М.: Горячая линия-Телеком, 2005.— 551с.< 1>

4. Зубков, С.В. Assembler для DOS, Windows и Unix / С.В.Зубков.— 3-е изд., стер. — М.: ДМК, 2004.— 608с.< 7>

5. Касперски, К. Компьютерные вирусы изнутри и снаружи / К.Касперски.— СПб.: Питер, 2006.— 527с.< 4>

6. Касперски, К. Восстановление данных: практ.руководство: пер.с англ. / К.Касперски.— СПб.: БХВ-Петербург, 2007.— 352с.< 3>

 

Периодические издания

  1. Журнал " Вестник информационной безопасности"
  2. Журнал " Вопросы защиты информации"
  3. Журнал " Защита информации. Инсайд"

Защита программного обеспечения защищенных автоматизированных систем

 

Специальность: 090303 «Информационная безопасность автоматизированных систем»

Специализация: «Защищенные автоматизированные системы управления»

Квалификация выпускника: «Специалист по защите информации»

Форма обучения: очная

 

методические указания по выполнению

лабораторных работ

 

 

Тула 2012


Содержание:

Общие требования к выполнению лабораторных работ 3

Содержание отчета 3

Оборудование 3

Лабораторная работа 1. 4

Структура исполняемых программ 4

Лабораторная работа 2. 6

Резидентные программы 6

Лабораторная работа 3. 9

Обработчики прерываний 9

Лабораторная работа 4. 11

Порождение процессов 11

5. Контрольные вопросы 17

Лабораторная работа 5. 18

Файловые системы 18

Лабораторная работа 6. 21

Структуры исполняемых файлов 21

Лабораторная работа 7. 24

Защищенный режим процессора. Методы адресации и переключение режимов микропроцессора 24

Лабораторная работа 8. 27

Страничная организация памяти 27

Лабораторная работа 9. 30

Защищенный режим процессора. Обработка исключений 30

Лабораторная работа 10. 33

Защищенный режим процессора. Многозадачность 33

Лабораторная работа 11. 36

Процессы и потоки в Windows 36

Лабораторная работа 12. 39

Библиотеки динамической компоновки 39

Лабораторная работа 13. 42

Программирование сервисов 42

Список литературы 45

Список литературы 45

 

 

Общие требования к выполнению лабораторных работ

Содержание отчета

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

титульный лист с названием дисциплины и лабораторной работы;

задание на работу;

теоретическую справку;

постановку задачи;

алгоритмическое обеспечение;

программное обеспечение;

инструкцию по установке;

инструкцию программисту;

тестовое обеспечение;

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

Оборудование


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-03; Просмотров: 841; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.439 с.)
Главная | Случайная страница | Обратная связь