3.93M
Category: programmingprogramming

Лекция Введение в анализ вредоносных программ

1.

Кафедра КБ-2
«Информационно-аналитические системы кибербезопасности»
Лекция № 1
ВВЕДЕНИЕ В АНАЛИЗ ВРЕДОНОСНЫХ ПРОГРАММ

2.

Троянские программы
Троян (Trojan) – разновидность вредоносной
программы, проникающая в компьютер под
видом легитимного программного обеспечения.
Общая схема работы типовой троянской
программы:
1. При запуске, троянская программа выполняет
легитимные функции с целью исключения
обнаружения антивирусным средством.
2. Затем она может сделать собственную копию и
поместить ее в какое-нибудь непримечательное
место на компьютере, как правило, в
пользовательских файлах.
3. Далее троянская программа может выполнить
закрепление на компьютере жертвы, например,
добавив себя в автозагрузку через системный
реестр.
4. После вредоносная программа устанавливает
соединение с C&C-сервером (сервер контроля и
управления) и ожидает команд.
С&C сервер
Данные с
зараженной
системы
Управляющие
команды
Зараженная система
Модуль
ВПО
Ядро
ВПО
Модуль
ВПО
Модуль
ВПО

3.

Компьютерные черви
Червь (Worm) – разновидность вредоносной
программы, основной особенностью которой
является возможность перемещения между
узлами в компьютерной сети.
К основным особенностям работы сетевых червей
можно отнести:
– перемещение между узлами сети посредством
различных протоколов, как правило, SMB;
– наличие учетных данных пользователей сети,
такие как логин и пароль;
– установка вредоносных программ на
захваченных компьютерах.
Система в сети
Данные для
авторизации
на системе
Модуль
ВПО
Ядро
ВПО
Модуль
ВПО
Модуль
ВПО
Зараженная система
Общая ЛВС

4.

Загрузчик
Загрузчик (Dowloader) – разновидность вредоносной программы, которая скачивается
по сети напрямую и автоматически запускается на компьютере жертвы.
Удаленный
ресурс
К основным особенностям работы типового
доунлоадера можно отнести:
– наличие API-функций, позволяющих выполнять
скачивание файлов напрямую и их запуск, такие
как: URLDownloadToFile, ShellExecute;
– самоудаление после скачивания файлов и их
запуска.
Прямой
запрос на
скачивание
ВПО
Зараженная система
Модуль
ВПО
Ядро
ВПО
Модуль
ВПО
Модуль
ВПО

5.

Вирус
Вирус (Virus) – разновидность вредоносной
программы, которая проникает в тело легитимной
программы, размещает необходимый для своей
работы функционал и работает из неё.
К основным особенностям работы вирусов можно
отнести:
– наличие API-функций, позволяющих выполнять
запуск кода изнутри стороннего файла;
– модификация заражаемого файла;
– возможность анализа структуры заражаемого
файла;
– листинг (поиск) директорий и файлов в системе.
Зараженная программа
Исполняемый код
легитимной программы
Точка входа
Исполняемый код
вируса

6.

Дроппер
Дроппер (Dropper) – разновидность вредоносной программы, предназначенной для
установки другой вредоносной программы, например, трояна в зараженную систему.
К основным особенностям работы дроппера можно отнести:
– наличие API-функций, позволяющих извлекать стороннюю
программу из себя и выполнять ее запуск;
– наличие механизмов обхода средств антивирусной защиты;
– схожесть с легитимными программами, например, наличие
иконок типа PDF, WORD и т.д.;
– листинг (поиск) директорий и файлов в системе.
Вредоносная программа
Методы обхода средств
антивирусной защиты
Дроппер

7.

Рансомваре
Рансомваре
(Ransomware)

разновидность
вредоносной
программы,
предназначенной для уничтожения (шифрования) файлов на компьютере жертвы. Как
правило, злоумышленники используют рансомваре для требования выкупа за
возможность восстановления файлов.
К основным особенностям работы рансомваре можно отнести:
– наличие API-функций, позволяющих осуществлять листинг (поиск) директорий и
файлов в системе;
– многопоточность;
– возможность обращения к логическим дискам и служебным элементам файловой
системы;
– использование алгоритмов (библиотек) шифрования.

8.

