UltraDebug

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: A C D R G Y M Z X S P
公益项目,接受捐赠
查看: 1409|回复: 0
收起左侧

[原创] 2014_hitcon_stkof学习(以及unlink的个人理解)

[复制链接]
admincenter

主题

0

回帖

UD

新手上路

UID
7
积分
38
注册时间
2021-12-26
最后登录
1970-1-1
2022-9-17 17:11:32 | 显示全部楼层 |阅读模式
基础知识
首先就是unlink的认识了,在libc版本中曾经出现过安全机制不强的版本,其大致逻辑如下,其中fd,bk分别是forward,backward的缩写,我学的时候老分叉,但是知道原本单词是啥就没事了,所以我个人建议也是缩写尽量知道原译比较好。2014_hitcon_stkof学习(以及unlink的个人理解) - admincenter_UltraDebug
[C] 纯文本查看 复制代码
void unlink(ptr * p){
    FD =  p->fd;
    BK  = p->bk;
    FD->bk = p->bk;
    BK->fd = p->fd;
}
SyntaxHighlighter Copyright 2004-2013 Alex Gorbatchev.
而用图来描述呢,大致就是如下图(由于我想自己更加深理解,所以没用网图,各位可能看着吃力点,这个红线就是unlink时连接的)
2014_hitcon_stkof学习(以及unlink的个人理解) - admincenter_UltraDebug

2014_hitcon_stkof学习(以及unlink的个人理解) - admincenter_UltraDebug

至于为什么要有unlink以及unlink的时机嘛,我也时一知半解,因为我刚学完fastbin,一些largebin、smallbin、tcache等机制我还没接触,所以不是很清楚,就本题我自己查阅的资料加上自己的见解来说,
unlink就是为了防止堆内存空间的碎块过多,而其中unlink也并不就是说真把上面那个p块拿走了,而是说他合并了,这点我最开始很不理解,就是ctfwiki上面讲的拿出来,我寻思拿出来了再怎么利用呢,还有ctfwiki上面对于unlink的时机我觉得没则么说清楚,我自己上网查阅资料得出再free掉一个块的时候会首先查看自身的prev_size位是否为0,如果为0的话那么就说明上一块时空闲的,这时如果free掉当前快的话,那么就会对你自身free块的上一个空闲块进行unlink,然后这两个块就顺势合并,所以说并没有真的把哪一块弄下来了,当然我只知道free函数调用的时候会判断unlink,其他有没有用这个操作我就不太了解了(这也留作之后的学习罢)。以下我分享一下free时调用unlink函数的源码的一部分,大家有兴趣看堆的源码我推荐一个师傅的文章,那可真叫一个细
glibc中malloc源码分析
https://www.52pojie.cn/thread-1581911-1-1.html
(出处: 吾爱破解论坛)

[Asm] 纯文本查看 复制代码
if (!prev_inuse(p)) {            prevsize = p->prev_size;
    size += prevsize;
    p = chunk_at_offset(p, -((long ) prevsize));
    unlink(av, p, bck, fwd);
}
SyntaxHighlighter Copyright 2004-2013 Alex Gorbatchev.
而对于unlink的利用也很容易理解,既然我要unlink这个p块,那我在他的fd以及bk上填上我自身想填的地址值就行阿,涉及到这里,我就还是画图(图画的不好见谅)
2014_hitcon_stkof学习(以及unlink的个人理解) - admincenter_UltraDebug

知道以上俗称unsafe unlink之后,再了解了解目前更为常见的safe unlink罢(悲),根据其名字就知道这个肯定有安全点的意思了,看他的源码会发现他在un
还有更多的精彩内容,作者设置为付费后可见
UltraDebug免责声明
✅以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
✅The above content is forwarded or original by netizens. If there is infringement, please send the email to the destination 9003554@qq.com handle.
回复 打印

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|站点地图|UltraDebug ( 滇ICP备2022002049号-2 滇公网安备 53032102000034号)

GMT+8, 2025-6-20 15:47 , Processed in 0.034656 second(s), 11 queries , Redis On.

Powered by Discuz X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表