Импортирование функций файлом типа PE-формата

Тема в разделе "WASM.WIN32", создана пользователем EvilsInterrupt, 2 авг 2005.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Хай.



    Изучая импортирование функций наткнулся на прикольную ситуацию,

    в связи с чем совсем завис :)))



    Вот дамп на то что указывает:



    - #define IMAGE_DIRECTORY_ENTRY_IAT

    и

    -#define IMAGE_DIRECTORY_ENTRY_IMPORT
    Код (Text):
    1. .00402000:  7A 20 00 00¦8E 20 00 00¦6C 20 00 00¦00 00 00 00  z   О   l
    2. .00402010:  AE 20 00 00¦00 00 00 00¦54 20 00 00¦00 00 00 00  о       T
    3. .00402020:  00 00 00 00¦A0 20 00 00¦00 20 00 00¦64 20 00 00      а       d
    4. .00402030:  00 00 00 00¦00 00 00 00¦BC 20 00 00¦10 20 00 00          -   >
    5. .00402040:  00 00 00 00¦00 00 00 00¦00 00 00 00¦00 00 00 00
    6. .00402050:  00 00 00 00¦7A 20 00 00¦8E 20 00 00¦6C 20 00 00      z   О   l
    7. .00402060:  00 00 00 00¦AE 20 00 00¦00 00 00 00¦80 00 45 78      о       А Ex
    8. .00402070:  69 74 50 72¦6F 63 65 73¦73 00 09 01¦47 65 74 4D  itProcess 0OGetM
    9. .00402080:  6F 64 75 6C¦65 48 61 6E¦64 6C 65 41¦00 00 1F 01  oduleHandleA  ЎO
    10. .00402090:  47 65 74 50¦72 6F 63 41¦64 64 72 65¦73 73 00 00  GetProcAddress
    11. .004020A0:  6B 65 72 6E¦65 6C 33 32¦2E 64 6C 6C¦00 00 9D 01  kernel32.dll  ЭO
    12. .004020B0:  4D 65 73 73¦61 67 65 42¦6F 78 41 00¦75 73 65 72  MessageBoxA user
    13. .004020C0:  33 32 2E 64¦6C 6C 00 00¦00 00 00 00¦00 00 00 00  32.dll


    Прошу обратить внимание на поля IMAGE_IMPORT_DIRECTORY.OriginalFirstThunk и

    IMAGE_IMPORT_DIRECTORY.FirstThunk. Все так как надо и как должно быть в идеале.



    Пробую извращаться: - обнуляю поля IMAGE_IMPORT_DIRECTORY.OriginalFirstThunk и

    вижу, что файл запускается, PEtools,HIEW кажут нормально, а pedump(pitreck) не

    хочет работать, ну и фиг с ним.

    Теперь же беру и делаю последний dword в массиве двойных слов для kernel32.dll

    не нулевым:
    Код (Text):
    1. .00402000:  7A 20 00 00¦8E 20 00 00¦6C 20 00 00¦[b]7A 20 00 00[/b]


    и файл перестает запускаться виндой! Не хотят с ним работать и утилиты.

    Следовательно нулевой дворд есть конец массива двойных функций.

    Ладно теперь обратно обнуляем и начинаем эксперементировать с массивом

    OriginalsFirstThink для этого делаю следующее:
    Код (Text):
    1. .00402050:  00 00 00 00¦[b]8E 20 00 00[/b]¦8E 20 00 00¦6C 20 00 00
    2. .00402060:  00 00 00 00¦[b]7A 20 00 00[/b]¦00 00 00 00¦80 00 45 78


    и получаю в PEtools, что GetModuleHandle оказывается не в kernel32.dll,

    а в user32.dll! :)))



    Зачем закладываться только на один массив, когда есть еще и второй? Для чего

    вообще вводить два дублирующих друг друга массива?



    p.s:

    На что вообще закладываться, чтобы сделать вывод список импортируемых файлом

    функций?
     
  2. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    Если есть OrginalFirstThunk то нужно использовать его, если нету - тогда FirstThink.



    > Зачем закладываться только на один массив, когда есть еще и второй?



    FirstThunk может быть уже заполнен адресами, и тогда если совпадет time-data-stamp в таблице импорта и в таблице экспорта dll загрузчик будет считать что все уже настроено и не будет заного связывать импорт. А если не совпадет, тогда он будет заново настраивать массив FirstThunk на основании инфы из OriginalFirstThunk
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Спасибо! Буду соображать. А можете посоветовать сорец по pe-просмотру, только не питрека, плиз. А то, что я накачал мне не нравится
     
  4. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    По-моему, подробно об этом расписано у Володи в первой части упаковщиков.