Руткит
Руткит (Rootkit) – разновидность вредоносной программы, схожей по своему
предназначению с трояном. Как правило, руткит устанавливается в зараженный
компьютер на уровне ядра операционной системы, например, в виде драйвера.
К основным особенностям работы руткита можно отнести:
– скомпилирован в виде драйвера или службы;
– наличие API-функций, позволяющих выполнять перехват, т.н. хукинг (hooking), других
функций;
– возможно наличие сетевого соединения с C&C.

9.

Бэкдор
Бэкдор (Backdoor) – разновидность вредоносной программы, предназначенной для
закрепления в зараженной системе.
В качестве бэкдора могут выступать трояны и руткиты.
Бэкдоры могут быть на программном и на аппаратном уровне.
К основным особенностям работы бэкдора можно отнести:
– максимальное сокрытие своего присутствия в системе;
– возможно наличие сетевого соединения с C&C.

10.

Рат
Рат (RAT, Remote Access Tool) – разновидность вредоносной программы,
предназначенной для удаленного управления зараженным компьютером.
В качестве рата могут выступать трояны и руткиты. При этом легитимные программы
также могут использоваться злоумышленниками, как раты, например, TeamViewer,
RAdmin и др.
К основным особенностям работы бэкдора можно отнести:
– наличие сетевого соединения с C&C;
– использование API функций для создания сетевого соединения.

11.

Шеллкод
Шеллкод (Shellcode) – разновидность вредоносной программы, предназначенной
для запуска сторонней программы или кода.
Шеллкоды могут быть встроены в трояны, руткиты или в другие программы, в том
числе легитимные.
К основным особенностям работы бэкдора можно отнести:
– базонезависимое исполнение;
– крайне небольшой размер, как правило в диапазоне от 300 Б до 1 кБ.

12.

Кейлоггер
Кейлоггер – программа, предназначенная для перехвата и регистрации нажатий
клавиш.
Злоумышленник может регистрировать нажатия клавиш, используя различные
методы. Наиболее распространенными методами регистрации нажатий клавиш
являются документированные функции API Windows:
1. Проверка состояния ключа с помощью API GetAsyncKeyState.
2. Установка ловушек с помощью API SetWindowHookEX.

13.

Вредоносные программные решения
Мимикатз (Mimikatz) – это приложение с открытым исходным кодом, которое
позволяет пользователям просматривать и сохранять учетные данные
аутентификации.
Метасплоит (Metasploit) – проект, посвящённый информационной безопасности.
Создан для предоставления информации об уязвимостях, помощи в создании
сигнатур для IDS, создания и тестирования эксплойтов.

14.

ИСПОЛНЯЕМЫЕ ФАЙЛЫ
Исполняемый файл (executable file) – файл, содержащий программу в виде, в котором она может быть
исполнена компьютером.
Все исполняемые файлы содержат в себе различные данные в каком-либо формате и состоят из разных частей
В настоящее время можно выделить следующие форматы исполняемых файлов:
Portable Executable
(PE)
.EXE
.DLL
.SYS
Executable Linkable Format
(ELF)
Mach Object
(Mach-O)
Android Package Kit
(APK)

15.

ИСПОЛНЯЕМЫЕ ФАЙЛЫ ФОРМАТА PE
Portable Executable (PE, «переносимый исполняемый») – формат исполняемых файлов, объектного кода и
динамических библиотек, используемый в 32- и 64-разрядных версиях операционной системы Microsoft
Windows.
Файлы формата PE представляют собой структуру данных, содержащую в себе всю необходимую информацию
для системного загрузчика при проецировании его в память.
Формат РЕ является разработкой корпорации Microsoft и официально не
стандартизирован. Описание формата приведено в спецификации:
Microsoft Portable Executable and Common Object File Format Specification
Согласно спецификации исполняемый файл состоит из нескольких
частей:
- DOS-заголовок (DOS Header)
- DOS-заглушка (DOS STUB)
- NT-заголовок (NT Header)
- Заголовки секций (Section Header)
- Секции (Section)
Структура исполняемого файла формата PE в большой степени зависит от
применяемого при разработке компилятора и компоновщика.
Например, компоновщик интегрированной среды разработки Visual
Studio 2015 добавляет в структуру исполняемого файла секцию с именем
«.gfids», о которой ни разу не упоминается в спецификации.

16.

