Лекция 6. Запуск...
Transcript of Лекция 6. Запуск...
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Название
Лекция 6. Запуск процессаАрхитектура ОС Windows
7 ноября 2013 г.
Лекция 6 1 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Секции модуля
не используется
.reloc
другие секции
.data
.text
таблица секций
заголовок PE
заголовок DOS
в файле
другие секции
.data
.text
таблица секций
заголовок PE
заголовок DOS
в памяти
Рис. 1: секции модуля
Лекция 6 2 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Секции
Название Назначение.text Секция кода.data Секция данных чтения/записи. Глобальные переменные..rdata Секция данных только на чтение. Строковые литералы, таб-
лицы виртуальных функций C++/COM..idata Таблица импорта. Обычно → .rdata.edata Таблица экспорта (.exp). Обычно → .text или .rdata.rsrc Ресурсы, только для чтения. Не должна иметь другого на-
звания и сливаться с другими секциями..bss Неинициализированные данные (обычно вместо — .data
с достаточным размером— VirtualSize).
Таблица 1: стандартные секции
Лекция 6 3 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Секции (окончание)
Название Назначение.crt Данные для поддержки библиотеки времени выполнения
C++..tls Данные локального хранилища потока (TLS): начальные
значения, . . .(__declspec (thread) DWORD gt_dwStartTime = 0;)
.reloc Базовые смещения в исполняемом файле. Как правило,DLL. Удаляется с ключом /FIXED
.didat Таблица импорта для библиотек с отложенной загрузкой.
Таблица 2: стандартные секции (окончание)
Лекция 6 4 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Пример общих данных
Пример
#pragma data_seg(".shared")
int g_n = 10; // Инициализация!
#pragma data_seg()#pragma comment(linker, "/SECTION:.shared,RWS")
int g_n2;
// . . .
Лекция 6 5 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Формат файла PE
Заголовок MS-DOSне используется
Информация OEM
Смещение PE (e_lfanew)
Заглушка MS-DOS
Секция MS-DOS
не используется
Заголовки секций
Таблица импорта
Таблица экспорта
Базовые перемещения
Ресурсы
Рис. 2: формат Portable Executable
Лекция 6 6 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Формат секции COFF
Заголовок COFF
Заголовки секций
Двоичные данные:
КодДанные
Отладочная информация
Перемещения
Рис. 3: формат Portable Executable
Лекция 6 7 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Заголовки NT
IMAGE_NT_HEADERS
typedef struct _IMAGE_NT_HEADERS{DWORD Signature; // PE\0\0IMAGE_FILE_HEADER FileHeader; // COFFIMAGE_OPTIONAL_HEADER32 OptionalHeader;
}IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
Лекция 6 8 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Просмотр структуры файла
Рис. 4: окно программы PEBrowse64
Лекция 6 9 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Поля заголовка файла
Название НазначениеMachine Целевая архитектура процессора.NumberOfSections Количество секций (таблица секций сразу после
IMAGE_NT_HEADERS)TimeDateStamp Дата создания файлаPointerToSymbolTable Смещение таблицы символов COFF (в основ-
ном, для OBJ-файлов), можно 0.NumberOfSymbols Количество символов COFFSizeOfOptionalHeader Размер заголовка IMAGE_OPTIONAL_HEADER— сра-
зу после IMAGE_FILE_HEADER (0 для OBJ-файлов)Characteristics Набор флагов
Таблица 3: формат заголовка COFF (IMAGE_FILE_HEADER, . . . )
Лекция 6 10 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Архитектуры
IMAGE_FILE_MACHINE_UNKNOWNIMAGE_FILE_MACHINE_AMD64IMAGE_FILE_MACHINE_ARMIMAGE_FILE_MACHINE_ARMNTIMAGE_FILE_MACHINE_ARM64IMAGE_FILE_MACHINE_EBCIMAGE_FILE_MACHINE_I386IMAGE_FILE_MACHINE_IA64IMAGE_FILE_MACHINE_THUMB
. . .
Таблица 4: константы типов архитектур
Лекция 6 11 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Характеристики
IMAGE_FILE_RELOCS_STRIPPEDIMAGE_FILE_EXECUTABLE_IMAGEIMAGE_FILE_LARGE_ADDRESS_AWAREIMAGE_FILE_32BIT_MACHINEIMAGE_FILE_DEBUG_STRIPPEDIMAGE_FILE_REMOVABLE_RUN_FROM_SWAPIMAGE_FILE_NET_RUN_FROM_SWAPIMAGE_FILE_DLL
. . .
Таблица 5: константы характеристик
Лекция 6 12 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Пример заголовка файла (notepad.exe)
Пример (IMAGE_FILE_HEADER)
Machine: AMD64NumberOfSections: 6TimeDateStamp: 0x4A5BC9B3PointerToSymbolTable: 0x00000000NumberOfSymbols: 0x00000000SizeOfOptionalHeader: 0x00F0Characteristics: 0x0022
EXECUTABLE_IMAGELARGE_ADDRESS_AWARE
Лекция 6 13 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Поля дополнительного заголовка
Название НазначениеСтандартные поля
AddressOfEntryPoint RVA первого байта точки входа или 0.BaseOfCode RVA первого байта кодаBaseOfData RVA первого байта данных (нет в PE32+)
Поля, специфичные для Windows (только файл образа)ImageBase Предпочтительный адрес загрузки модуля (по
умолчанию 0x00400000 для EXE, 0x10000000 дляDLL, VA = ImageBase + RVA).
SectionAlignment Выравнивание секций в памяти (0x1000)FileAlignment Выравнивание секций в файле (0x200)SizeOfImage RVA ячейки за последней секцией (в памяти)SizeOfHeaders Размер всех заголовков до первой секции (в фай-
ле)
Таблица 6: основные поля IMAGE_OPTIONAL_HEADER
Лекция 6 14 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Поля дополнительного заголовка (окончание)
Название НазначениеSubsystem ПодсистемаDllCharacteristics Характеристики динамической библиотекиSizeOfStackReserve Зарезервированный объём стека основного пото-
каSizeOfStackCommit Изначально выделенный объём стекаSizeOfHeapReserve Зарезервированный объём кучиSizeOfHeapCommit Изначльно выделенный объём кучиNumberOfRvaAndSizes Количество элементов таблицы каталога данных
за концом IMAGE_OPTIONAL_HEADER. Каждый опре-деляет RVA и размер.
Таблица 7: основные поля IMAGE_OPTIONAL_HEADER (окончание)
Лекция 6 15 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Подсистема
IMAGE_SUBSYSTEM_UNKNOWNIMAGE_SUBSYSTEM_NATIVEIMAGE_SUBSYSTEM_WINDOWS_GUIIMAGE_SUBSYSTEM_WINDOWS_CUIIMAGE_SUBSYSTEM_POSIX_CUIIMAGE_SUBSYSTEM_EFI_APPLICATIONIMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVERIMAGE_SUBSYSTEM_EFI_ROM
. . .
Таблица 8: константы подсистем
Лекция 6 16 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Элементы таблицы каталога данных
IMAGE_DATA_DIRECTORY
typedef struct _IMAGE_DATA_DIRECTORY{DWORD VirtualAddress; // RVA (относительно ImageBase)DWORD Size;
}IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
Лекция 6 17 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Индексы каталога данных
Индекс СекцияIMAGE_DIRECTORY_ENTRY_EXPORT .edataIMAGE_DIRECTORY_ENTRY_IMPORT .idataIMAGE_DIRECTORY_ENTRY_RESOURCE .rsrcIMAGE_DIRECTORY_ENTRY_BASERELOC .relocIMAGE_DIRECTORY_ENTRY_DEBUG .debugIMAGE_DIRECTORY_ENTRY_TLS .tlsIMAGE_DIRECTORY_ENTRY_IAT —IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT .didata
. . .
Таблица 9: константы индексов основных элементов каталога данных
Лекция 6 18 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Пример дополнительного заголовка (notepad.exe)
Пример (IMAGE_OPTIONAL_HEADER)
Magic: 0x020BMajorLinkerVersion: 0x09MinorLinkerVersion: 0x00SizeOfCode: 0x0000A800SizeOfInitializedData: 0x00025800SizeOfUninitializedData: 0x00000000AddressOfEntryPoint: 0x00003570BaseOfCode: 0x00001000ImageBase: 0x00000001‘00000000SectionAlignment: 0x00001000FileAlignment: 0x00000200MajorOperatingSystemVersion: 0x0006MinorOperatingSystemVersion: 0x0001MajorImageVersion: 0x0006
Пример (продолжение)
MinorImageVersion: 0x0001MajorSubsystemVersion: 0x0006MinorSubsystemVersion: 0x0001Win32VersionValue: 0x00000000SizeOfImage: 0x00035000SizeOfHeaders: 0x00000600CheckSum: 0x0003E749Subsystem: 0x0002WINDOWS_GUI
DllCharacteristics: 0x8140DLL can move.Image is NX compatible.TERMINAL_SERVER_AWARE
Лекция 6 19 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Обзор формата PEЗаголовок файла (IMAGE_FILE_HEADER)Дополнительный заголовок (IMAGE_OPTIONAL_HEADER)Таблица каталога данных
Пример дополнительного заголовка (окончание)
Пример (окончание)
SizeOfStackReserve: 0x0000000000080000SizeOfStackCommit: 0x0000000000011000SizeOfHeapReserve: 0x0000000000100000SizeOfHeapCommit: 0x0000000000001000LoaderFlags: 0x00000000NumberOfRvaAndSizes: 0x00000010IMAGE_DIRECTORY_ENTRY_EXPORT (0)
VirtualAddress: 0x00000000Size: 0x00000000
IMAGE_DIRECTORY_ENTRY_IMPORT (1)VirtualAddress: 0x0000CFF8Size: 0x0000012C
...
Лекция 6 20 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Заголовки секций (после дополнительного заголовка)
Название НазначениеName Название (до 8 символов).VirtualSize Размер в памяти (для исполняемых образов).VirtualAddress RVA начала секции (для исполняемых образов).SizeOfRawData Размер проинициализированных данных (6
VirtualSize).PointerToRawData Файловая позиция начала данных (кратно
FileAlignment).PointerToRelocations Файловая позиция начала данных перемещения
или 0.Characteristics Флаги секции.
Таблица 10: основные поля IMAGE_SECTION_HEADER
Лекция 6 21 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Флаги секций
IMAGE_SCN_CNT_CODEIMAGE_SCN_CNT_INITIALIZED_DATAIMAGE_SCN_CNT_UNINITIALIZED_DATAIMAGE_SCN_LNK_NRELOC_OVFLIMAGE_SCN_MEM_DISCARDABLEIMAGE_SCN_MEM_NOT_CACHEDIMAGE_SCN_MEM_NOT_PAGEDIMAGE_SCN_MEM_SHAREDIMAGE_SCN_MEM_EXECUTEIMAGE_SCN_MEM_READIMAGE_SCN_MEM_WRITE
. . .
Таблица 11: константы подсистем
Лекция 6 22 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Примеры характеристик основных секций
Имя Характеристики.text IMAGE_SCN_CNT_CODE |
IMAGE_SCN_MEM_EXECUTE |IMAGE_SCN_MEM_READ
.data, .idata, .tls IMAGE_SCN_CNT_INITIALIZED_DATA |IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
.rdata, .edata, .rsrc IMAGE_SCN_CNT_INITIALIZED_DATA |IMAGE_SCN_MEM_READ
.reloc IMAGE_SCN_CNT_INITIALIZED_DATA |IMAGE_SCN_MEM_READ |IMAGE_SCN_MEM_DISCARDABLE
.bss IMAGE_SCN_CNT_UNINITIALIZED_DATA |IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE
. . .
Таблица 12: сочетания характеристик для основных секций
Лекция 6 23 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Примеры заголовков секций (notepad.exe)
Пример (IMAGE_SECTION_HEADER)
Name: .textVirtualSize: 0x0000A770VirtualAddress: 0x00001000SizeOfRawData: 0x0000A800PointerToRawData: 0x00000600PointerToRelocations: 0x00000000PointerToLinenumbers: 0x00000000NumberOfRelocations: 0x00000000NumberOfLinenumbers: 0x00000000Characteristics: 0x60000020
Contains code.Is executable.Is readable.
Пример (окончание)
Name: .rdataVirtualSize: 0x00003160VirtualAddress: 0x0000C000SizeOfRawData: 0x00003200PointerToRawData: 0x0000AE00PointerToRelocations: 0x00000000PointerToLinenumbers: 0x00000000NumberOfRelocations: 0x00000000NumberOfLinenumbers: 0x00000000Characteristics: 0x40000040Contains initialized data.Is readable.
Лекция 6 24 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Таблицы экспорта
Название НазначениеЭкспорт по порядковым номерам
Таблица каталога экспорта Содержит расположения и размерыостальных таблиц экспорта.
Таблица экспорта адресов (EAT) Массив RVA экспортируемых симво-лов (или строк перенаправления).
Экспорт по именамТаблица указателей имён Массив указателей на экспортртуе-
мые символы, сортированные в по-рядке возрастания.
Таблица номеров Массив порядковых номеров, ∼ эле-ментам предыдущего массива.
Таблица экспортируемых имён Серия строк, на которые ссылаютсяуказатели.
Таблица 13: таблицы экспорта
Лекция 6 25 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Секция импорта
Таблица каталога импорта
Нулевая запись
Таблица поиска импортабиблиотеки 1
NULL
Таблица поиска импортабиблиотеки 2
NULL
. . .
Рис. 5: структура секции импорта
Лекция 6 26 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Запись таблицы каталога импорта
Название НазначениеOriginalFirstThunk RVA таблицы поиска импорта (несвязанной IAT).Name RVA имени библиотеки.FirstThunk RVA IAT.
Таблица 14: основные поля IMAGE_IMPORT_DESCRIPTOR
0153163
флаг 00 . . . 0 позиция
RVA подсказки/имени
Рис. 6: формат записи таблицы поиска имени (32/64 бит)
Лекция 6 27 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Запись таблицы подсказки/имени
Название НазначениеПодсказка Индекс в таблице указателей экспортируемых имён.Имя ASCII-строка.
Таблица 15: основные поля таблицы подсказки/имени
Лекция 6 28 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Пример
Пример
void MyFunction();
Пример
__declspec(dllimport) void MyFunction();
Пример
call 0x0040100C ; ∼ MyFunction; . . .0x0040100C: jmp dword ptr [0x00405030] ; ∼ __imp__MyFunction
Пример
call dword ptr [0x00405030]
Лекция 6 29 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Пример таблицы импорта (notepad.exe)
Пример (таблица импорта)
OriginalFirstThunk: 0x0000D1E8TimeDateStamp: 0xFFFFFFFFForwarderChain: 0xFFFFFFFFName: 0x0000D1D4 - ADVAPI32.dllFirstThunk: 0x0000C0000x10000D1E8: 00000000‘0000D9D8 000007FF‘7FF21ED0 (638, RegSetValueExW)0x10000D1F0: 00000000‘0000D9EA 000007FF‘7FF2C2D0 (622, RegQueryValueExW)0x10000D1F8: 00000000‘0000D9FE 000007FF‘7FF21F00 (572, RegCreateKeyW)0x10000D200: 00000000‘0000DA0E 000007FF‘7FF30710 (560, RegCloseKey)0x10000D208: 00000000‘0000DA1C 000007FF‘7FF306F0 (609, RegOpenKeyExW)0x10000D210: 00000000‘0000DA2C 000007FF‘7FF30720 (384, IsTextUnicode)...
Лекция 6 30 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Пример таблицы адресов импорта (notepad.exe)
Пример (таблица импорта)
Table: 10x000000010000C000: IATEntry001: 0x000007FF‘7FF21ED00x000000010000C008: IATEntry002: 0x000007FF‘7FF2C2D00x000000010000C010: IATEntry003: 0x000007FF‘7FF21F000x000000010000C018: IATEntry004: 0x000007FF‘7FF307100x000000010000C020: IATEntry005: 0x000007FF‘7FF306F00x000000010000C028: IATEntry006: 0x000007FF‘7FF307200x000000010000C030: IATEntry007: 0x000007FF‘7FF27E040x000000010000C038: IATEntry008: 0x000007FF‘7FF1C2A80x000000010000C040: IATEntry009: 0x000007FF‘7FF1C2C00x000000010000C048: IATEntry010: 0x000007FF‘7FF1C6FC...
Лекция 6 31 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Пример
Пример
0x00401020: 8B 0D 34 D4 40 00 mov ecx,dword ptr [0x0040D434]; ImageBase == 0x00400000
Лекция 6 32 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Таблица перемещений
IMAGE_BASE_RELOCATION
typedef struct _IMAGE_BASE_RELOCATION{DWORD VirtualAddress; // RVA страницыDWORD SizeOfBlock;
// WORD TypeOffset[1];}IMAGE_BASE_RELOCATION;
0111215
тип смещение
Рис. 7: формат записи таблицы «тип/смещение» (16 бит)
Лекция 6 33 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Типы перемещения
IMAGE_REL_BASED_ABSOLUTEIMAGE_REL_BASED_HIGHIMAGE_REL_BASED_LOWIMAGE_REL_BASED_HIGHLOWIMAGE_REL_BASED_HIGHADJIMAGE_REL_BASED_DIR64
. . .
Таблица 16: основные типы перемещения
Лекция 6 34 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Формат заголовка секций (IMAGE_SECTION_HEADER)Таблица экспортаТаблица импортаТаблица перемещений
Пример таблицы перемещений (notepad.exe)
Пример (таблица перемещений)
Table: 1VirtualAddress: 0x0000C000 - .rdataSizeOfBlock: 0x00000014
0x0000CA88 DIR64 - 0x00000001‘000033000x0000CAA0 DIR64 - 0x00000001‘00003D940x0000CAA8 DIR64 - 0x00000001‘000033500x0000CE58 DIR64 - 0x00000001‘000104A00x0000CE60 DIR64 - 0x00000001‘00010540
...
Лекция 6 35 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Алгоритм CreateProcess()Открытие файла образаИсполнительная система
Порядок создания процесса
Алгоритм CreateProcess...()
1 Проверка и разбор параметров.2 Открытие исполняемого файла.3 Создание объекта процесса
исполнительной системы.4 Создание элементов основного
потока.5 Инициализация в подсистеме
Windows.6 Запуск на исполнение основного
потока7 Завершение инициализации
в контексте потока.
вызывающийпроцесс
подсистемаWindows
созданныйпроцесс
1
2
3
4
5
6 7
Рис. 8: порядок исполнения
Лекция 6 36 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Алгоритм CreateProcess()Открытие файла образаИсполнительная система
Открытие файла образа
Тип файла Исполняемый образ ЭтапПриложение Windows Образ файла 3Есть ключ с именем отладчика Образ, указанный в ключе 1Приложение Win16 Ntvdm.exe (общий или новый) 1Приложение MS-DOS Ntvdm.exe (общий) 1Приложение POSIX Posix.exe 1Сценарий (.bat, .cmd) Cmd.exe 1Приложение Win64 на не под-держивающей архитектуре
— ошибка
Неправильный формат, невоз-можно открыть
— ошибка
Таблица 17: варианты алгоритма при открытии исполняемого образа в различныхситуациях
Лекция 6 37 / 38
НачалоФормат заголовков исполняемых файлов
Формат секцийСоздание процесса
Алгоритм CreateProcess()Открытие файла образаИсполнительная система
Инициализация исполнительной системы
Порядок работы
1 Заполнение структуры EPROCESS (таблица дескрипторов, атрибутыбезопасности, код возврата, идентификатор, идентификатор родителя,имя образа, базовый адрес, . . . )
2 Создание начального адресного пространства.3 Заполнение структуры KPROCESS (состояние, время ядра/пользователя,
аффинность, список структур потоков, . . . )4 Заполнение структуры PEB (база данных загрузчика, данные TLS,
информация о куче, таблица дескрипторов GDI, . . . )5 Завершение установки адресного пространства (отображение секций
в адресное пространство, отображение Ntdll.dll, создание сеанса принеобходимости, . . . )
Лекция 6 38 / 38