Внедрение длл через QueueUserAPC

Тема в разделе "WASM.WIN32", создана пользователем coocky, 16 апр 2008.

  1. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    TermoSINteZ
    Так.. Значит мне,перечисляя потоки следует проверить первым делом состяние UserApcPending.Если оно false-игнорируем. И все?
    А вот уже дополнили.. Т.е проверять надо только состояние Alertable?
    А если ,чисто теоретически,оно у всех потоков не установлено-тогда облом вообще?
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    coocky
    Из юзермода ты его не проверишь

    Ты сможешь тока проверить Alerted\Alertable . Да и я уверен, что ты не найдешь таких потоков в обычных запущенных приложениях . Разве что в explorer.exe, может, есть 1 такой поток в этом состоянии. Но, ИМХО, если нет то это тупиковый путь для внедрения в систему из юзермода.

    JamesB
    Код (Text):
    1. PETHREAD Thread;
    2. Thread->Tcb.Alertable = TRUE;
    3. Thread->Tcb.ApcState.KernelApcPending = TRUE;
    Лишнее.
     
  3. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    :)) Приехали..
    Я вообще хочу внедрятся почти во все..,во что можно.А explorer только-меня не устраивает:)
    Ладно, давайте посмотрим.. Т.е. мне нужен поток,у которого состояние Alertable=TRUE ?
    Ok Я посмотрел функцию NtQuerySystemInformation- класс
    SystemProcessesAndThreadInformation, нашел там поле THREAD_STATE,это то,что мне нужно проверять? Я прошу прощение за назойливость,но для меня в первые использовать эту функцию,для проверки флага Alertable (кстати,там нет такого)
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    coocky
    Это не то. Это состояние исполнения потока. То есть в каком режиме он находится.
    The execution state of the thread. Permitted values are drawn from the enumeration
    Код (Text):
    1. THREAD_STATE.
    2. typedef enum {
    3. StateInitialized,
    4. StateReady,
    5. StateRunning,
    6. StateStandby,
    7. StateTerminated,
    8. StateWait,
    9. StateTransition,
    10. StateUnknown
    11. } THREAD_STATE;
    Для проверки надо заюзать
    ZwTestAlert
     
  5. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Ха.Так у него ж нет параметров! Он тестит поток,в котором вызывается.Как же я узнаю о чужом потоке?
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    coocky
    Да пардон , я и забыл.
    Значит никак не узнаешь из юзера (если тока косвенно послав апц и увидев что ниче не выполнилось :-D)

    Попробуй поюзать ZwAlertThread. Тока если поток без UserApcPending то ничего не произойдет.
    Объяснения смотри выше
    Сам ты поток из юзера в алертейбл не переведешь , мсдн пишет :
    Код (Text):
    1. A thread enters an alertable state by using SleepEx, SignalObjectAndWait, WaitForSingleObjectEx, WaitForMultipleObjectsEx, or MsgWaitForMultipleObjectsEx to perform an alertable wait operation.
    Но это если поток создаешь ты и вызываешь в его процедуре соответствующие функции.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Да
    Смешно