Может ли быть процесс без исполняемого образа? - PullRequest
5 голосов
/ 18 марта 2011

После просмотра различных страниц, таких как OSR Online и NtInternals , кажется, что NtCreateProcessZwCreateProcess) указывают, что указатель на раздел памяти равен опция !

Значит ли это, что у нас могут быть процессы, которые не поддерживаются исполняемыми образами? Если да, то для чего они (или они) могут быть использованы? Означает ли это, что мы можем полностью скопировать исполняемый файл в память, а затем даже удалить файл с диска и продолжить процесс? Это может показаться очень полезной функцией.

Ответы [ 2 ]

4 голосов
/ 18 марта 2011

Если section (отображение файла в win32 land) равно NULL, используется раздел родительского процесса. Может быть возможно использовать NULL и выделять новую память и указывать на нее EIP (или использовать отображение файла подкачки), но использование NtCreateProcess проблематично, оно недокументировано и не регистрируется в подсистеме win32, как это делает CreateProcess. (Если вы хотите использовать только экспорт из ntdll, это может быть хорошо)

На Win9x, NT4 и 2000 вы можете удалить себя с диска во время работы, используя грязные приемы, перечисленные здесь .

Другие опции:

  • Используйте драйвер, его можно удалить после загрузки (для этого используются инструменты sysinternal)
  • Использовать хост-процесс; Запустите файл explorer.exe, cmd.exe или rundll32.exe приостановленным и используйте встроенный код CreateRemoteThread + (это, конечно, означает, что на диске есть исполняемый файл, но в нем нет ни одного кода)
2 голосов
/ 31 мая 2011

Я только что попытался создать процесс с объектом Section без поддержки изображения.:)

Результат?

NtCreateProcess возвращено:

STATUS_SECTION_NOT_IMAGE
// An attempt was made to query image information on a section which
// does not map an image.

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

...