浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】
来源:互联网 发布:全国网络教育排名 编辑:程序博客网 时间:2024/06/05 09:07
[mcafee的“缓冲区溢出保护”]
如果处在堆栈里的shellcode调用了getprocaddress等函数,mcafee会中止当前进程并报警。
[分析原理]
mcafee对所有进程截获了loadlibrarya、loadlibraryw、getprocaddress等api函数,方法类似api截获:将这些函数的开始几个字节改为call detectapiret,即调用entapi.dll中的某个检测函数(detectapiret),该函数检查调用getprocaddress等函数的父函数是否处于堆或栈内,如果是,报警并退出当前进程;否则回到getprocaddress等函数。
[绕过方法]
detectapiret只是简单的将[esp+0x04]的值当做父函数的返回地址,所以只要将其该为一个合法的返回地址就可以了,再伪造一个函数调用环境。
比如我们要在shellcode里调用getprocaddress,在call detectapiret时正常的堆栈是这样
------------
0x0013aaaa //返回地址
参数1
参数2
------------
需要构造这样一个环境
------------
0x7c9231db //ntdll.dll中的地址,内容是0xc3(ret)
参数1
参数2
0x0013aaaa //真实的返回地址
------------
所以,shellcode调用getprocaddress的时候,先push 0x0013aaaa,再push两个参数,最后push 0x7c9231db,然后jmp getprocaddress。
这里0x0013aaaa显然需要通过计算相对偏移地址来得出。
如果处在堆栈里的shellcode调用了getprocaddress等函数,mcafee会中止当前进程并报警。
[分析原理]
mcafee对所有进程截获了loadlibrarya、loadlibraryw、getprocaddress等api函数,方法类似api截获:将这些函数的开始几个字节改为call detectapiret,即调用entapi.dll中的某个检测函数(detectapiret),该函数检查调用getprocaddress等函数的父函数是否处于堆或栈内,如果是,报警并退出当前进程;否则回到getprocaddress等函数。
[绕过方法]
detectapiret只是简单的将[esp+0x04]的值当做父函数的返回地址,所以只要将其该为一个合法的返回地址就可以了,再伪造一个函数调用环境。
比如我们要在shellcode里调用getprocaddress,在call detectapiret时正常的堆栈是这样
------------
0x0013aaaa //返回地址
参数1
参数2
------------
需要构造这样一个环境
------------
0x7c9231db //ntdll.dll中的地址,内容是0xc3(ret)
参数1
参数2
0x0013aaaa //真实的返回地址
------------
所以,shellcode调用getprocaddress的时候,先push 0x0013aaaa,再push两个参数,最后push 0x7c9231db,然后jmp getprocaddress。
这里0x0013aaaa显然需要通过计算相对偏移地址来得出。
- 浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】
- 浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】
- 缓冲区溢出的保护方法
- 绕过Linux不可执行堆栈保护的方法浅析
- 缓冲区溢出的保护机制
- Android程序的签名保护及绕过方法
- Android程序的签名保护及绕过方法
- Android程序的签名保护及绕过方法
- Android程序的签名保护及绕过方法
- Android程序的签名保护及绕过方法
- windows溢出保护原理与绕过方法概览
- windows溢出保护原理与绕过方法概览
- windows溢出保护原理与绕过方法概览
- windows溢出保护原理与绕过方法概览
- windows溢出保护原理与绕过方法概览
- windows溢出保护原理与绕过方法概览
- 缓冲区溢出保护
- 缓冲区及缓冲区溢出
- 自定义的email发送类
- CVS权限配置
- ORACLE写文件
- 内存管理:算法及其c/c++实现 翻译六
- 在DataGrid里内嵌控件
- 浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】
- weblogic中文文档——domain_config
- 内存管理:算法及其c/c++实现 翻译七
- C#常见面视题(附答案)
- 浅薄”绝不该是中国程序员的性格特征 [转载]
- Java 代码中添加元数据 定制注释
- 4399原来也是这位达人的
- c#中调用操作INI文件的API
- 春夜洛城闻笛-李白