[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显然需要通过计算相对偏移地址来得出。

浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】相关推荐

  1. 溢出科普:heap overflow溢出保护和绕过

    pr0mise · 2016/04/11 9:50 0x00 第一部分:heap overflow 接上文,来看另外一种溢出方式:堆溢出.相对于栈溢出来说,稍微麻烦一点 本文算是一个笔记,技术有限,难 ...

  2. 缓冲区溢出攻击原理、方法及防范(一)

    由于C/C++语言本身没有数组越界检查机制,当向缓冲区里写入的数据超过了为其分配的大小时,就会发生缓冲区溢出. 攻击者可以利用缓冲区溢出来窜改进程运行时栈,从而改变程序的正常流向.在分析缓冲区溢出攻击 ...

  3. windows溢出保护原理与绕过方法概览(转自riusksk's blog(泉哥))

    前言 从20世纪80年代开始,在国外就有人开始讨论关于溢出的攻击方式.但是在当时并没有引起人们的注意,直至后来经一些研究人员的披露后,特别是著名黑客杂 志Phrack上面关于溢出的经典文章,引领许多人 ...

  4. 浅析缓冲区溢出漏洞的利用与Shellcode编写

    文章目录 前言 汇编语言 寄存器 内存堆栈 CPU指令 函数调用 缓冲区溢出 栈溢出原理 栈溢出攻击 ShellCode 总结 前言 缓冲区溢出(Buffer Overflow)是计算机安全领域内既经 ...

  5. java 缓冲区溢出_浅析缓冲区溢出

    最近一直在学习缓冲区溢出漏洞的攻击,但是关于这一块的内容还是需要很多相关知识的基础,例如编程语言及反汇编工具使用.所以研究透彻还需要不少的时间,这里简单的做一个学习的总结,通过具体的实验案例对缓冲区溢 ...

  6. 缓冲区溢出还是问题吗?C++/CLI安全编码

    C++/CLI是对C++的一个扩展,其对所有类型,包括标准C++类,都添加了对属性.事件.垃圾回收.及泛型的支持. Visual C++ 2005扩展了对使用C++/CLI(通用语言基础结构)开发运行 ...

  7. IoT上的缓冲区溢出漏洞

    在过去N年里,缓冲区溢出一直是网络攻击中最常被利用的漏洞. 看一下缓冲区是如何创建的,就能知道原因所在. 下面是C语言的一个例子: 第一步,程序员使用 malloc 函数并定义缓冲区内存的数量(例如3 ...

  8. 缓冲区溢出攻击(详细解析)

    定义:利用缓冲区溢出漏洞进行攻击行动 攻击原理 通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的.造成缓冲区溢出的原因是程序中没有仔 ...

  9. 软件漏洞及缓冲区溢出

    软件漏洞及缓冲区溢出 文章作者:davy_yan 本文是我做溢出的一点心得,希望大家提出宝贵的修改意见,也希望对大家有一定的帮助:) 软件漏洞及缓冲区溢出 一.     缓冲区溢出的发展简史 1.   ...

最新文章

  1. memcached failed to listen问题解决以及 结束daemon的方法
  2. 约束条件创建定义表(主码,外码的确定和防止空值等)
  3. 前端javascripts基础知识点猴子吃桃
  4. Good Bye 2017 G. New Year and Original Order 数位dp + 按数贡献
  5. 内是不是半包围结构_轻钢别墅的体系结构
  6. Linux入门学习(二)
  7. 关于spring security自定义sessionRegistry
  8. python安装离线包window_python 离线安装unrar库
  9. Chrome默认开启flash
  10. YOLOv2论文中英文对照翻译
  11. 傲腾readyboost_使用SD卡和ReadyBoost提升上网本速度
  12. 二维彩虹二维码产品功能更新:增加“赞赏”、“重置”功能
  13. 服务器能不能清理系统垃圾,在服务器上如何清理垃圾
  14. IT业台风警报(一)——望天
  15. 网页H5实现 美团接单 连接打印机打印客户下单信息
  16. MySQL安装问题总结
  17. 项目报找不到属性时解决方法
  18. 初识华为云数据库GaussDB(for Cassandra
  19. 频谱仪和信号发生器的使用
  20. CNAS量检具校准资格查询

热门文章

  1. Excel 表格中输入对勾
  2. Java实现SRT字幕中英文合成工具
  3. 好用的手机Web网站开发工具:Mobirise for Mac
  4. HTML 标签整理
  5. 什么是Jackson?(常用Jackson属性解析)
  6. android代码拿到图片路径,android图片处理 ---获取图片
  7. dotnet命令(不掌握)
  8. 工控机安装linux步骤,工控机驱动安装步骤及流程说明
  9. 使用Windows自带命令diskpart管理分区
  10. vsto c#取消隐藏sheet所有列