【问题标题】:Can There be a Process WITHOUT an Executable-Backed Image?可以有一个没有可执行文件支持的图像的过程吗?
【发布时间】:2011-07-17 20:30:23
【问题描述】:

查看OSR OnlineNtInternals 等各种页面后,NtCreateProcess(和ZwCreateProcess)似乎指定为内存部分提供句柄可选! p>

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

【问题讨论】:

    标签: winapi process executable nt


    【解决方案1】:

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

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

    其他选项:

    • 使用驱动,加载后可以删除(sysinternal 工具会这样做)
    • 使用主机进程;启动explorer.exe、cmd.exe或rundll32.exe挂起并使用CreateRemoteThread+注入代码(这当然意味着磁盘上有一个exe文件,但里面没有你的代码)

    【讨论】:

    • 我对Posix的fork机制不太熟悉,但是你认为既然使用了父进程的部分,那么这可以用来在Windows上实现fork吗? (还有 +1,感谢您提供文件删除信息,这很有趣!)
    • @Mehrdad:根据 2008 年的eggheadcafe.com/software/aspnet/32040421/…,Cygwin 人确实尝试使用 NTCreateProcess 进行分叉但失败了,我不知道从那时起事情是否发生了变化,但你可以检查他们的来源。 ..
    • :哦,这太酷了!!我想我会尝试(第十亿次)看看我是否可以编写自己的CreateProcess 版本......祝我好运! :]
    【解决方案2】:

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

    结果?

    NtCreateProcess 返回:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2020-11-19
      • 2016-12-25
      相关资源
      最近更新 更多