Можно ли запустить процесс, который не будет привязан к ".exe" файлу? Чтобы ничего не делал и рисовался в Диспетчере задач. И при этом можно было его приаттачить к отладчику.
что значит "привязан к ".exe" файлу"? чтобы разширения не было видно, можно запустить файл без разширения (всмысле pe-формат, но не <имя>.exe, а <имя>)...
teribal При создании объекта "процесс" (NtCreateProcess*), IWRC, необходимо передать хендл секции, созданной с флагом SEC_IMAGE. Функции CreateProcess* должны передавать туда хендл секции, созданной "на основе" exe-файла – однако вместо неё можно попробовать воспользовать хендл секции с ntdll. Ну и позаботиться о коде, который должен будет присутствовать в адресном пространстве процесса и "ничего не делать".
Не получается, для начала пробую exe-файл. Код (Text): invoke CreateFile,FileName,GENERIC_READ, FILE_SHARE_READ,0, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 mov [hFile],eax invoke GetFileSize,[hFile],0 mov [filesize],eax invoke CreateFileMapping,[hFile],0,PAGE_READONLY+SEC_IMAGE,0,[filesize],0 mov [hMapFile],eax invoke ZwCreateProcessEx,ProcessHandle,1F0FFFh,0,-1,0,[hMapFile],0,0 invoke CloseHandle,[hMapFile] invoke CloseHandle,[hFile] ... FileName db 'test.exe',0 hFile dd ? hMapFile dd ? ProcessHandle dd ?
А вариант - процесс переименовывает свой собственный exe-шник Вам не подходит? - после переименования и удаления процес не привязан к exe
teribal Можно. CreateProcess'у глубоко пофигу на то, какое у файла расширение (если речь о расширении). Если речь про удаление файла, то нельзя удалить занятый файл. gorodon Удаление не прокатит - файл останется занят после переименования. fuckinff Это не будет самостоятельным процессом. Я когда-то пробовал передать хендл секции из свопа в ZwCreateProcess, не прокатило( Атрибуты не те.
Не кросплатформенно, есть сомнения что будет работать вообще и на виста/7, там ведь большая часть кода по созданию процесса ушла в кернелмод (NtCreateUserProcess). Или? Ваше мнение?
Это все, конечно, интересно. Но все же в чём различия этих секций (созданной во время CreateProcess и просто ZwCreateSection с теми же параметрами)? Выглядят совершенно одинакого.
Great Я тоже не пробовал честно говоря. Старые методы создания процесса с оповещением csrss под виста выдают ACCESS_VIOLATION(если даже учесть изменение сообщения), пока нет желания смотреть где и почему teribal А на основе чего вы создаете секцию? Вы пробовали то, что посоветовал Sol_Ksacap?
Sol_Ksacap, на основе exe-файла. Процесс создан, но надо его ещё как то оживить, а то действительно "висит и ничего не делает". Блин, ещё и закрываться никак не хочет.
А вы код покажите. Первичный поток то создавали? Код, необходимый для него, записывали в адресное пространство нового процесса?
Как раз с этим проблемы. Я так и не разобрался как правильно заполнить структуры CONTEXT и INITIAL_TEB в NtCreateThread и RtlCreateUserThread. Код (Text): invoke CreateFile,exe,GENERIC_ALL,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 mov [hFile],eax invoke NtCreateSection,hSection,SECTION_ALL_ACCESS,0,4000h,PAGE_EXECUTE_READWRITE,SEC_IMAGE,[hFile] invoke NtCreateProcess,ProcessHandle,PROCESS_ALL_ACCESS,0,-1,0,[hSection],0,0 ;invoke NtCreateThread,hThread,THREAD_ALL_ACCESS,0,[ProcessHandle],ClientId,ThreadContext,InitialTEB,0 ;invoke RtlCreateUserThread,[ProcessHandle],THREAD_ALL_ACCESS,0,ZeroBits,StackReserved,StackCommit,401000h,0,hThread,ClientId
Смотрите сюда: http://code.google.com/p/ntwrappr/source/browse/trunk/ntwrappr/procthrd.cpp (мой кодес) Может придет просветление
Смотрите сюда http://paste.org.ru/?qdjg2e (не мой кодес). Просветление заключается в модификации готового кода таким образом, чтоб он начал работать как требуется.