About DEP & ROP
DEP-数据执行保护, 软件DEP又称为Safe SEH, 硬件DEP主要思想是将一部分内存指定为可写但不可实行, 导致最终的shellcode无法执行. 这里介绍的是当对栈溢出进行利用时, 将shellcode布置在栈区, 因为DEP的存在导致栈区的shellcode不能执行, 此时就使用ROP链来处理DEP的情况了.
环境
WinXp Sp3 开启DEP
编译器 VS2015 默认开启DEP
核心思想
核心思想就是通过一系列的系统指令, 使得执行Windows的VirtualProtect函数(也有其他的方式), 该函数的主要功能是能够改变指定内存地址的内存属性, 这样能够使得该部分内存地址变得可以执行. 那么通过调用该函数使得shellcode部分代码可以执行即可达到绕过DEP的效果. VirtualProtect:
kernel32.dll 一般Windows程序都会加载该DLL
1 | BOOL WINAPI VirtualProtect( |
VirtualProtect()的指针覆盖EIP, 并且我们会将5个需要的参数放到栈顶, 模拟函数的调用, 先push四个参数, 然后push ret, 因此调用VirtualProtect之前函数的栈顶布局为如下: