Загрузка библиотеки

Тема в разделе "WASM.WIN32", создана пользователем 2FED, 15 фев 2010.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Такая ситуация, есть PE файл, он должен загружатся как exe и как dll, для экономии места я откзался от релоков и все оффсеты задал в коде динамически, но вот проблемма, если его загружать через LoadLibrary

    Загружается, но не вызывается Entry Point если не установен флаг длл в FileHeader.Characteristics

    Не загружается вообще если стоит флаг длл и нет секции релоков

    Как бы разумней решить эту проблемму? Просто секция релоков там совсем не к месту!
     
  2. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    2FED
    а если экспортнуть функцию, которая будет делать то что в дллмайн, например, и вызвать ее самому?
     
  3. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Попробовать Tls. (Tls Callbacks).
    Попробовать пустую секцию релоков.
     
  4. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    посмотри семпл последней версии tdl3, там используется такая же техника инжекта.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    2FED
    Релоки необходимы, память может быть занята. Проверку флагов не состовляет труда обойти.
    Оформляйте в виде пикода.
     
  6. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Не загружается вообще если стоит флаг длл и нет секции релоков


    Не ужели длл не может быть вообще без релоков, например какаянибудь библиотека FPU в которой код не требующий релокации.

    всмысле, как можно что то обойти если мой модуль даже не получает управление

    Что есть пикод?
     
  7. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    P-код
    Например, Visual Basic до версии 6.0 включительно умел собирать исходник как в нейтив-код, так и в P-код.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    2FED
    В котором вы используете дельтасмещения. В этом случае помещать код в модуль не имеет смысла.
    Изменить процесс загрузки, вмешавшись в лодер.
    x64
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Читайте пост #1
    А лодер поправить - это не всякому под силу.
    Поэтому, самое простое :
    А для экономии места есть масса методов - обычно выравнивание вредит...
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    valterg
    Врядле пустая секция поможет, думаю если отвалится LdrRelocateImage(), то загрузка не удастся. Необходимо не дать потоку вызвать это, как и говорил уже придётся лодер изменять, например отслеживать маппинг и сбрасывать код ошибки, либо выполнять манипуляции флажками(LDRP_*) или трассировать эту часть кода в LdrpMapDll(), вобщем способов куча - юзайте. Для чего это нужно не понятно(привязка к базе это зло).
     
  11. Extranger

    Extranger New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    34
    Там же в FileHeader.Characteristics есть флаг Relocation Stripped - сбросьте оный и будет вам щастье.
     
  12. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    имхо, это shellcode
     
  13. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Шелкод предназначен для эксплуатирования уязвимостей в системе типа переполнение буфера и т.п. - эксплоит короче :)
    Так что базонезависимый код вернее называть пи код.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    d2k9
    Назовём шелкодом код, который не содержит заканчивающих строку значений, корорый и юзается для переполнений.
    K10
    Аналогично как и термин "хук". Вы называете совсем разные понятия одинаковыми именами, посему выражать свои мысли с помощью них слишком проблемно, всегда нужно уточнять. Вот лучше называть как решили - пикод и микод.
     
  15. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Extranger Спасибо, этот флаг то что мне было нужно!

    как я могу кудато вмешатся если код который должен исполнятся ещё не получил управление.

    Ещё такой попрос: когда мой модуль запускается и получает управление, ему надо знать загружен ли он как dll или как exe. Просто в случае с exe получаю imagebase из TEB'a а с dll из параметра dllmain, пока ещё не придумал как отличить тип загрузки.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    2FED
    Код (Text):
    1.     push 0
    2.     push esp
    3.     Call @f
    4. @@:
    5.     Call LdrFindEntryForAddress
    6.     test eax,eax
    7.     pop ecx
    8.     .if !Eax
    9.     test LDR_DATA_TABLE_ENTRY.Flags[ecx],LDRP_IMAGE_DLL ; 0x4
    10.     jz Exe
    11.     ; else Dll
    12.     ; ...