Сейчас на форуме: UniSoft, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Структура импорта PE
Посл.ответ Сообщение

Ранг: 37.1 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 27 декабря 2010 19:37 · Поправил: Promix_17
· Личное сообщение · #1

Пишу программу для разбора РЕ файла, и вот дошел до такой проблемы. Известно что информация о импорте хранится в последовательности структур:

typedef struct _IMAGE_IMPORT_DESCRIPTOR {

union {

DWORD Characteristics; // 0 for terminating null import descriptor

DWORD OriginalFirstThunk; // RVA to original unbound IAT

};

DWORD TimeDateStamp; // TimeDateStamp

DWORD ForwarderChain; // -1 if no forwarders

DWORD Name; // name of the dll

DWORD FirstThunk; // RVA to IAT

} IMAGE_IMPORT_DESCRIPTOR;

И в OriginalFirstThunk должен находится адрес массива из элементов IMAGE_THUNK_DATA.
А в FirstThunk должен находится взаимооднозначный массив из элементов IMAGE_THUNK_DATA в которые должны при загрузке записаться настоящие адреса импортируемых функций. Но вот оказалось, что изначально OriginalFirstThunk и FirstThunk указывают на идентичные массивы, т.е. в файле два дубликата одного и того же массива. А тем более в некоторых файлах вообще OriginalFirstThunk равен нулю! И информацию можно получить только из FirstThunk. Так почему возникает это дублирование, всегда ли массивы идентичны, и почему работают файлы, где OriginalFirstThunk равен 0?



Ранг: 20.3 (новичок), 2thx
Активность: 0.010
Статус: Участник

Создано: 27 декабря 2010 19:45
· Личное сообщение · #2

У Мэта Питрека про это вроде описанно (сейчас некогда глядеть, но вот пару ссылок):
www.rsdn.ru/article/baseserv/pe_coff.xml <--------- Собственно перевод статьи Мета Питрека
www.rsdn.ru/article/baseserv/peloader.xml <--------- Загрузчик PE-файлов


| Сообщение посчитали полезным: Promix_17

Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 27 декабря 2010 19:47
· Личное сообщение · #3

[c4] пишет:
У Мэта Питрека про это вроде описанно

msdn.microsoft.com/en-us/magazine/cc301805.aspx
msdn.microsoft.com/en-us/magazine/cc301808.aspx
оригинал

-----
Реверсивная инженерия - написание кода идентичного натуральному


| Сообщение посчитали полезным: Promix_17

Ранг: 37.1 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 27 декабря 2010 19:53 · Поправил: Модератор
· Личное сообщение · #4

Спасибо огромное, значит нужно ориентироваться только на второй массив))) Первый поможет только для восстановления таблицы импорта))
Получается, если в файле есть OriginalFirstThunk, то с его дампа легко можно восстановить весь импорт, просто скопировав массив OriginalFirstThunk в массив FirstThunk.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 27 декабря 2010 22:02
· Личное сообщение · #5

Да вы правы, я так PECompact распаковывал: http://exelab.ru/art/?action=view&id=325

-----
Yann Tiersen best and do not fuck



 eXeL@B —› Программирование —› Структура импорта PE
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати