Уважаемые программеры... помогите начинающему......... Следующая задача.... необходимо к каждому процессу, загружаемому в системе приаттачить свою dll.... (App init's коректно не отрабатывает, так как меня интересует перехват консольных приложений...) Может у кого какие-нибудь мысли есть? Я ковыряю это в следующем направлении.... Драйвер, PsSetCreateProcessNotifyRoutine ...в обработчике получаю handle процесса через ZwOpenProcess() .... А теперь никак не могу продвинутся дальше.... мысль - такая.... в user-mode создаю event....передаю (или открываю его в драйвере)...он будет устанавливаться в обработчике PsSetCreateProcessNotifyRoutine....если он, например, установлен, то внедряю dll в процесс с таким-то handl'ом, к примеру по методу Рихтера(может еще варианты есть...править PE не охота...мало опыта)...но тут тоже возникает вопрос....как приостановить процесс???, чтобы внедрить в него dll?. Наставьте на путь истинный....если полный БАЯН извеняйте... P.S. заранее очень благодарен.
поделись....в каком именно направлении двигаешься, если не секрет конечно.... P.S. моя проблема в том, что необходимо аттачить при запуске... ((( поэтому и пытаюсь через драйвер...
ну так аттачь) выделяй память в процессе, пиши туда шелкод, который подгрузит длл и создай тред вот вроде такая идея
Panf А зачем его приостанавливать? Или принципиально, чтобы dll внедрялась до запуска процесса? Тогда самый простой вариант - установить перехват в ядре на ZwResumeThread и не возвращать управление процессу, пока не выполнишь весь свой "грязный" код ) Поищи по форуму темы про APC и ручному созданию потока. Там разбираются как ручная загрузка dll, так и передача управления на DllMain
Спасибо, поищу....мне не принципиально останавливать процесс...скажем так, dll, которую я подгружаю, содержит перехват одной из специфических функций, которая запускается для определенного типа программ одной первых, после CreateProcess....... Еще такие вопросы : - PsSetCreateProcessNotifyRoutine отрабатывает до или после NtCreateProcess(ZwCreateProcess) ? - Если я приостановлю процесс в обработчике PsSetCreateProcessNotifyRoutine, не повиснет ли вся система?
After a driver-supplied routine is registered, it is called with Create set to TRUE just after the initial thread is created within the newly created process designated by the input ProcessId handle. То есть, после. Смотря какой процесс Если winlogon или csrss то без сомнений ) Если ты имеешь в виду, влияет ли длительная обработка внутри PsSetCreateProcessNotifyRoutine на создаваемый процесс, то хрен знает; надо пробовать. ЗЫ: Оказалось, что вызов callback происходит внутри NtCreateThread. Причем вызов синхронный, т.е. пока не закончишь обработку внутри callback`а стартовый поток исполняться не начнет.