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

Discussion in 'WASM.BEGINNERS' started by Span, Nov 28, 2006.

  1. Span

    Span New Member

    Blog Posts:
    0
    Здравствуйте, уважаемые!

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

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

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

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

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

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

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

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

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

    spencer New Member

    Blog Posts:
    0
    для того чтоб дебажить инжектируемый код, советую приаттачится к процесу в который происохдит инжект, а в сам код влепить на начало int 3, что сработает как бряк...

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

    Nouzui New Member

    Blog Posts:
    0
    DisableThreadLibraryCalls
     
  4. asd

    asd New Member

    Blog Posts:
    0
    Span
    http://www.wasm.ru/forum/viewtopic.php?id=14848
    и 20 глава Рихтера

    Nouzui
    Code (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

    Blog Posts:
    0
    пока выполнение находится внутри DllMain никакие изменения состояний потоков не случаются
    ни старты ни стопы - ничего
    критическая секция однако в LdrLoaderLock-е
     
  6. Nouzui

    Nouzui New Member

    Blog Posts:
    0
    а для меня это новость..
     
  7. kyprizel

    kyprizel New Member

    Blog Posts:
    0
    этот вопрос уже обсуждался