Может ли быть процесс без исполняемого образа?

После просмотра различных страниц, таких как 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.

Таким образом, очевидно, что каждый процесс должен иметь поддержку изображений (при условии, что вы не взломаете ядро, чтобы поступить иначе).

Другие вопросы по тегам