DllInject

Тема в разделе "WASM.WIN32", создана пользователем dmicarus, 17 авг 2009.

  1. dmicarus

    dmicarus New Member

    Публикаций:
    0
    Регистрация:
    25 май 2009
    Сообщения:
    17
    Понимаю, что тема вобщем-то для многих заезженная но.. ,короче, появилось у меня немного свободного времени и я решил немного покопать архив васма на предмет интересных и новых для меня статей. Нашел статью MS-REM'a и начал экспериментировать с Dll инжектом на основе WriteProcessMemory+CreateRemoteThread. После загрузки собственно dll в remote процесс в статье написано, что будет выполнена точка входа c DLL_PROCESS_ATTACH, но не сказано в контексте какого потока. Выяснил, что вход выполится в контексте основного потока и, к примеру, код моей DLL
    Код (Text):
    1. switch(dwReason)
    2. {
    3. ...
    4.     case DLL_PROCESS_ATTACH:
    5.     Sleep(INFINITE);
    6. ...
    7. }
    просто завесит программу.
    Вопрос в том - в каком месте основной поток программы прерывается, чтобы выполнить DllMain?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Выполняется в контексте вызывающего потока, зависает вероятно потомучто вы не отпускаете тред, а в это время второй("основной") входит в критическую секцию лоадера(например изза GUI-хуков, uxtheme.dll подгружается многократно) и будет ждать освобождение кс первым тредом, а он висит. Нет понятия главного потока, треды равноправны и независимы друг от друга.