Показать сообщение отдельно
Старый 01.03.2014, 00:37   #7
AS21
Старожил Клуба
 
Аватар для AS21
 
Имя: Николай
Авто: ASX 1.6 2WD MT
Сообщений: 2,199
По умолчанию Re: Исследование механизма работы ПО MMCS

Вот свет в конце тоннеля:
Так я планирую экспорт dll и восстановление таблицы RELOC
Пример: rsaenh.dll
Размещение секции Reloc в dll при экспорте:
e32_vbase => ImageBase = 10 000 000h
При экспорте приволим к этому знаменателю
При импорте дельту высчитываем между vbase (e32_vbase) – ImageBase;
rawAdrSec: Raw Adress (PointerToRawData) файловое смещение, откуда брать исходные данные для секции при отображении
rawSizeSecReloc: Raw Size (SizeOfRawData) размер, VirtualSize - выровненный на SectionAlignment.
rawSizeSecReloc = Utils.alignLenLong(e32_unit_5_size, fileAlign);
e32_unit_5_size = сумма SizeOfBlock
IMAGE_BASE_RELOCATION = VirtualAddress + SizeOfBlock (8h)
После этого заголовка следует массив 16-битовых описателей настройки. Количество таких описателей равно
NN = (SizeOfBlock - IMAGE_SIZEOF_BASE_RELOCATION) / 2
Item (описатель) = 16-бит = :
Каждый описатель настройки в 4-х старших битах (тип 3 = HIGHLOW)содержит тип настройки, а в 12 младших битах – смещение от начального RVA до настраиваемых данных
Реальное RVA = VirtualAddres (сhunk) + 12 младших бит (item)
Таблица настройки заканчивается блоком, у которого заголовок IMAGE_BASE_RELOCATION заполнен нулями - ABSOLUTE.
Последний сhunk – ABSOLUT – не имеет
Т.е. в SizeOfBlock каждого сhunk (кроме последнего) входит ABSOLUTE
Список всех настраиваемых RVA и способ их настройки как раз и содержится в таблице настройки, которая представляет собой набор блоков (chunks).
сhunk = Каждый блок содержит настройки для 4 Кб данных и начинается с заголовка IMAGE_BASE_RELOCATION и заканчиваеся ABSOLUTE (00 00)

Если есть у кого дополнения жду до завтра и начинаю писать
AS21 вне форума   Вверх Ответить с цитированием