Модификация Import Table.

Тема в разделе "LANGS.C", создана пользователем HelloweenStranger, 13 май 2011.

  1. HelloweenStranger

    HelloweenStranger New Member

    Публикаций:
    0
    Регистрация:
    12 май 2011
    Сообщения:
    30
    Доброго времени суток! Есть задача: в произвольном экзешнике необходимо в таблицу импорта дописать свою dll, возможно, не одну. Для этого было решено: найти таблицу в исходном файле, найти место в файле, которого достаточно для размещения модифицированной таблицы(с добавлением своих dll), записать модифицированную таблицу в новое место. Модифицировать необходимые RVA. Пока что не могу справиться с последней задачей, модификацией необходимых RVA. Так как не могу понять какие RVA нужно править. Не понятно, что должно лежать в IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress: то-ли смещение таблицы внутри файла, то-ли адрес, по котрому загрузчик должен отобразить таблицу. Саму секцию импорта найти не могу, потому как О ЧУДО, она в подавляющем большинстве экзешников не называется .idata. Каждый линкер обзывает как хочет... Да и её поля VirtualAddress и PointerToRawData тоже не всегда имеют тот смысл, который описан в доках. В каких-то экзешках IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress и .idata::VirtualAddress равны, в каких-то вообще не рядом. Да и по .idata::PointerToRawData практически никогда не лежит смещение таблицы внутри файла... Люди добрые, хакеры продвинутые, ну направьте на путь истинный!!!!! HELP!!!!!!!!!!
     
  2. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    >> IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress
    там лежит смещение относительно начало образа в памяти, уже промапленного загрузчиком. Я объяснял вам уже зависимость между оффсетом и rva здесь
    http://wasm.ru/forum/viewtopic.php?pid=431187#p431187

    >> Саму секцию импорта найти не могу, потому как О ЧУДО, она в подавляющем большинстве экзешников не называется .idata
    Физическая структура (секции + заголовок) PE файла не зависит от логической (Data Directory).

    >> Да и её поля VirtualAddress и PointerToRawData тоже не всегда имеют тот смысл, который описан в доках.
    Они всегда имеют, смысл описанный в доках, иначе загрузчик не загрузит файл

    >> В каких-то экзешках IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress и .idata::VirtualAddress равны
    они и не должны быть равны, см выше. я это объяснил

    >> Да и по .idata::PointerToRawData практически никогда не лежит смещение таблицы внутри файла
    Там и не должно оно лежать. Там лежит оффсет начала секции. Секции описывают непрерывные области памяти, с одинаковыми аттрибутами защиты и данные которые нужно туда поместить

    Вы либо не читали документацию, либо её не поняли совсем. =\
     
  3. HelloweenStranger

    HelloweenStranger New Member

    Публикаций:
    0
    Регистрация:
    12 май 2011
    Сообщения:
    30
    >>они и не должны быть равны, см выше. я это объяснил

    Читайте текст внимательно! В раpных экзешниках, которые я парсил, по разному! В каких-то они равны!

    >>Физическая структура (секции + заголовок) PE файла не зависит от логической (Data Directory).

    DataDiractory не описывает физическую структуру! Она лишь описывает оффсет конкретной области от начала файла, если верить документации! А на самом деле оффсет от начала образа, уже отмапенного загрузчиком!

    >>Вы либо не читали документацию, либо её не поняли совсем.
    Что самое главное, читал не один я, а поняли все одинаково. Что-то сильно сомневаюсь, что вы её поняли с первого раза и не задавали подобных же вопросов. Понимание приходит во время практики, как известно.
     
  4. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    как все запущено. Вы хотя бы попытались понять, что я вам написал?

    >> Читайте текст внимательно! В раpных экзешниках, которые я парсил, по разному! В каких-то они равны!

    "не должны" вы прочитали как никогда не будут равны? Эти адреса никак не зависят друг от друга и описывают разные объекты в файле. Они могут совпадать или не совпадать в зависимости от линкера. Лоадеру похрену где конкретно находится одна из директорий, главное чтобы в пределах не дискарабл секции (или заголовка даже).

    >>DataDiractory не описывает физическую структуру!
    а я что описал. И я не об IMAGE_DATA_DIRECTORY говорю только, я говорю о Data Directory как об объектах в пе файле. Массив структур IMAGE_DATA_DIRECTORY описывает их расположение в pe файле. Вот это и называется логической структурой.

    >> Она лишь описывает оффсет конкретной области от начала файла, если верить документации! А на самом деле оффсет от начала образа, уже отмапенного загрузчиком!
    ну и как вы документацию читаете?
    >> Что-то сильно сомневаюсь, что вы её поняли с первого раза и не задавали подобных же вопросов. Понимание приходит во время практики, как известно.
    не сразу согласен, но я не бежал на форум, а обкладывался распечатками статей, спецификации, хидеров и сурцов лоадера и курил до просветления.
     
  5. HelloweenStranger

    HelloweenStranger New Member

    Публикаций:
    0
    Регистрация:
    12 май 2011
    Сообщения:
    30
    >> Вы хотя бы попытались понять, что я вам написал?

    Примерно как и вы, написанное мной.

    >> не сразу согласен, но я не бежал на форум, а обкладывался распечатками статей...

    Во-первых, кто вам сказал, что я сразу побежал на форум, а сам в это время ничего не искал и не читал, а тупо ждал пока мне на форуме кто-то ответит? Исходники загрузчика, и вообще исходники ntdll по части RtlImageXXX к моменту вашего ответа я уже изучил и понял, что нужен перевод Rva <-> fileoffset. Во-вторых, а зачем тогда вообще форум нужен?.. По-моему, он и нужен для того, чтобы тот, кто сталкивался с подобной задачей, объяснил новичку, чтобы тот не изобретал велосипед.
     
  6. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    в данном случае изобретение велосипеда необходимо, тк это база, без которой совсем грустно. Ладно, давайте не оффтопить.