DOS-заголовок (DOS HEADER)
Исполняемый файл начинается с DOS-заголовка. Иногда этот заголовок может называться MZ-заголовок*
* Такое название связано с инициалами имени программиста корпорации Microsoft, одного из создателей
MS-DOS – Марка Збиковски
Исполняемый файл начинается с DOS-заголовка. Иногда этот заголовок может называться MZ-заголовок*
Размер заголовка – 64 байта
Количество полей в заголовке – 19
Структура – IMAGE_DOS_HEADER
DOS-заголовок содержит множество полей, некоторые из которых в настоящее время не используются и
заполняются нулями, а некоторые являются важнейшими, и без них исполняемый файл просто не будет
работать. К наиболее важным полям DOS-заголовка относятся:
1. Поле e_magic содержит двухбайтовое значение 0х4D5A, что в кодировке ASCII соответствует буквам MZ.
Данные буквы являются своего рода «опознавательной» сигнатурой, которые указывают, что файл является
исполняемым форматом для операционной системы Windows.
2. Поле e_lfarlc содержит смещение до DOS-заглушки. В большинстве случаев заглушка, добавляемая
компоновщиком, выводит сообщение «This program cannot be run in DOS mode», что означает, то что данную
программу невозможно запустить в режиме операционной системы DOS.
3. Поле e_lfanew содержит смещение, которое указывает на начало основного заголовка исполняемого
файла – NT-заголовка.

17.

RICH-сигнатура
В исполняемом файле может присутствовать RICH-сигнатура, добавляемая компоновщиком. Иногда эту
сигнатуру называют «печать Баала».
Размер сигнатуры – 96 байт
Официальных сведений в отношении этой сигнатуры корпорация Microsoft не представляет. Из анализа
рисунка, на котором изображено шестнадцатеричное представление RICH-сигнатуры можно определить
следующее:
1. Любая структура RICH-сигнатуры имеет повторяющиеся значения, расположенные в одних и тех же
смещениях.
2. Во всех сигнатурах присутствует четыре байта, образующие слово «RICH».
3. Программы, скомпилированные на одном и том же компьютере, имеют одинаковые RICH-сигнатуры.

18.

NT-заголовок (NT Header)
NT-заголовок является основным в исполняемом файле, в котором содержатся основные сведения о файле.
IMAGE_NT_HEADER
SIGNATURE
Размер заголовка – 248 байтов
Структура – IMAGE_NT_HEADERS
Первая часть NT-заголовка, является указателем на его начало и представляет
собой сигнатуру, которая должна быть равна значению 0х50450000, что в
кодировке ASCII соответствует символам «РЕ00».
IMAGE_FILE_HEADER
Вторая часть NT-заголовка – файловый заголовок, File Header.
IMAGE_OPTIONAL_HEADER
Файловый заголовок содержит множество полей, некоторые из которых являются
важнейшими, и без них исполняемый файл просто не будет работать.
К наиболее важным полям файлового заголовка относятся:
Размер файлового заголовка – 20 байтов
Количество полей в заголовке – 7
Структура – IMAGE_FILE_HEADER
1. Поле Machine определяет тип центрального процессора, для которого предназначен файл.
0x014c - Intel 386, 0x8664 - AMD64, 0x0200 – Intel 64
2. Поле NumberOfSection определяет количество секций в исполняемом файле. В некоторых источниках
указывается, что количество секций ограничивается 255.
Количество секций зависит от различных факторов, например:
- тип компилятора и компоновщика;
- наличия специфичных данных (ресурсов, перемещаемых символов) и др.
3. Поле SizeOfOptionalHeader содержит размер опционального заголовка (OPTIONAL HEADER), третьей части NTзаголовка.

19.

NT-заголовок (NT Header)
4. Поле Characteristics содержит флаги, которые определяют атрибуты исполняемого файла.
Флаг
Значение
Описание
IMAGE_FILE_EXECUTABLE_IMAGE
0x0002
Индикатор о том, что файл проверен (валидный) и может
быть запущен. Если флаг не указан возникает ошибка.
IMAGE_FILE_32BIT_MACHINE
0x0100
Индикатор, соответствует тому, что исполняемый файл
является 32-х разрядным.
IMAGE_FILE_DEBUG_STRIPPED
0x0200
Индикатор, указывающий, что в исполняемом файле
удалена отладочная информация.
IMAGE_FILE_SYSTEM
0x1000
Исполняемый файл является системным, а не
пользовательским приложением.
IMAGE_FILE_DLL
0x2000
Исполняемый файл является библиотекой динамического
линкования (Dynamic Linking Library, DLL)
5. Поле TimeDateStamp содержит время создания исполняемого файла, компоновщиком. Представлено по
стандарту POSIX(UNIX).
В нём указано число секунд, которое прошло от 00 часов 00 минут 01 января 1970 года до момента создания
файла. Это поле является необязательным и без него исполняемый файл остается работоспособным.
Проблема 2038 года

