堆调试技巧

  • 微软为了帮助程序员快速找到内存错误导致的BUG,在堆管理器中提供了一些调试选项用于辅助堆调试,下面是一些常见的调试选项,可以通过Windbg 提供的gflags.exe 来设置。
 
  1. htc - 堆尾检查,在堆块末尾附加额外的标记信息(通常为8字节),用于检查是否发生溢出。
  2. hfc-堆释放检查,在释放堆块时对堆进行各种检查,防止多次释放同一个堆块。
  3. hpc-堆差数检查,对传递给堆管理的参数进行更多的检查。
  4. ust-用户态栈回溯,即将每次调用堆函数的函数调用信息记录到一个数据库中。
  5. htg-堆标志,为堆块增加附加标志,以记录堆块的使用情况和其他信息。
  6. hvc-调用时验证,即每次调用堆函数是都对整个堆进行验证和检查。
  7. hpa-启用页堆,在堆块后增加专门用于检查溢出的栅栏页,若发生堆溢出触及栅栏页便会立刻触发异常。
 
 
  • 比如要针对app.exe程序添加堆尾检查功能和页堆,去除堆标志,可以执行以下命令:
gflags.exe -i app.exe +ptc +hpa -htg
 
在堆漏洞调试中,较为常用的是htc.hpc.hfc和hpa。
 
  • 不过我自己在调试中,使用windbg设置条件时,!gflag命令并没有执行,也没有去找什么原因,我直接用gflags.exe来实现。

                                                  参考《漏洞战争》

 
posted @ 2018-03-07 10:26  _小北  阅读(229)  评论(0编辑  收藏  举报