我试图添加CSCRIPT.exe作为Windows Server 2008 R2中的DEP(数据执行保护)的例外。 CSCRIPT.exe位于两个位置:C:\ Windows \ System32和C:\ Windows \ SysWOW64。 System32位置是应用程序的64位版本,64位应用程序不能根据Microsoft(和我在将其添加到DEP时获得的警告消息)添加到DEP。尝试添加SysWOW64版本提供了一个完整的不同的错误/警告消息。 “这个程序必须在启用DEP的情况下运行,不能closures”。
我已经尝试重命名并将CSCRIPT.exe移动到不同的位置和/或重命名它没有区别。 对于这个用例,DEP必须被启用,并且为了这个特定的问题 – 我需要为这个应用程序禁用DEP。
我做的一件事是从Windows Server 2003使用CSCRIPT.exe。我能够成功地将此文件添加到DEP。 但是,使用旧版本的东西真的让我困扰。 我觉得我可能会引入安全风险或版本问题。
有没有一种不同的方法可以将CSCRIPT.exe的SysWOW64版本放入DEP列表中? 或者Windows Server 2003的版本解决方法是一个合适的修复?
编辑:我明白,可能需要“给”这个特定的问题。 我可能无法达成共识。 如果是这样的话,就这样吧。 如果不必要的话,我不想花时间和精力重新发明轮子。 谢谢!
非常有趣的问题。 我以前见过cscript.exe的一些DEP故障。 它很烦人。
VBScript早于Windows中的DEP,因此它最初并不是在考虑DEP的情况下开发的。 此外,当您开始在脚本中与旧的第三方COM和OLE接口进行交互时,它们可能会导致NX出错,并且cscript.exe会为此承担责任。 后者通常是这种情况。
但是,使用旧版本的东西真的让我困扰。 我觉得我可能会引入安全风险或版本问题。
这对我来说有点有趣,你会这样说,因为禁用像cscript.exe这样的程序的DEP会比使用2003版本更具安全风险。
您无法禁用64位进程的DEP,期间。
为了将DEP设置为OptOut策略级别时的应用程序兼容性,可以select性地禁用单个32位应用程序的DEP。 但是,DEP始终为64位应用程序启用。
http://technet.microsoft.com/en-us/library/cc738483(v=WS.10).aspx
因此,您将得到32位的“SysWOW64”版本的cscript.exe …但是,现代可执行文件通常可以标记为“您不能closuresDEP”标志。 就像可执行文件被标记为可以识别大地址空间一样。
从技术上讲,这是可执行文件编译时使用的/NXCOMPAT标志。 这是一个链接器开关。 旧的2003版本的可执行文件不是用该开关编译的,这就是为什么你可以把它放在DEP豁免列表中,而不是2008版本。
但是等一下还有更多! 如果您仍想使用SysWoW64 \ cscript.exe的2008版本,则只需复制可执行文件,然后运行:
editbin /NXCOMPAT:NO C:\cscript.exe
现在您可以将其添加到DEP免除清单。 Editbin.exe附带Visual Studio,Windows SDK等
在堆栈或堆内存中注入代码并分支指令指针来执行它!