Реализовывал ли кто-нибудь? может сразу дадите наставления по поводу... Интересует вариант в юзермод. Перехват ZwCreateUserProcess, ZwCreateProcess, ZwCreateProcessEx сами по себе результата не дают (нормального). Вариант ждать до самого вызова ZwResumeThread и прямо перед его вызовом делать внедрение. Но нет уверенности что именно тот ZwResumeThread который нам надо будет перехвачен, например из другого потока, при одновременном создании например 2 процессов из 2 разных потоков, или создание процесса в одном, а Resume в другом, или же вообще перехват ручного создания процесса... Подскажите если кто копал как быть, что перехватывать, что учитывать, чтобы сделать внедрение в новый только что созданные процесс. Интересует реализация в 2k8 (используется в основном ZwCreateUserProcess), XP (ZwCreateProcessEx), 2k3 (ZwCreateProcessEx), 2k0 (ZwCreateProcess). Видел где-то статью по поводу, но очень давно, если кто знает дайте ссылку)
внедрение кода, в частности библиотека, в dllmain есть GetModuleFileNameW, из-за чего если внедрение выполнять сразу после CreateProcess, возникает ошибка например при внедрении в тот же блокнот : функция с номером 375 не найдена в библиотеке comctl32.dll, ну или подобные... если же внедрение выполнять прямо перед или после ZwResumeThread то всё ок.
Легально - поставить апк в очередь пока тред есчо заморожен. Тогда при возврате из загрузчика, есчо до перехода потока на пользовательский код будет доставлена апк, в это время лоадер разлочен и можно загружать что угодно. Недостаток - модуль загружается уже после оканчания работы загрузчика, был вызван импорт, тлс, шим нотификаторы и пр. Если необходимо подгрузить модуль до выполнения какоголибо пользовательского кода, например если у приложения есть защита, то придётся вмешиваться в работу загрузчика, например перехватывать чтото или нотификаторы ставить удалённо.
Читай внимательно, ведь сто раз было - http://www.wasm.ru/article.php?article=apihook_1 Раздел статейки мс-рема с заголовком Глобализация. Он там всё очень подробно объясняет и приводит примеры. Если вкратце, то "При создании нового процесса обязательно происходит вызов функции ZwCreateThread." Это и надо хучить. Ну и ещё важное "После инициализации созданного процесса происходит запуск его основной нити с помощью ZwResumeThread." Из этого можно получить всю необходимую инфу.
проблема в том, что ZwCreateUserProcess(vista, 2k8) поток создаёт в ядерном коде сама(!) и перехватить это из юзермода нельзя.