Перехват запуска и внедрение dll

Тема в разделе "WASM.NT.KERNEL", создана пользователем Panf, 29 мар 2007.

  1. Panf

    Panf New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2007
    Сообщения:
    3
    Уважаемые программеры... помогите начинающему.........
    Следующая задача.... необходимо к каждому процессу, загружаемому в системе приаттачить свою dll.... (App init's коректно не отрабатывает, так как меня интересует перехват консольных приложений...)
    Может у кого какие-нибудь мысли есть?
    Я ковыряю это в следующем направлении....
    Драйвер, PsSetCreateProcessNotifyRoutine ...в обработчике получаю handle процесса через ZwOpenProcess() ....
    А теперь никак не могу продвинутся дальше.... мысль - такая.... в user-mode создаю event....передаю (или открываю его в драйвере)...он будет устанавливаться в обработчике PsSetCreateProcessNotifyRoutine....если он, например, установлен, то внедряю dll в процесс с таким-то handl'ом, к примеру по методу Рихтера(может еще варианты есть...править PE не охота...мало опыта)...но тут тоже возникает вопрос....как приостановить процесс???, чтобы внедрить в него dll?.
    Наставьте на путь истинный....если полный БАЯН извеняйте...
    P.S. заранее очень благодарен.
     
  2. agent007

    agent007 New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2007
    Сообщения:
    166
    хех) ну я подобной темой щас интересуюсь) застрял на одной аномалии)
     
  3. Panf

    Panf New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2007
    Сообщения:
    3
    поделись....в каком именно направлении двигаешься, если не секрет конечно....
    P.S. моя проблема в том, что необходимо аттачить при запуске... ((( поэтому и пытаюсь через драйвер...
     
  4. agent007

    agent007 New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2007
    Сообщения:
    166
    ну так аттачь) выделяй память в процессе, пиши туда шелкод, который подгрузит длл и создай тред :) вот вроде такая идея
     
  5. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Panf
    А зачем его приостанавливать? Или принципиально, чтобы dll внедрялась до запуска процесса? Тогда самый простой вариант - установить перехват в ядре на ZwResumeThread и не возвращать управление процессу, пока не выполнишь весь свой "грязный" код ;))
    Поищи по форуму темы про APC и ручному созданию потока. Там разбираются как ручная загрузка dll, так и передача управления на DllMain
     
  6. Panf

    Panf New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2007
    Сообщения:
    3
    Спасибо, поищу....мне не принципиально останавливать процесс...скажем так, dll, которую я подгружаю, содержит перехват одной из специфических функций, которая запускается для определенного типа программ одной первых, после CreateProcess.......
    Еще такие вопросы :
    - PsSetCreateProcessNotifyRoutine отрабатывает до или после NtCreateProcess(ZwCreateProcess) ?
    - Если я приостановлю процесс в обработчике PsSetCreateProcessNotifyRoutine, не повиснет ли вся система?
     
  7. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    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`а стартовый поток исполняться не начнет.