CreateThread. Глюк при создании нового потока из инжектированного дел.

Тема в разделе "WASM.BEGINNERS", создана пользователем Span, 28 ноя 2006.

  1. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Здравствуйте, уважаемые!

    Вот такая проблема...
    При инжекте делеле в пользовательский процесс (binarnik.exe) наткнулся на ошибку:

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

    CreateThread возвращает Ok, GetLastError пустой. В Диспетчере задач видно, что тред(ы) создались. Но они не выполняются...

    Для информации:

    dll - чистый win32 API. Без CRT. все довольно стандартно.
    binarnik.exe загружается немного не стандартно (база = 01000000).

    Пробовал уже и CreateThread со своим SECURITY_ATTR и размером стека, с которым она нормально работала (2 интеловских стринички).

    Куда копать????

    Еще вопрос...
    Как этот процесс можно дебажить???

    Я имею ввиду, когда в процесс инжектишь длл.
     
  2. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    для того чтоб дебажить инжектируемый код, советую приаттачится к процесу в который происохдит инжект, а в сам код влепить на начало int 3, что сработает как бряк...

    а по поводу первой части ниче не понял если честно, лутчеб дал исходник...
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    DisableThreadLibraryCalls
     
  4. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Span
    http://www.wasm.ru/forum/viewtopic.php?id=14848
    и 20 глава Рихтера

    Nouzui
    Код (Text):
    1. LibMain proc hInstDLL:DWORD,reason:DWORD,unused:DWORD
    2.     .if reason==DLL_PROCESS_ATTACH
    3.         invoke DisableThreadLibraryCalls,hInstDLL
    4.         lea eax,Func
    5.         invoke CreateThread,0,0,eax,0,0,offset return_
    6.         invoke Sleep,1000
    7.     .endif
    8.     mov eax,1
    9.     ret
    10. LibMain Endp
    11. Func    proc
    12.     invoke MessageBox,0,0,0,0
    13.     invoke ExitProcess,0
    14.     ret
    15. Func    Endp
    16. End LibMain
    Если вызывать так, то всё равно поток стартует только после выхода из длл майн. Или можно подругому?
     
  5. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    пока выполнение находится внутри DllMain никакие изменения состояний потоков не случаются
    ни старты ни стопы - ничего
    критическая секция однако в LdrLoaderLock-е
     
  6. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    а для меня это новость..
     
  7. kyprizel

    kyprizel New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    232
    Адрес:
    TSK
    этот вопрос уже обсуждался