如何在 Windows Server 2008 R2 中为 Cscript.exe 设置例外?

如何在 Windows Server 2008 R2 中为 Cscript.exe 设置例外?

我正在尝试将 CSCRIPT.exe 添加为 Windows Server 2008 R2 中 DEP(数据执行保护)的例外。CSCRIPT.exe 位于两个位置:C:\Windows\System32 和 C:\Windows\SysWOW64。System32 位置是应用程序的 64 位版本,根据 Microsoft 的说法,64 位应用程序无法添加到 DEP(以及我尝试将其添加到 DEP 时收到的警告消息)。尝试添加 SysWOW64 版本会给出完全不同的错误/警告消息。“此程序必须在启用 DEP 的情况下运行,您无法将其关闭”。

我尝试重命名 CSCRIPT.exe 并将其移动到其他位置和/或重命名它,没有任何区别。对于此用例,必须启用 DEP,并且出于此特定问题的目的 - 我需要仅为此应用程序禁用 DEP。

我尝试过使用 Windows Server 2003 中的 CSCRIPT.exe。我能够成功将此文件添加到 DEP。但是,使用旧版本确实让我感到困扰。我觉得我可能会引入安全风险或版本问题。

是否有其他方法可以将 SysWOW64 版本的 CSCRIPT.exe 放入 DEP 列表?或者 Windows Server 2003 版本解决方法是否是合适的解决方案?

编辑:我明白,对于这个特定问题,可能需要“做出让步”。我可能无法达成共识。如果是这样,那就这样吧。如果没有必要,我不想花时间和精力去重新发明轮子。谢谢!

答案1

非常有趣的问题。我以前见过 cscript.exe 的一些 DEP 错误。这很烦人。

VBScript 早于 Windows 中的 DEP,因此最初开发时并未考虑 DEP。此外,当您开始在脚本中与旧的第三方 COM 和 OLE 接口交互时,它们可能会导致 NX 错误,而 cscript.exe 会为此负责。后者通常是这种情况。

但是,使用旧版本确实让我有些困扰。我感觉可能会带来安全风险或版本问题。

我觉得你这么说有点好笑,因为禁用 cscript.exe 等程序的 DEP 将会方式比使用 2003 版本存在更大的安全风险。

您不能禁用 64 位进程的 DEP,就是这样。

当 DEP 设置为 OptOut 策略级别时,为了实现应用程序兼容性,可以选择性地为单个 32 位应用程序禁用 DEP。但是,对于 64 位应用程序,DEP 始终处于启用状态。

http://technet.microsoft.com/en-us/library/cc738483(v=WS.10).aspx

因此,您只能使用 32 位、“SysWOW64”版本的 cscript.exe... 但是,现代可执行文件通常都会带有“你不能关闭我的 DEP,”标志。与可执行文件可以被标记为具有大地址空间感知等方式非常相似。

从技术上讲,它是/NXCOMPAT编译可执行文件时使用的标志。它是一个链接器开关。旧版 2003 版可执行文件未使用该开关进行编译,这就是为什么您可以将其放入 DEP 豁免列表中,但 2008 版却不能。

但等等,还有更多!如果您仍想使用 2008 版 SysWoW64\cscript.exe,您需要做的就是复制可执行文件,然后运行:

editbin /NXCOMPAT:NO C:\cscript.exe

现在您可以将其添加到 DEP 豁免列表中。Editbin.exe 随 Visual Studio、Windows SDK 等一起提供。

在堆栈或堆内存中注入代码并分支指令指针来执行它,很有趣!

相关内容