6

在查看了OSR OnlineNtInternals等各种页面之后,似乎NtCreateProcess(并且ZwCreateProcess)指定为内存部分提供句柄是可选的!

这是否意味着我们可以拥有不受可执行映像支持的进程?如果是这样,它们可能(或它们)可能用于什么?这是否意味着我们可以将可执行文件完全复制到内存中,然后甚至从磁盘中删除文件,并让进程继续运行?这似乎是一个非常有用的功能。

4

2 回答 2

5

如果节(win32 域中的文件映射)为 NULL,则使用父进程的节。可能可以使用 NULL 并分配新内存并将 EIP 指向它(或使用页面文件映射),但使用 NtCreateProcess 是有问题的,它没有记录,并且不像 CreateProcess 那样在 win32 子系统中注册。(如果您只想使用 ntdll 的导出,这可能没问题)

在 Win9x、NT4 和 2000 上,您可以在运行时使用此处列出的肮脏技巧从磁盘中删除自己。

其他选项:

  • 使用驱动程序,它们可以在加载后删除(sysinternal 工具这样做)
  • 使用主机进程;启动explorer.exe, cmd.exe 或rundll32.exe 挂起并使用CreateRemoteThread+注入代码(这当然意味着磁盘上有一个exe文件,但没有你的代码在里面)
于 2011-03-18T02:26:47.593 回答
2

我只是尝试自己创建一个带有非图像支持的 Section 对象的进程。:)

结果?

NtCreateProcess回来:

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

所以显然每个进程都需要镜像支持(假设你没有破解内核来做其他事情)。

于 2011-05-30T20:07:45.303 回答