Вятский государственный гуманитарный университет
Опубликован: 27.05.2013 | Доступ: платный | Студентов: 47 / 4 | Длительность: 09:18:00
Самостоятельная работа 5:

Обеспечение безопасности в Windows

< Лекция 9 || Самостоятельная работа 5: 123 || Лекция 10 >
Аннотация: Цель работы: исследовать структуры данных и функции WRK, используемые для обеспечения безопасности.

Задание 1. Определить идентификатор защиты SID текущего пользователя.

Указания к выполнению.

1. Узнать SID текущего пользователя можно несколькими способами.

Способ 1. При помощи утилиты Process Explorer.

Запустите в виртуальной машине утилиту Process Explorer. Сделайте двойной щелчок на процессе explorer.exe (или любом другом процессе, запущенном текущим пользователем). Когда откроется окно свойств процесса, перейдите на вкладку Security:


На рисунке вверху красным цветом выделен SID пользователя – владельца процесса. В данном случае, процесс запущен пользователем с именем Administrator, который является администратором системы, о чем говорит, во первых, RID = 500 (последнее число в SID, см. статью базы знаний Microsoft "Хорошо известные идентификаторы безопасности в операционных системах Windows"1http://support.microsoft.com/kb/243330/ru), во вторых, то, что пользователь входит в группу администраторов (BUILTIN\Administrators).

Способ 2. При помощи утилиты PsGetSid.

Утилита PsGetSid специально предназначена для получения SID разных учетных записей. Данная утилита входит в набор PsTools и её можно скачать с сайта Sysinternals.

Запустите утилиту PsGetSid на виртуальной машине в командной строке. В качестве параметра утилиты можно указать либо имя учетной записи, либо SID. На рисунке ниже продемонстрированы оба варианта:


Удостоверьтесь, что SID полностью совпадают в первом и втором способах.

Задание 2. Определить тип файловой системы.

Указания к выполнению.

1. Следующие задания в данной лабораторной работе основываются на предположении, что системный раздел (логический диск) на виртуальной машине отформатирован с использованием файловой системы NTFS. Проверить, так ли это, можно следующим образом. Дважды щелкните на ярлыке My Computer – щелкните правой кнопкой на локальном диске C – выберите пункт Properties. На рисунке ниже обведен тип файловой системы логического диска:


Задание 3. Создать программу, которая открывает и читает файл.

Указания к выполнению.

1. Создайте пустой проект с названием, например, ReadFile, в Visual Studio и добавьте файл исходного кода main.cpp (см. лабораторную работу 2 "Процессы и потоки", задание 3).

Сохраните проект в папку c:\Programs\ReadFile.

2. Вставьте в main.cpp следующий исходный код (модифицированный пример из MSDN):

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

#define BUFFERSIZE 81

void __cdecl _tmain(int argc, TCHAR *argv[])
{
HANDLE hFile;					// Дескриптор файла
DWORD  dwBytesRead = 0;			// Количество прочитанных байт
char   ReadBuffer[BUFFERSIZE] = {0};	// Буфер для чтения
char   FileName[] = "input.txt";	// Имя файла

// Точка останова
//__asm int 3

hFile = CreateFile(FileName,	// Имя файла для открытия
GENERIC_READ,		// Открываем для чтения
FILE_SHARE_READ,		// Файл можно открывать другим процессам
NULL,				// Атрибуты безопасности по умолчанию
OPEN_EXISTING,		// Открытие существующего файла
FILE_ATTRIBUTE_NORMAL,	// Атрибуты файла - обычные
NULL);			// Без шаблона

if (hFile == INVALID_HANDLE_VALUE) 
{ 
_tprintf("Terminal failure: unable to open file \"%s\" for read\n", FileName);
system("pause");
return; 
}

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

if( ReadFile(hFile, ReadBuffer, BUFFERSIZE-1, &dwBytesRead, NULL) == FALSE)
{
printf("Terminal failure: Unable to read from file\n");
CloseHandle(hFile);
system("pause");
return;
}

if (dwBytesRead > 0 && dwBytesRead <= BUFFERSIZE-1)
{
ReadBuffer[dwBytesRead]='\0'; // символ с кодом "0"
_tprintf("Data read from %s (%d bytes): \n\n", FileName, dwBytesRead);
printf("%s\n\n", ReadBuffer);
}
else if (dwBytesRead == 0)
{
_tprintf(TEXT("No data read from file %s\n"), FileName);
}
else
{
printf("\n ** Unexpected value for dwBytesRead ** \n");
}

CloseHandle(hFile);

system("pause");
}

Приведенная программа открывает файл input.txt при помощи функции CreateFile, пытается прочитать из него строку символов при помощи функции ReadFile (не более 80 символов) и выводит её на экран.

3. Создайте текстовый файл input.txt в папке проекта, в которой расположен файл main.cpp (например, c:\Programs\ReadFile\ReadFile).

Наберите в нем какой нибудь текст латиницей и сохраните файл.

4. Установите свойства проекта (см. лабораторную работу 2 "Процессы и потоки", задание 3):

  • конфигурацию Release;
  • Библиотека времени выполнения – Многопоточная (/MT).

5. Проверьте работоспособность созданного приложения (клавиша F5):


< Лекция 9 || Самостоятельная работа 5: 123 || Лекция 10 >
Фанис Гильманов
Фанис Гильманов
Россия, г. Нижнекамск
chunhu wu
chunhu wu
Аргентина, jhkh jk k