20.

NT-заголовок (NT Header)
Третья часть NT-заголовка представляет собой опциональный заголовок исполняемого файла Optional Header.
Размер опционального заголовка – 224 байта
Количество полей в заголовке – 30
Структура – IMAGE_OPTIONAL_HEADER
1. Поле Magic указывает разрядность исполняемого файла (PE32 или PE32+).
0x10b – PE32, 0x20b – PE32+
2. Поле MajorLinkerVersion указывает старшую часть версии компоновщика, который использовался при
создании исполняемого файла
3. Поле MinorLinkerVersion указывает младшую часть версии компоновщика, который использовался при
создании исполняемого файла
4. Поле SizeOfCode содержит размер исполняемого кода, содержащегося в файле.
Как правило, исполняемые файлы имеют только одну секцию кода, так что это поле должно соответствовать
значению размера секции с именем «.text», если он был разработан с использованием компоновщика
Microsoft.
5. Поле SizeOfInitializedData содержит суммарный размер инициализированных данных. Как правило, к
инициализированным данным относятся данные, которые не являются исполняемым кодом.
6. Поле SizeOfUninitializedData содержит суммарный размер неинициализированных данных.
7. Поле AddressOfEntryPoint содержит относительный виртуальный адрес (Relative Virtual Address, RVA), точки
входа, с которого программа начинает выполнение.
8. Поле BaseOfCode содержит относительный виртуальный адрес (RVA), секции кода при загрузке в память

21.

NT-заголовок (NT Header)
9. Поле BaseOfData содержит относительный виртуальный адрес (RVA), секции данных при загрузке в память
10. Поле ImageBase содержит предпочтительный адрес загрузки исполняемого файла в память. При сборке
исполняемого файла значение этого поля устанавливается в предпочтительное значение по умолчанию:
- для DLL - 0x10000000;
- для Windows CE - 0x00010000;
- для Windows NT - 0x00400000.
11. Поле SectionAlignment содержит значение выравнивания секции в байтах при выгрузке в виртуальную
память. Значение должно быть больше или эквивалентно значению поля FileAlignment. По умолчанию равно
размеру одной страницы виртуальной памяти.
12. Поле FileAlignment содержит значение выравнивания «сырых» данных секции в байтах на диске. Значение
должно быть кратно 2 и находится между значениями 512 и 64К. По умолчанию равно 512.
13. Поле MajorOperatingSystemVersion содержит старшую часть версии операционной системы на которой
исполняемый файл будет работоспособным
14. Поле MinorOperatingSystemVersion содержит младшую часть версии операционной системы на которой
исполняемый файл будет работоспособным
15. Поле SizeOfImage содержит суммарный размер образа в памяти, который включает: все заголовки, все
секции загружаемые в память. Значение должно быть выравнено по значению поля SectionAlignment
16. Поле SizeOfHeaders содержит суммарный размер заголовков, который включает: DOS-заголовок, NTзаголовок и заголовки секций
17. Поле CheckSum содержит значение контрольной суммы всего образа (исполняемого файла). Алгоритм для
расчета контрольной суммы содержится в библиотеке IMAGHELP.DLL

22.

NT-заголовок (NT Header)
18. Поле Subsystem содержит сведения о подсистеме запуска исполняемого файла.
Флаг
Значение
Описание
IMAGE_SUBSYSTEM_UNKNOWN
0
Неизвестная подсистема
IMAGE_SUBSYSTEM_NATIVE
1
Драйвера устройств и внутренние процессы Windows
IMAGE_SUBSYSTEM_WINDOWS_GUI
2
Приложения с графическим интерфейсом
IMAGE_SUBSYSTEM_WINDOWS_CUI
3
Консольные приложения
IMAGE_SUBSYSTEM_XBOX
14
XBOX
19. Поле DllCharacteristics содержит флаги, которые определяют дополнительные атрибуты исполняемого
файла.
Флаг
Значение
Описание
IMAGE_DLLCHARACTERISTICS_
NO_SEH
0x0400
Не используются обработчики исключений
IMAGE_DLLCHARACTERISTICS_
WDM_DRIVER
0x2000
Файл является WDM драйвером
20. Data Directories – массив структур типа IMAGE_DATA_DIRECTORY, предназначенный для нахождения
определенных данных в секции исполняемого файла (например, таблицу импортированных функций) без
последовательного перебора всех секций.

