Таблица импорта

Тема в разделе "WASM.WIN32", создана пользователем Quark, 25 дек 2007.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Может ли программа импортировать библиотеку, но при этом не иметь в импорте никаких её функций? Скажем, если библиотека не имеет таблицы экспорта.
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Quark
    что мешает попробывать?
     
  3. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Quark
    А почему бы и нет?
     
  4. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Код (Text):
    1. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2. format PE GUI
    3.  
    4.         push    0 0 0 0
    5.         call    dword [MessageBox]
    6.  
    7.         ret
    8.  
    9. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    10.  
    11. user32          db 'user32',0
    12. kernel32        db 'kernel32.dll',0
    13. _MessageBox     db 0,0,'MessageBoxA',0
    14.  
    15. user_table:
    16.                 MessageBox      dd RVA _MessageBox
    17.                                 dd 0
    18. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    19.  
    20. data import
    21.  
    22.      dd         0,0,0,RVA user32,RVA user_table
    23.      dd         0,0,0,RVA kernel32,0
    24.      rd 5
    25.  
    26. end data
    27.  
    28. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Вообще-то работает.. хотя олька и выпендривается. тогда такой вопрос. можно ли как-то по-другому подгрузить либу к ехе пропатчив его?
     
  5. LazzY

    LazzY New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2006
    Сообщения:
    123
    Quark если под либой вы имеете в виду dll то добавьте запись о ней в таблицу импорта
    э
    либо на еп сделайте переход на код подгружающий вашу dll и обратно
     
  6. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Да. Под словом 'либа' я имею ввиду имено динамическую библиотеку.


    Этот метод не катит: EntryPoint -> LoadLibrary(); jmp OriginalEntryPoint ;


    Кстати, если либа присутствует в импорте и при этои не импортируется ни одной функции, пусть даже указатель FirstThunk не занулён, а указывает на пустую таблицу - библиотека всё-равно не подгружается.
     
  7. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Quark
    1. Bound/Delay импорт тоже не устраивает? Можно попробовать как вариант.
    2. В реестре есть ключ, в котором можно указать обязательные либы при подгрузке процесса. Правда тут твоя либа будет загружаться во все процессы.

    3.
    А почему не устраивает динамическая загрузка через LoadLibrary?
    Или скажем MapViewOfFile, а далее вручную разместить секции в памяти и выполнить фиксап?
    Если нужно - могу в аську скинуть код загрузчика.
    4.
    "Пустая таблица" корректна? Если импорт битый - либа не загрузится.

    Смотря какой патч. Можно тупо добавить в импорт LoadLibrary а потом в ехе добавить код, который подгрузит длл и передаст управление на OriginalEntry

    ЗЫ: серьезно, поэксперементируй с Баунд-импортом.




    ЗЗЫ: скинь в пм свою аську. Моя старая где-то посеялась, а вместе с ней и весь контактлист.
     
  8. wan1786

    wan1786 New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2007
    Сообщения:
    19
    "Или скажем MapViewOfFile, а далее вручную разместить секции в памяти и выполнить фиксап?" забавный метод. Так если так поступлю то фактически при просмотре загруженых библеотек, ну например, через толшот - ее небудет видно? Получается ее можно найти только через перебор ф. хендлов и просмотр что это?
     
  9. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    wan1786
    Да, в таком случае ее не будет видно извне
    Если ты хочешь, чтобы через тулхелп была видна библиотека, то стоит добавить запись о ней в ПЕБ.
     
  10. wan1786

    wan1786 New Member

    Публикаций:
    0
    Регистрация:
    6 дек 2007
    Сообщения:
    19
    Да зачем? наоборот если невидно то хорошо. поэксперементируем.
     
  11. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Вобщем поконкретнее сформулирую вопрос:

    Нужно чтобы моя длл загружалась вместе с ws2_32.dll. Испробовал несколько способов:

    1) патчить экспорт. То есть изменить адрес, скажем WSAStartup на адрес своей функции, которая и будет вызывать LoadLibrary - есть проблеммы при загрузке (эту тему я пытался поднять - ответов на неё не нашлось)
    2) внедряться в стартап либы и выполнять CreateFile -> CreateFileMapping -> MapViewOfFile. Тут свои проблеммы: не получится закинуть весь код в свободное пространство секции кода; придётся повозиться с таблицами импорта, релоков. Можно, конечно написать либу с базонезависимым кодом, но это некоторый гемор.
    3) Обдумываю вариант - добавить запись в таблицу импорта. Эта тема тоже по ходу дела провальная, так как чтобы добавит запись в импорт придётся целиком переместить всю таблицу импорта (иначе не хватит места на ещё одну запись).
     
  12. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    зачем перемещать?
    ты точно проверял?
     
  13. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    71AA25C8 . 80260100 DD 00012680 ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
    71AA25CC . FFFFFFFF DD FFFFFFFF
    71AA25D0 . FFFFFFFF DD FFFFFFFF
    71AA25D4 . 40260100 DD 00012640
    71AA25D8 . 00100000 DD 00001000
    71AA25DC . D0260100 DD 000126D0 ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
    71AA25E0 . FFFFFFFF DD FFFFFFFF
    71AA25E4 . FFFFFFFF DD FFFFFFFF
    71AA25E8 . 4C260100 DD 0001264C
    71AA25EC . 50100000 DD 00001050
    71AA25F0 . E0260100 DD 000126E0 ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
    71AA25F4 . FFFFFFFF DD FFFFFFFF
    71AA25F8 . FFFFFFFF DD FFFFFFFF
    71AA25FC . 56260100 DD 00012656
    71AA2600 . 60100000 DD 00001060
    71AA2604 . 40270100 DD 00012740 ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
    71AA2608 . FFFFFFFF DD FFFFFFFF
    71AA260C . FFFFFFFF DD FFFFFFFF
    71AA2610 . 62260100 DD 00012662
    71AA2614 . C0100000 DD 000010C0
    71AA2618 . 64270100 DD 00012764 ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
    71AA261C . FFFFFFFF DD FFFFFFFF
    71AA2620 . FFFFFFFF DD FFFFFFFF
    71AA2624 . 70260100 DD 00012670
    71AA2628 . E4100000 DD 000010E4
    71AA262C . 00000000 DD 00000000 ; Struct 'IMAGE_IMPORT_DESCRIPTOR'
    71AA2630 . 00000000 DD 00000000
    71AA2634 . 00000000 DD 00000000
    71AA2638 . 00000000 DD 00000000
    71AA263C . 00000000 DD 00000000
    71AA2640 . 6D 73 76 63 72>ASCII "msvcrt.dll",0
    71AA264B 00 DB 00
    71AA264C . 6E 74 64 6C 6C>ASCII "ntdll.dll",0
    71AA2656 . 57 53 32 48 45>ASCII "WS2HELP.dll",0
    71AA2662 . 41 44 56 41 50>ASCII "ADVAPI32.dll",0
    71AA266F 00 DB 00
    71AA2670 . 4B 45 52 4E 45>ASCII "KERNEL32.dll",0
     
  14. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Quark
    И что здесь провального? Это как раз самый правильный вариант :))
     
  15. EvilPhreak

    EvilPhreak New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    154
    Magnum
    А перед этим надо прочитать что такое bound/delay импорт, потом подумать прежде чем нести бред.
     
  16. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    В идеале лучше внести минимальное количество изменений в файл. Перебирать все таблицы - я не думаю что это удастся. в сравнении с тем, как повела себя система после изменения записи в таблице адресов.
     
  17. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Quark
    Гы. А что сложного в "тупом" переносе старой таблицы в новое место (новую секцию)+приклеивание дополнительной IMAGE_IMPORT_DESCRIPTOR, добавление заголовка новой секции, корректировка количества секций и RVA/Size новой таблицы импорта? В любом случае никто за тебя это не будет делать :))
     
  18. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Сложного... хех.. да вобщем-то ничего :). Дело в том, что места в файле может не хватить. Всего 5 стректур + моя + последняя нулевая умножить на 20б каждая = 140б + нужно ещё свой код впихнуть. Не думаю что во всех версиях либы найдётся такой кусок от выравнивания секций.
     
  19. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    А в чем проблема добавить новую секцию?
     
  20. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    изменять ImageSize системных библиотек - идея плохая.