Уроки Iczelion'а




Урок 6. Таблица импорта - часть 2


/p>

Теперь, когда вы знаете, что содержит каждый из членов директории данных, мы можем изучить их поподробнее. Каждый из элементов директории данных - это структура IMAGE_DATA_DIRECTORY, которая имеет следующее определение:

IMAGE_DATA_DIRECTORY STRUCT VirtualAddress dd ? isize dd ? IMAGE_DATA_DIRECTORY ENDS

VirtualAddress - это относительный виртуальный адрес (RVA) структуры данных. Hапример, если эта структура для символов импорта, это поле содержит RVA массива IMAGE_IMPORT_DESCRIPTOR.

isize содержит размер в байтах структуры данных, на которую ссылается VirtualAddress.

Это главная схема по нахождению важной структуры данных в PE-файле:

  • От DOS-заголовка вы переходите к PE-заголовку
  • Получаете адрес директории данных в опциональном заголовке.
  • Умножаете размер IMAGE_DATA_DIRECTORY требуемый индекс члена, который вам требуется: например, если вы хотите узнать, где находятся символы импорта, вы должны умножить размер IMAGE_DATA_DIRECTORY (8 байт) на один.
  • Добавляете результат к адресу директории данных, и теперь у вас есть адрес структуры IMAGE_DATA_DIRECTROY, которая содержит информацию о желаемой структуре данных.

Теперь мы начнем обсуждение собственно таблицы импорта. Адрес таблицы содержится в поле VirtualAddress второго члена директории данных. Таблица импорта фактически является массивом структур IMAGE_IMPORT_DESCRIPTOR. Каждая структура содержит информацию о DLL, откуда PE импортирует функции. Hапример, если PE имортирует функции из 10 разных DLL, этот массив будет состоять из 10 элементов. Конец массива отмечается элементом, содержащим одни нули. Теперь мы можем подробно проанализировать структуру:

IMAGE_IMPORT_DESCRIPTOR STRUCT union Characteristics dd ? OriginalFirstThunk dd ? ends TimeDateStamp dd ? ForwarderChain dd ? Name1 dd ? FirstThunk dd ? IMAGE_IMPORT_DESCRIPTOR ENDS

Первый член этой структуры - объединение. Фактически, объединение только предоставляет алиас для OriginalFirstThunk, поэтому вы можете назвать его "Characteristics". Этот параметр содержит относительный адрес массива из структур IMAGE_THUNK_DATA.




Содержание  Назад  Вперед