DLL_THREAD_ATTACH + Windows 7 x64 (под WOW64)

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

  1. float

    float New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2010
    Сообщения:
    113
    Создаю тему тут, потому что под WOW64. Работаю с 32-битным приложением. Разрабатываю 32-битную длл, для мониторинга потоков. Для сбора инфы о потоках перехватываю ZwCreateThreadEx, и обрабатываю DLL_THREAD_ATTACH.

    Код (Text):
    1. NTSTATUS result = orig_ZwCreateThreadEx(ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle, lpStartAddress, lpParameter, CreateSuspended, StackZeroBits, SizeOfStackCommit, SizeOfStackReserve, lpBytesBuffer);
    2.     if(!NT_SUCCESS(result))
    3.         return result;
    4.  
    5.     THREAD_BASIC_INFORMATION ti={0};
    6.  
    7.     if(!NT_SUCCESS(_NtQueryInformationThread(*ThreadHandle,ThreadBasicInformation,&ti,sizeof(ti),NULL)))
    8.         return result;
    9.  
    10.     if(ti.ClientId.UniqueThread)
    11.         threads.insert((DWORD)ti.ClientId.UniqueThread);
    Код (Text):
    1. case DLL_THREAD_ATTACH:
    2.         if(threads.find(GetCurrentThreadId())==threads.end())
    3.         {
    4.                 char buf[16];
    5.                 wsprintfA(buf,"2: %d",GetCurrentThreadId());
    6.                 MessageBoxA(0,buf,buf,0);
    7.             //ExitThread(0);
    8.         }
    9.         break;
    И, в общем, так получилось, что они вызываются по очереди, как и должны, но ti.ClientId.UniqueThread никогда не равен GetCurrentThreadId() в последующем DLL_THREAD_ATTACH.

    Подскажите кто-нибудь что-то
     
  2. float

    float New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2010
    Сообщения:
    113
    короче с этим wow64 вообще что-то непонятное творится. Без wow64 при ручном создании потока, и при создании удаленного потока вызывается ZwCreateThread(Ex). Под wow64 же, отловить создание (именно процесс создания, а не факт появления) потока таким образом не удается. Как быть в таком случае?

    p.s. на всякий случай, естественно, только ring-3.
     
  3. corehook

    corehook New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    19
    в OllyDBG Break on new thread
     
  4. float

    float New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2010
    Сообщения:
    113
    а так, у меня была такая же мысль.