Слишком общий вопрос, уточни задачу. В общем случае, пишем обычный драйвер, а по сети общаемся через TDI-интерфейс (или Winsock Kernel, если нужна только Vista и выше).
Драйвер есть. Пакеты отсылает/принимает. Как быть с остальным? Думаю, что потребуется создавать потоки в r3.
Вот известный пример bindshell'а http://www.metasploit.com/data/shellcode/win32_bind.asm я же не хочу использовать Winsock. У меня есть свои функции(send, recv). Вопрос в том, можно ли закрутить потоки через них?
Я ведь не просто так спросил про детали задачи. Меня интересует, в частности, будет ли использоваться функциональность подсистемы Win32. Можно обойтись только режимом ядра или нет? Другими словами, тебе нужен Win32/Native поток, или достаточно будет системного? Если достаточно будет системного потока, тогда всё просто - по сети, как я уже сказал, общаешься через TDI-интерфейс (пишешь TDI-клиента, если точнее), а поток создаёшь через PsCreateSystemThread. В случае Native создать поток можно через NtCreateThread (её адрес можно взять из SDT), но как ты будешь общаться по сети я не знаю, - на этом уровне сетевых функций нет (WinSock использовать нельзя, а интерфейс, используемый AFD, недокументирован), т.е. тут по-любому придётся писать свой драйвер (TDI-клиент) и интерфейс к нему. Если всё же поток должен быть Win32'шный, тут логика на порядок сложнее будет. Вообще, варианта у тебя всего три: Win32, Native или голое ядро. Самый простой вариант в плане реализации - только драйвер режима ядра и системный поток (это который создаётся через функцию PsCreateSystemThread). Native-поток чуть сложнее хотя бы тем, что тут нужен будет либо шел-код, либо своя DLL. Ну и самое сложное - это Win32-поток из ядра, это вообще отдельная тема. Если я правильно понял, тебе нужно чистое ядро. Единственное, что меня смущает это "cmd" в названии темы. Как бы cmd.exe и ядро тут мало совместимы. Короче, пока мне лично мало понятно что ты хочешь (вполне возможно, что ты и сам не очень хорошо это понимаешь). Тут, как говорится, есть нюансы.
Прости, но ты на каком языке говоришь? Что есть "закрутить потоки через функции send/recv" ? Я вообще не знаю как закручиваются потоки, и ни я ни мои знакомые-программисты никогда не закручивали потоки. Может я какой-то технологии просто не знаю? Кто может научить меня крутить потоки? Я тоже хочу!
создавай телнет процесс привязанный к cmd, скрывай процесс ( либо пиши свой ring3 ) и создавай в потоке ( скрывай поток ) а вообще ты достиг помоему
Получается так: Из моего драйвера создается поток в csrss.exe, который в свою очередь создает процесс cmd.exe (CreateProcess), у которого stdin/out/err стоят на мой, пока еще непонятноый, хэндл, и ждет его завершения (WaitForSingleObject). Все правильно пока? Вместо подмены хэнделов, как в примере выше, думаю воспользоваться пайпами: Код (Text): HANDLE ReadPipe, WritePipe; CreatePipe(&si.hStdInput, &WritePipe, &sa, 0); CreatePipe(&ReadPipe, &si.hStdOutput, &sa, 0); но мои функции send и recv находятся в АП драйвера.