2019年Exploit编写系列教程第十一篇堆喷射技术揭秘(下).docVIP

  • 8
  • 0
  • 约3.45万字
  • 约 33页
  • 2019-03-04 发布于天津
  • 举报

2019年Exploit编写系列教程第十一篇堆喷射技术揭秘(下).doc

Exploit编写系列教程第十一篇:堆喷射技术揭秘(下) 【作者】:Peter Van Eeckhoutte 【译者】:hellok Heaplib Cache Plunger技术 – oleaut32.dll 正如Alexander Sotirov 在上文中说的,申请字符串(通过SysAllocString)不总是从系统堆里面申请的,而是通常被一个oleaut32中的堆管理引擎来处理。 这个引擎管理内存,以方便快速分配/再分配。还记得我们前面看到的堆栈跟踪吗? 每次一个内存块被释放后,堆管理器就会尝试把指向那个内存堆块的指针保存到缓存中(要做到这一点,需要满足几个条件,但这些条件都不影响我们)。这些指针指向在堆中的任何位置,所以所有数据都有可能出现在某个地方。当一个新的分配情况,缓存系统会看它是否有一大块所要求的大小,可以直接返回。 这将提高性能,并在一定程度上也阻止了堆碎片。 32767 bytes大小以上的块会直接被释放掉,并且不会被缓存。 缓存管理表按块大小排序组织。每一小块“bin” 在缓存表里可以保存堆块的数值。有4种“bin” : Bin Size of blocks this bin can hold 0 1 to 32 bytes 1 33 to 64 bytes 2 65 to 256 bytes 3 257 to 32768 bytes 每一个bin可以

文档评论(0)

1亿VIP精品文档

相关文档