1

物理cpu和HAL之上是否有任何瓶颈?或者是否有多种方式可以在 Windows XP、Vista 或 7 下启动进程,但在某些时候不涉及 CreateProcess?

4

2 回答 2

4

鉴于对您的问题的评论:

构建一个反可执行驱动程序,只是计划,想知道控制 createprocess 是否足够。

不,如果您关心安全性,那还不够。例如,下面有NtCreateProcess一个。而这些并不是唯一的。

系统提供的最佳方式是文件系统过滤驱动程序。事实上,WDK 附带的示例只需要进行适度的更改即可完成您所要求的操作。由于您询问了 XP,如果您可以摆脱对 XP SP1 及更高版本的支持,则可以使用微过滤器。

PsSetLoadImageNotifyRoutine不幸的PsSetCreateProcessNotifyRoutine是只有通知。所以他们不允许对他们通知的事件做任何事情。你真的不应该试图解决这个问题。

在过去,我见过一些使用 SSDT 挂钩的巧妙实现,ZwCreateSection它们会将返回的句柄与一个显示错误消息的可执行文件交换。由于可执行文件本身会看到原始命令行,因此它可以显示一个很好的错误消息,通知用户该命令已被禁止,原因是 xyz。但是,对于 Vista 及更高版本,甚至在 XP 和 2003 64 位 (x64) 上,编写 SSDT 挂钩将变得更加困难。更不用说每个人都会对此皱眉头,它需要相当丰富的经验才能使它正确(即使那样它也经常有可能造成严重破坏的缺陷),并且您可能会忘记在 Windows 徽标过程中您可能渴望的任何认证.

结论:使用文件系统过滤驱动程序来拒绝访问不需要的可执行文件。使用微过滤器,学习曲线会适中,使用旧式过滤器,我建议您先学习几门课程,然后开始您的第一次尝试。

于 2013-03-15T05:04:33.563 回答
2

通过快速反汇编CreateProcess,它似乎做了两件主要的事情:

  • 调用NtCreateUserProcess(这是系统调用 0xAA)在内核中实际创建进程结构(PEB等)
  • NtResumeThread通过调用(syscall 0x4F)启动新进程。

Windows Internals 书籍当然很好地详细说明了这个过程。

我不确定内核中是否有指定的钩子可以让您创建反可执行驱动程序。过去,您可以挂钩“系统服务调度表”来更改这些系统调用的行为方式。但是现在,像PatchGuard这样的技术会阻止驱动程序执行此操作(并允许系统运行)。

于 2013-03-15T05:03:12.450 回答