• Home
  • About
    • back
    • tearorca photo

      tearorca

      Wishful thinking have to be willing to bet on clothing!

    • Learn More
    • Google+
    • Github
  • Posts
    • back
    • All Posts
    • All Tags
  • Projects

堆调试技巧

02 May 2019

Reading time ~1 minute

  • 堆调试技巧
    • 简介
    • 类型
    • 参考链接

堆调试技巧

简介

微软在推管理器中提供了一些辅助调试的工具。可以通过WinDbg提供的gflags.exe打开,或者直接用!gflag +命令来设置

类型

  1. htc:堆尾检查,在堆块末尾附加额外的标记信息(通常为8字节),用于检查堆块是否发生溢出。

  2. hfc:堆释放检查,在释放堆块时对堆进行各种检查,防止多次释放同一个堆块,类似UAF。

  3. hpc:堆参数检查,对传递给堆管理的参数进行更多的检查。

  4. ust:用户态栈回溯,即将每次调用堆函数的函数调用信息记录到一个数据库中。

  5. htg:堆标志,为堆块增加附加标记,以记录堆块的使用情况或其他信息。

  6. hvc:调用时验证,即每次调用堆函数时都对整个堆进行验证和检查。

  7. hpa:启用页堆,在堆块后面增加专门用于检测溢出的栅栏页,若发生堆溢出触及栅栏页便会立刻触发异常。

  8. dhc:禁用合并空闲块。

  9. htd:通过DLL时附加标记。

这里讲一个之前一直看到的调试堆和非调试堆之间的区别:在调试状态下会自动启用htc,hfc,hpc

一般用到的就是hpa,因为它和别的几个不同,别的都是在堆溢出之后再触发异常,所以无法第一时间找到事发现场,而hpa因为就是在堆后面添加了不可访问页,所以一旦溢出立刻就会抛出异常中断,所以可以马上找到溢出点的位置。

参考链接

《漏洞战争》

https://www.cnblogs.com/Ox9A82/p/5603172.html



Share Tweet +1