在查看了OSR Online和NtInternals等各种页面之后,似乎NtCreateProcess
(并且ZwCreateProcess
)指定为内存部分提供句柄是可选的!
这是否意味着我们可以拥有不受可执行映像支持的进程?如果是这样,它们可能(或它们)可能用于什么?这是否意味着我们可以将可执行文件完全复制到内存中,然后甚至从磁盘中删除文件,并让进程继续运行?这似乎是一个非常有用的功能。
在查看了OSR Online和NtInternals等各种页面之后,似乎NtCreateProcess
(并且ZwCreateProcess
)指定为内存部分提供句柄是可选的!
这是否意味着我们可以拥有不受可执行映像支持的进程?如果是这样,它们可能(或它们)可能用于什么?这是否意味着我们可以将可执行文件完全复制到内存中,然后甚至从磁盘中删除文件,并让进程继续运行?这似乎是一个非常有用的功能。
如果节(win32 域中的文件映射)为 NULL,则使用父进程的节。可能可以使用 NULL 并分配新内存并将 EIP 指向它(或使用页面文件映射),但使用 NtCreateProcess 是有问题的,它没有记录,并且不像 CreateProcess 那样在 win32 子系统中注册。(如果您只想使用 ntdll 的导出,这可能没问题)
在 Win9x、NT4 和 2000 上,您可以在运行时使用此处列出的肮脏技巧从磁盘中删除自己。
其他选项:
我只是尝试自己创建一个带有非图像支持的 Section 对象的进程。:)
结果?
NtCreateProcess
回来:
STATUS_SECTION_NOT_IMAGE
// An attempt was made to query image information on a section which
// does not map an image.
所以显然每个进程都需要镜像支持(假设你没有破解内核来做其他事情)。