堆调试技巧
简介
微软在推管理器中提供了一些辅助调试的工具。可以通过WinDbg提供的gflags.exe打开,或者直接用!gflag +命令来设置
类型
-
htc:堆尾检查,在堆块末尾附加额外的标记信息(通常为8字节),用于检查堆块是否发生溢出。
-
hfc:堆释放检查,在释放堆块时对堆进行各种检查,防止多次释放同一个堆块,类似UAF。
-
hpc:堆参数检查,对传递给堆管理的参数进行更多的检查。
-
ust:用户态栈回溯,即将每次调用堆函数的函数调用信息记录到一个数据库中。
-
htg:堆标志,为堆块增加附加标记,以记录堆块的使用情况或其他信息。
-
hvc:调用时验证,即每次调用堆函数时都对整个堆进行验证和检查。
-
hpa:启用页堆,在堆块后面增加专门用于检测溢出的栅栏页,若发生堆溢出触及栅栏页便会立刻触发异常。
-
dhc:禁用合并空闲块。
-
htd:通过DLL时附加标记。
这里讲一个之前一直看到的调试堆和非调试堆之间的区别:在调试状态下会自动启用htc,hfc,hpc
一般用到的就是hpa,因为它和别的几个不同,别的都是在堆溢出之后再触发异常,所以无法第一时间找到事发现场,而hpa因为就是在堆后面添加了不可访问页,所以一旦溢出立刻就会抛出异常中断,所以可以马上找到溢出点的位置。
参考链接
《漏洞战争》