Перехват CreateProcess и внедрение с установкой перехватов

Тема в разделе "WASM.WIN32", создана пользователем multiarc, 27 июл 2009.

  1. multiarc

    multiarc New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2008
    Сообщения:
    21
    Адрес:
    РБ Жодино
    Реализовывал ли кто-нибудь? может сразу дадите наставления по поводу... Интересует вариант в юзермод. Перехват ZwCreateUserProcess, ZwCreateProcess, ZwCreateProcessEx сами по себе результата не дают (нормального). Вариант ждать до самого вызова ZwResumeThread и прямо перед его вызовом делать внедрение. Но нет уверенности что именно тот ZwResumeThread который нам надо будет перехвачен, например из другого потока, при одновременном создании например 2 процессов из 2 разных потоков, или создание процесса в одном, а Resume в другом, или же вообще перехват ручного создания процесса... Подскажите если кто копал как быть, что перехватывать, что учитывать, чтобы сделать внедрение в новый только что созданные процесс. Интересует реализация в 2k8 (используется в основном ZwCreateUserProcess), XP (ZwCreateProcessEx), 2k3 (ZwCreateProcessEx), 2k0 (ZwCreateProcess).
    Видел где-то статью по поводу, но очень давно, если кто знает дайте ссылку)
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Опишите подробно задачу, не понятно. Что понимать под внедрением ?
     
  3. multiarc

    multiarc New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2008
    Сообщения:
    21
    Адрес:
    РБ Жодино
    внедрение кода, в частности библиотека, в dllmain есть GetModuleFileNameW, из-за чего если внедрение выполнять сразу после CreateProcess, возникает ошибка например при внедрении в тот же блокнот : функция с номером 375 не найдена в библиотеке comctl32.dll, ну или подобные... если же внедрение выполнять прямо перед или после ZwResumeThread то всё ок.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Легально - поставить апк в очередь пока тред есчо заморожен. Тогда при возврате из загрузчика, есчо до перехода потока на пользовательский код будет доставлена апк, в это время лоадер разлочен и можно загружать что угодно. Недостаток - модуль загружается уже после оканчания работы загрузчика, был вызван импорт, тлс, шим нотификаторы и пр. Если необходимо подгрузить модуль до выполнения какоголибо пользовательского кода, например если у приложения есть защита, то придётся вмешиваться в работу загрузчика, например перехватывать чтото или нотификаторы ставить удалённо.
     
  5. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Читай внимательно, ведь сто раз было - http://www.wasm.ru/article.php?article=apihook_1
    Раздел статейки мс-рема с заголовком Глобализация. Он там всё очень подробно объясняет и приводит примеры. Если вкратце, то "При создании нового процесса обязательно происходит вызов функции ZwCreateThread." Это и надо хучить. Ну и ещё важное "После инициализации созданного процесса происходит запуск его основной нити с помощью ZwResumeThread." Из этого можно получить всю необходимую инфу.
     
  6. multiarc

    multiarc New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2008
    Сообщения:
    21
    Адрес:
    РБ Жодино
    проблема в том, что ZwCreateUserProcess(vista, 2k8) поток создаёт в ядерном коде сама(!) и перехватить это из юзермода нельзя.
     
  7. multiarc

    multiarc New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2008
    Сообщения:
    21
    Адрес:
    РБ Жодино
    На счёт апк это подойдёт) Спасибо за идею) жаль сам не допёр)