Dll - противодействие выгрузке

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

  1. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Приложение загружает мою библиотеку, а через некоторое время выгружает ее через FreeLibrary.
    Что можно сделать для того, чтобы dll осталась в памяти? Вызов LoadLibrary из самой dll не прокатывает.
     
  2. freyr

    freyr New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2010
    Сообщения:
    95
    понять и отпустить :)

    а если серьезно, все что угодно, перехватить FreeLibrary и возвращать TRUE когда попадается твоя база, можно из PEB вытереть свою запись, можно LdrAddRefDll вызвать
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Squash
    Глобальное решение : надо внедрятся в другое место(по другому и правильно). Локальное, но может трудоемкое: выяснить почему делают free и пропатчить :)
     
  4. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Так...
    freyr
    Итак слишком много всего перехвачено, но как последний вариант... Антивири еще говняться начнут :dntknw:

    Как это сделать?

    Что-то не помогает... Может, флаги не те? С каким Flags вообще ее надо вызывать?

    valterg
    ... найти другую работу и заняться другим проектом.

    Мне известно, почему его делают. Что предлагаете патчить?
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Squash
    сделать копию в памяти своей длл нельзя?
     
  6. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    То есть? Загружать вторую длл, о которой приложению неизвестно? В принципе можно, но костылем ведь будет...

    Ну да, как-то так... Все равно костыль.
     
  7. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    Squash
    При статической загрузке dll (через импорт) загрузчик в поле LoadCount структуры LDR_MODULE ставит -1, вследствие чего эту dll с помощью FreeLibrary выгрузить нельзя. Просто выставьте там это значение для своей dll.
     
  8. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Можно заинжектить вызов LoadLibrary в чужой процесс, что по идее должно увеличить RefCount.
     
  9. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    freyr
    )))

    Squash
    А можно хоть приблизительно узнать цель такого "броска"?
    Или хоть намек?
     
  10. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    Ezrah
    Если её подгузить в чужой процесс, то в своём процессе ничего не изменится, так что есть три варианта:
    1) Патчить место вызова FreeLibrary (если оно известно).
    2) Перехватывать FreeLibrary.
    3) Писать в LoadCount -1.
    Третий вариант мне кажется наиболее "красивым".
     
  11. Deader

    Deader New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    96
    приоткрою один маленький секрет )))))))
    грузите длл своим приложением(DLL_PROCESS_ATTACH -> SetWindowsHookEx(WH_GETMESSAGE,.......бла-бла-бла), оно(длл) автоматом грузится во все остальные ехе. и потом в других приложениях при вызове FreeLibrary для вашей длл, будет аксес виялятиун.
     
  12. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    Deader
    У меня на WOW64 всё нормально освобождается.
     
  13. Deader

    Deader New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    96
    gmer.exe etc(optional) -> показывает длл в процессе
    в процессе -> h=GetModuleHandle(ваша длл) -> FreeLibrary(h)=True -> аксес виялятиун -> спонтанные глюки в системе - explorer etc
     
  14. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Спасибо всем, проблема решена вызовом CoInitialize для каждого потока (дллка с ком ко всему прочему).

    qwe8013
    Спасибо, буду иметь ввиду на будущее.