Как при загрузке библиотеки предотвратить выполнение DllMain?

Тема в разделе "WASM.WIN32", создана пользователем _Juicy, 19 авг 2011.

  1. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Сабж
     
  2. zabej

    zabej New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2011
    Сообщения:
    14
    не загружать длл
     
  3. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    1)Выполнить загрузку вручную
    2)Пропатчить лоадер
    3)Поменять точку входа.
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Squash
    Ты уточни, тебе это где надо сделать и зачем?
    В самой библиотеке или извне при её загрузке вручную?
     
  5. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Мне нужно подгрузить длл (чужую) и выполнить процедуру из нее.
    При загрузке длл проверяет, что за процесс ее лоадит, и все кроме родного приложения шлет лесом.
    Текущее решение - патчить флаги в хидере, чтобы превратить ее в ехешник. Хотелось бы нечто менее тяжеловесное.
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Попробуй это:

    - Функция LoadLibraryEx() с флагом DONT_RESOLVE_DLL_REFERENCES.
    - Связка CreateFile() с флагом FILE_EXECUTE и CreateFileMapping() с флагом SEC_IMAGE.

    Во втором случае экспорты придётся разбирать вручную.
     
  7. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    если допустимо патчить флаги в хидере, то почему б тогда не переустановить точку входа на рет (0c2h <не помню сколько параметров>). или убрать это самое слание лесом (как оно там выглядит? фреелибрари? (а возврат потом куда?) пройтись по вызовам символа)
     
  8. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    x64
    не только импорт/экспорт и подгрузка либ, но и ининициализация тлс если оно используется и рантайма.
     
  9. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да, всё верно, во втором случае работы прилично получается, это почти как загрузчик написать. Хотя есть статьи на эту тему, есть и исходники практически готовые, так что сделать можно, конечно.
     
  10. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Потому, что это те же яйца, только в профиль. Копирование+патч файла на диске, хотелось бы этого избежать.

    Спасибо, попробую ее.
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Поменять код dll и всё.
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Squash
    Нужно хотя бы попробовать тупо пропатчить DllMain, чтобы понять будет ли либа вообще после этого работать, т.к. если либа "серьезная", то при атаче она может выполнять кучу кода по инициализации crt\rtl, без которой никакие сурьезные функции кроме "2х2=4" работать все равно не будут
     
  13. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Пропатчить в памяти неэкспортируемую функцию вызова дллмайн в нтдлл (имя я еще не придумал..), в первом параметре ее передается хендл модуля(а сталобыть и начало виртуальной памяти с находящимся в ней модулем), по хендлу найдете имя (используя винапи или же в экспорте есть смещение на имя библиотеки), название библиотеки вы знаете, если оное совпаст с искомым, дллмайн не вызывайте. Вообщем, разумеется, вариант негодный.
    ПС: посему глаголю вам перехватывать функцию, ответственную за обнаружение имени процесса в дллмайн и выдавать ей то имя в котором нуждается код данный и будет это прельстиво и мудро..и с чудинкой

    С учетом того, что выполняться все будет в контексте процесса единого, же реализовать затею оную будет просто довольно человеку смышленому
     
  14. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    TrashGen
    А где тут использование GPE?
     
  15. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    гпе не нужен
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    TrashGen
    Вы ещё дров посоветуйте.
     
  17. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Так что сложного то в этом? Перехватить какую нибудь ГетНеймХендолМодуле(0); (или как бишь там ее?.. Это вообще например просто ежеле что) и возвращать имя модуля, который сверяет код библиотечной дллмайн?
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    TrashGen
    Абсолютно ничего, но по моему Вы в своём посте написали что-то другое(я даже не понял что.) Самый простой и самый лучший вариант я уже озвучил - менять код в самой длл.
     
  19. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    ТС против патча на диске, он же тоже сказал. И вообще нашли из-за чего поспорить, гпе какой то приплели. Доводите вот до бана когда по сурьёзнаму-то отвечаешь..
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    TrashGen
    ТС сам\сама не знает чего хочет. Впредь излагайте мысли ясней, тогда не будут троллить.