iOS内核调试、利用与越狱技术解析
1. 内核区域分配器与堆溢出利用
1.1 内核区域分配器洞察
内核区域分配器的 zi_count 字段记录了当前区域中已分配的内存块数量。由于某些内核结构存于特定区域,该计数器可用于推断其他信息,如运行进程数或打开文件数。
对于内核堆溢出,用区域元素最大数量减去 zi_count 更有意义。最大元素数量通过当前区域大小 zi_cur_size 除以单个元素大小 zi_elem_size 计算得出,此值反映了区域内的空闲块数量,即使用堆风水技术需填补的内存空洞数。在 iOS 和 Mac OS X 中,可精确计算出填补区域内所有空洞所需的分配次数。
当区域内元素达到最大数量时,会分配一个大小为 zi_alloc_size 字节的新块来扩展区域。新分配的内存块会被分割成独立的内存块,并添加到区域的空闲列表中。这一操作会改变分配顺序,且同一扩展操作中添加的内存块在区域内相邻。
1.2 利用内核堆缓冲区溢出
以下是 ndrv_to_ifnet_demux 函数,它将用户空间的 ndrv_demux_desc 结构转换为内核空间的 ifnet_demux_desc 结构:
int
ndrv_to_ifnet_demux(struct ndrv_demux_desc* ndrv,
超级会员免费看
订阅专栏 解锁全文
67

被折叠的 条评论
为什么被折叠?



