http://www.codeproject.com/KB/system/KernelExec.aspx тут есть статья такая , я сделал обыкновенный месаджбокс прогу и запустил ее с помощью дровины. Она запустилась , все ок. Но я не пойму , какие привилегии у этого метода , его плюсы ? .. просмотрев его во всех прогах по просмотру процессов я ничего особого не нашел. Статью я прочитал но все равно как то не понятно .. Обьясните плиз ..
просто нет доукментированного способа запуска процессов. зы. в той статье есть небольшая ошибка, мы с крешем ковыряли это, помнится.
дык что особенного ??? ...инжект не делает , а просто запуск , а привилегий никаких , мой касперский также спрашивает разрешить или нет с другими прогами ? ... зачем делать сложную дровину для процеса который запускаеца как все ??? Где логика
=) ага ... значит это для того чтобы в дровине скомбинировать 2 приложения .. усер и кернел .. столько гемороя из за этого
Для этого обычно узерское приложения запускается из узермод (типа HKLM\Windows\Run, Startup folder, etc) Вообще это статья HACK полный...
=) ну получаецо что так ! Прочитал щас статью про Коллбэк функцию в кернеле , здесь на сайте. Автор гонялся за этим по его словам давно. Но в итоге понял что это не применимо , млин я сразу так подумал
Спешу вас разочаровать. Никак у вас не получится написать запуск процесса исключительно из-под ядра. Для этого требуется специфичный для каждого сервис пака код, (много много кода) который будет отличаться от версии к версии и обеспечит вам много проблем как в плане как реализации так и в плане отладки. Все что остается это старт процессов через пользовательское API, путем описанного выше метода.
Clerk NtCreateProcess к сожалению процесс создаст, но не запустит. Если идти с нуля, то там все начинается с ZwCreateSection, ZwQuerySection и т.д. до ZwResumeThread. soveren прав в той части, что код будет сильно зависим от версии системы, но запустить процесс из ядра все-таки можно, хотя под это и нужно писать тонны кода. Я это делал под XP. Вот здес http://www.wasm.ru/forum/viewtopic.php?id=24967 кстати Great приводил дельный совет по запуску процесса
В плане использования процессов как плацдарма для чего-нибудь проще создать из-под ядра пользовательский поток в каком-нибудь уже существующем процессе. Это сделать гораздо проще и код получится относительно стабильно одинаковым под все версии оп.системы.
По моему функция ntdll!RtlCreateUserProcess достаточна для запуска процесса и примитивна, никаких там тонн кода нет, для режима ядра будет подобно. А если насчёт подсистемы, то никаких проблем обратиться к порту(LPC) из под режима ядра нет.