23.

NT-заголовок (NT Header)
Элементы массива директорий данных содержат относительный виртуальный адрес (RVA) и размер
необходимых данных исполняемого файла. Если поля одного из элементов таблицы директорий равны нулю,
это значит, что данные такого типа в файле не присутствует.
В одном исполняемом файле может быть до 16 директорий данных, порядок их следования строго определен и
не может быть нарушен.
Директория
Номер
Описание
IMAGE_DIRECTORY_ENTRY_EXPORT
0
Таблица экспорта
IMAGE_DIRECTORY_ENTRY_IMPORT
1
Таблица импорта (импортируемые библиотеки и функции)
IMAGE_DIRECTORY_ENTRY_RESOURCE
2
Таблица ресурсов
IMAGE_DIRECTORY_ENTRY_EXCEPTION
3
Таблица исключений
IMAGE_DIRECTORY_ENTRY_SECURITY
4
Таблица данных о безопасности
IMAGE_DIRECTORY_ENTRY_BASERELOC
5
Таблица перемещаемых элементов
IMAGE_DIRECTORY_ENTRY_DEBUG
6
Таблица отладочной информации
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
7
Данные, определяемые конкретной платформой
IMAGE_DIRECTORY_ENTRY_GLOBALPTR
8
IMAGE_DIRECTORY_ENTRY_TLS
9
Таблица данных локальной памяти потока
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
10
Таблица данных конфигурации
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
11
Таблица BOUND-импорта
IMAGE_DIRECTORY_ENTRY_IAT
12
Таблица адресов импортируемых функций
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
13
Таблица «задержанного» импорта
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
14
Таблица метаданных .NET

24.

Заголовки секций (Section Header)
Заголовки секций представляют собой массив данных типа IMAGE_SECTION_HEADER, который описывает
размещений секций в исполняемом файле и, соответственно, в памяти после загрузки.
Иногда заголовки секций называют таблицей секций.
Размер заголовка каждой секции – 40 байтов
Количество полей в заголовке – 11
Структура – IMAGE_SECTION_HEADER
1. Поле Name содержит массив символов, определяющих название секции. Длина массива не должна
превышать 8 символов.
2. Поле PhysicalAddress|VirtualSize может иметь различное назначение в зависимости от того, находится ли оно
в объектном или же в исполняемом файле. Для исполняемых файлов используется поле VirtualSize в котором
содержится размер секции (не выравненный)
3. Поле VirtualAddress содержит относительный виртуальный адрес загрузки секции в память. Это смещение
вычисляется относительно предпочтительного адреса загрузки исполняемого файла (ImageBase)
4. Поле SizeOfRawData содержит размер секции выравненный по значению поля FileAlignment
5. Поле PointerToRawData содержит адрес секции относительно начала исполняемого файла
6. Поле Characteristics содержит флаги, которые определяют атрибуты секции исполняемого файла.
Флаг
Значение
Описание
IMAGE_SCN_CNT_CODE
0x00000020
Секция содержит исполняемый код
IMAGE_SCN_CNT_INITIALIZED_DATA
0x00000040
Секция содержит инициализированные данные
IMAGE_SCN_CNT_UNINITIALIZED_DATA
0x00000080
Секция содержит неинициализированные данные

25.

Секции (Section)
Секции предназначены для размещения данных в исполняемом файле. Основное тело исполняемого файла
составляют именно секции.
Название секции
Назначение
Атрибуты
.text
Исполняемый код
IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_CODE |
IMAGE_SCN_MEM_EXECUTE
.data
Инициализированные данные
IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE |
IMAGE_SCN_CNT_INITIALIZED_DATA
.rdata
Служебные данные
IMAGE_SCN_MEM_READ |
IMAGE_SCN_CNT_INITIALIZED_DATA
.edata
Таблица экспорта (устар.)
IMAGE_SCN_MEM_READ |
IMAGE_SCN_CNT_INITIALIZED_DATA
.idata
Таблица импорта (устар.)
IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE |
IMAGE_SCN_CNT_INITIALIZED_DATA
.pdata
Служебные данные (x64)
IMAGE_SCN_MEM_READ |
IMAGE_SCN_CNT_INITIALIZED_DATA
.rsrc
Ресурсы исполняемого файла
IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE |
IMAGE_SCN_CNT_INITIALIZED_DATA
.reloc
Таблица перемещаемых
элементов
IMAGE_SCN_MEM_READ |
IMAGE_SCN_CNT_INITIALIZED_DATA |
IMAGE_SCN_MEM_DISCARDABLE
.tls
Данные локальной памяти
потока
IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE |
IMAGE_SCN_CNT_INITIALIZED_DATA

