应用程序级 DEP 和操作系统级 DEP 有什么区别?

逆向工程 调试器 开发
2021-06-23 18:04:28

我正在尝试自学一些 ROP 编程。我已经尝试从不同的站点进行一些训练利用。所以,现在,我有这个小应用程序,其中启用了 GS、safeSEH ALSR 和 DEP(在应用程序级别而不是在操作系统上)。因此,当我尝试利用此应用程序时,它运行良好(http://pastebin.com/TdDR3W0y)。它只是流行calc.exe

但是,另一方面,当我启用操作系统级别的 DEP 时,我的漏洞利用会生成段错误并使应用程序崩溃。

所以,我的问题是应用程序级 DEP 和操作系统级 DEP 之间有什么区别?是否,当我尝试绕过 DEP 时,我必须进行其他/不同的函数调用(而不是 VirtualProc)?

1个回答

根据代码中的硬编码值,您根本没有打败 ASLR(0x7c801ad4、0x0012fbd0、0x0012fbd0),也许应用程序也不支持它(0x1003c898、0x10086d6a),因为这些值都不应该是常量ASLR 工作正常。您看到段错误的可能原因是 VirtualAllocEx() 的 0x7c801ad4 可能在重新启动之间移动,这是 ASLR 的结果,但这作为启用 DEP 然后重新启动的副作用是可见的。