Операционные системы, Исследование объектов Windows. Исследование объектов Windows
![]()
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра вычислительной техники отчет по лабораторной работе № 1 по дисциплине «Операционные системы» Тема: Исследование объектов Windows
Санкт-Петербург 2018 Цель работы Исследование объектных механизмов Win32. Ход работы Задание 1.1. Получение списка отрытых объектов и изучение типов объектов Утилита Process Explorer – замена диспетчера задач Windows с более подробной информацией о процессах и потоках. Запускаем её от имени администратора. Рассмотрим работу утилиты на примере приложения Калькулятор - процесс calc.exe. Получим краткую информацию и список объектов, принадлежащих ему. ![]() Рисунок 1.1. Демонстрация объектов, принадлежащих процессу calc.exe Далее от имени администратора запустим из командной строки утилиту Handle. Параметры запуска ![]() Получим список объектов, принадлежащих процессу calc.exe, ![]() Списки объектов, показанные на рис. 1.1 и рис. 1.2, как и предполагалось, одинаковы. ![]() Рисунок 1.2. Скриншот с демонстрацией списка объектов, принадлежащих процессу с PID 6512. Далее запускаем утилиту с параметрами ![]() ![]() Рисунок 1.3. Список с количеством объектов разного типа, принадлежащих процессу с PID 6512. Запуск Handle.exe с параметрами ![]() ![]() Рисунок 1.4. Сводный список объектов всех процессов системы Опишем назначение каждого из этих типов: ALPC Port – объект ядра, реализующий механизм межпроцессорного взаимодействия. Desktop – файл рабочего стола, ярлык приложения: предоставляет информацию о программе в меню программы – имя, файл значка, команда запуска и т.д. Directory – каталог: файл, содержащий записи о других связанным с процессом файлов, настройки просмотра папки для каталога. EtwRegistration – объект регистрации, связанный с ETW-провайдером пользовательского режима, зарегистрированный с помощью API-функции EventRegister. Event – скрытый файл, содержащий информацию об изменении содержимого папки с течением времени и используемый для синхронизации или уведомления. File – общий файл, экземпляр открытого файла или устройства ввода-вывода. Key – раздел реестра, механизм ссылки на данные реестра. Mutant – механизм обеспечения взаимного исключения для сред Win32 и OS/2. Process – виртуальное адресное пространство и информация для выполнения набора объектов «поток». Section – область разделяемой памяти. Semaphore – счётчик, ограничивающий доступ к ресурсу путем его запрета или разрешения. SymbolicLink – механизм косвенной ссылки на имя объекта. Thread – исполняемая категория внутри процесса. Timer – механизм уведомления потока об истечении конкретного периода времени. Token – закодированный идентификатор, содержащий информацию о правах доступа пользователей. TpWorkerFactory – коллекция потоков, назначенных для выполнения конкретного набора задач. WindowStation – Объект, содержащий буфер обмена, набор глобальных атомов и группу объектов типа рабочий стол Значения остальных типов найти не удалось. Закроем дескриптор объекта, открытого процессом, не завершая сам процесс. С помощью команды ![]() ![]() Рисунок 1.5. Скриншот – получение дескрипторов открытых файлов с расширением .docx Затем с помощью команды ![]() ![]() ![]() Рисунок 1.6. Принудительное закрытие дескриптора Из рис. 1.6 видно, что дескриптор текстового документа закрыт, но сам документ закрыт не был – процесс не завершился. При изменении в документе текста с последующим сохранением заметим, что дескриптор был снова открыт. Задание 1.2. Изучение хранения информации об объектах процесса Программа LiveKD позволяет запускать отладчик ядра Microsoft Kd, входящий в состав WDK, не переводя систему в режим отладки. Запустим программу и получим полную информацию о таблице дескрипторов с её помощью. С помощью команды ![]() Если значение ![]() ![]() ![]() ![]() ![]() Рисунок 2.1. Получение информации из элементов таблицы процесса calc.exe Сверяя этот список с упорядоченным по графе ![]() Установим ![]() Также получим полную информацию об одном конкретном объекте процесса, записав на место ![]() ![]() Рисунок 2.2. Скриншот - получение полной информации обо всех объектах процесса calc.exe ![]() Рисунок 2.3 Получение полной информации об объекте с handle fc, принадлежащем процессу calc.exe Команда ![]() ![]() Рисунок 2.4. Краткая информация о процессе calc.exe Отсюда получаем адрес таблицы процесса calc.exe (ObjectTable) ![]() ![]() ![]() Рисунок 2.5. Поля таблицы объектов процесса В поле TableCode лежит значение ![]() Далее перейдём по физическому адресу таблицы с помощью команды ![]() ![]() Рисунок 2.6. Таблица дескрипторов процесса Первый объект в таблице имеет идентификатор (смещение элемента в таблице) 4, второй 8, а третий – 12. Смещение на 4 объясняется тем, что каждому объекту в соответствие ставится 4 слова. Составляем адреса объектов по принципу ![]() ![]() ![]() ![]() ![]() ![]() Далее с помощью команды ![]() Примечание: продолжение работы выполнялось на следующий день, поэтому адреса различаются. Аналогичным способом получили, что для дескриптора 4 адрес ![]() Таким образом, сверяя адреса объектов, вычисленные по таком принципу, с адресами объектов того же процесса в Process Explorer, получаем несовпадение на ![]() ![]() ![]() ![]() ![]() ![]() Рисунок 2.8. Содержимое заголовка объекта с дескриптором 8 ![]() Рисунок 2.9. Содержимое заголовка объекта с дескриптором 12 Команда ![]() ![]() ![]() ![]() ![]() ![]() ![]() Рисунок 2.10. Описание объекта с дескриптором 4 ![]() Рисунок 2.11. Описание объекта с дескриптором 8 ![]() Рисунок 2.12. Описание объекта с дескриптором 12 Команда ![]() ![]() ![]() ![]() Рисунок 2.13. Сведения о типе для объекта с дескриптором 4 ![]() Рисунок 2.14. Сведения о типе для объекта с дескриптором 8 ![]() Рисунок 2.15. Сведения о типе для объекта с дескриптором 12 Заметим, что для объектов с дескрипторами 8 и 12 типы одинаковы. Для анализа структуры данных, в которой содержатся общие для всех объектов типа атрибуты, используем команду ![]() ![]() ![]() Структуры с общими для типов объектов с дескрипторами 4, 8 и 12 атрибутами представлены на рис. 2.16 -2.18. ![]() Рисунок 2.16. Структура с общими атрибутами и методами для объектов типа Directory ![]() Рисунок 2.17. Структура с общими атрибутами и методами для объектов типа File Вывод В ходе работы были исследованы объектные механизмы Win32 с использованием LiveKD, Handle и Process Explorer на примере процесса notepad.exe, был получен список объектов этого процесса и проанализированы дескрипторы 4, 8, 12 выбранного процесса. Полученные с помощью утилит списки объектов совпали. Удалось получить представление о хранении информации в системе. Проанализированы некоторые дескрипторы процесса. Найти информацию о типах объектов, используемых для хранения данных. |