26.

Секции (Section)
Секция кода (.text) – содержит код, который генерирует компилятор. Без специального инструментария из этой
секции полезной информации извлечь не удастся. В качестве полезного инструментария можно использовать
дизассемблеры, отладчики, мониторы и т.д.
Секция данных (.data) – содержит все инициализированные данные (глобальные и статические переменные,
литералы)
Секция импорта* (.idata) – содержит таблицы, обеспечивающие импорт функций из других библиотек
динамической компоновки (DLL).
Секция экспорта* (.edata) – содержит данные о тех функциях, которые экспортируются исполняемым файлом.
* В настоящее время данные этих секций помещаются в секцию служебных данных – .rdata
Секция ресурсов (.rsrc) – содержит все ресурсы, которые содержатся в исполняемом файле (манифест, иконки,
информация о версии и т.д.)
Секция ресурсов (.reloc) – содержит таблицу перемещаемых элементов. Она используется только тогда, когда
загрузчик не смог загрузить файл по адресу, начиная с которого планировал произвести загрузку

27.

Импорт исполняемых файлов

28.

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

29.

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

30.

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

31.

Секция перемещаемых элементов

32.

Секция перемещаемых элементов

33.

Секция ресурсов (.rsrc)
Секция ресурсов исполняемого файла не является обязательной и её наличие может определяться желанием
разработчика или функциональной необходимостью, например, если исполняемый файл содержит
графический интерфейс.
В соответствии с заголовочным
файлом WinNT.h секция ресурсов
начинается с заголовка, который
описывается структурой
IMAGE_RESOURCE_DIRECTORY.
Структура IMAGE_RESOURCE_DIRECTORY содержит шесть полей, четыре из которых в большинстве случаев
заполнены нулями.
1. Поле NumberOfNamedEntries указывает число ресурсов, идентифицируемых по имени
2. Поле NumberOfIdEntries указывает число ресурсов, идентифицируемых по номеру

34.

Секция ресурсов (.rsrc)
За заголовком следует строка ресурсов, представляющая собой структуру IMAGE_RESOURCE_DIRECTORY_ENTRY.
Как правило все ресурсы одного
типа (курсоры, иконки, диалоговые
окна и т.д.) объединяются в
группы, каждая из которых
начинается
с
заголовка
IMAGE_RESOURCE_DIRECTORY.
В некоторых источниках, эти
группы
называются
первым
уровнем иерархии ресурсов.
Внутри группы ресурсы, имеющие одинаковые имена или одинаковые номера, но предназначенные для
разноязычных пользователей объединяются в подгруппы, которые являются вторым уровнем иерархии
ресурсов.
Третий уровень иерархии ресурсов – подгруппа, в которой ресурсы разделяются по языку. Всего уровней может
быть 32, но в настоящее время используются только три (тип, номер или имя, язык).
Следом за третьим уровнем иерархии ресурсов следует структура IMAGE_RESOURCE_DATA_ENTRY, состоящая из
четырех полей по четыре байта. В большинстве случаев два последних поля заполнены нулями, а первые два
поля: OffsetToData и Size содержат относительный виртуальный адрес и размер непосредственно самих
ресурсов. На рисунке 2.5 приведена структура ресурсов исполняемого файла в шестнадцатеричном
представлении.

35.

Секция ресурсов (.rsrc)
Следом за третьим уровнем иерархии ресурсов следует структура IMAGE_RESOURCE_DATA_ENTRY, состоящая из
четырех полей по четыре байта.
В большинстве случаев два
последних поля заполнены нулями.
1. Поле OffsetToData содержит относительный виртуальный адрес непосредственно самих ресурсов.
2. Поле Size содержит размер ресурсов конкретного типа.

36.

Типы ресурсов
English     Русский Rules