SEH时首先验证其完整性。SEHOP是系统自带功能,不需要应用程序配置,只需要用户将其开启即可。Р判断准则是:Р1、SEH结构都必须在栈上;Р2、最后一个SEH结构也必须在栈上;Р3、所有的SEH结构都必须是4字节对齐的;Р4、SEH结构中的handle(处理函数地址)必须不在栈上;Р5、最后一个SEH结构的handle必须是ntdll!FinalExceptionHandler函数;Р6、最后一个SEH结构的next seh指针必须为特定值0xFFFFFFFF;Р可以看到,第四点要求使通过SEH跳转到栈上的shellcode不再可能。而且上述准则保证了SEH链的完整性,因而如果要通过覆盖修改单个SEH,几乎不可能。可行的想法是伪造整个SEH链,当然,这十分困难。Рcookie/GS:Р修改原来的栈结构:РStack: bottom ... parameter-1 parameter-2 ... parameter-n 返回地址 EBP cookie 局部变量... top构建函数栈帧的时候会在压入参数、返回地址、EBP后压入一个随机数cookie,同时在.data段中保存他的一个副本。函数返回时系统自动检测栈中的cookie和.data段中的cookie副本是否相同,如果不同则进入溢出处理程序,不会执行ret返回语句,从而避免了转到shellcode执行Р(6)密码分析Р在密码分析这一方面,大家需要了解主流的密码算法,如对称密码、公钥密码、流密码、哈希密码算法等。Р在攻击方面,什么是弱口令攻击?密码字典有什么用?典型的密码破解工具有哪些?Р当前的Web应用主要采取了哪些加密和编码算法?