Может ли быть процесс без исполняемого образа?
После просмотра различных страниц, таких как OSR Online и NtInternals, кажется, что NtCreateProcess
(а также ZwCreateProcess
) укажите, что указывать раздел памяти необязательно!
Означает ли это, что у нас могут быть процессы, которые не поддерживаются исполняемыми образами? Если да, то для чего они могут (или используются) потенциально? Означает ли это, что мы можем полностью скопировать исполняемый файл в память, а затем даже удалить файл с диска и продолжить процесс? Это казалось бы действительно полезной функцией.
2 ответа
Если section (отображение файла в win32 land) равно NULL, он использует раздел родительского процесса. Может быть возможно использовать NULL и выделить новую память и указать на нее EIP (или использовать сопоставление файла подкачки), но использование NtCreateProcess проблематично, оно недокументировано и не регистрируется в подсистеме win32, как это делает CreateProcess. (Если вы хотите использовать только экспорт из ntdll, это может быть хорошо)
На Win9x, NT4 и 2000 вы можете удалить себя с диска во время работы, используя грязные приемы, перечисленные здесь.
Другие опции:
- Используйте драйвер, он может быть удален после загрузки (инструменты Sysinternal делают это)
- Использовать хост-процесс; Запустите файл explorer.exe, cmd.exe или rundll32.exe и приостановите использование встроенного кода CreateRemoteThread+ (это, конечно, означает, что на диске есть исполняемый файл, но в нем нет ни одного кода)
Я просто попытался создать процесс с объектом Section без поддержки изображений.:)
Результат?
NtCreateProcess
вернулся:
STATUS_SECTION_NOT_IMAGE
// An attempt was made to query image information on a section which
// does not map an image.
Таким образом, очевидно, что каждый процесс должен иметь поддержку изображений (при условии, что вы не взломаете ядро, чтобы поступить иначе).