1.2023.7.152.2023.7.163.2023.7.174.2023.7.185.2023.7.19
6.2023.7.20
7.2023.7.218.2023.7.229.2023.7.2310.2023.7.2411.2023.7.2512.2023.7.2613.2023.7.2714.2023.7.2815.2023.7.2916.2023.7.3017.2023.7.3118.2023.8.119.2023.8.220.2023.8.321.2023.8.422.2023.8.523.2023.8.624.2023.8.725.2023.8.826.2023.8.927.2023.8.1028.2023.8.1129.2023.8.1230.2023.8.1331.2023.8.1432.2023.8.1533.2023.8.1634.2023.8.1735.2023.8.1836.2023.8.1937.2023.8.2038.2023.8.2139.2023.8.2240.2023.8.2341.2023.10.542.2023.10.743.2023.10.844.2023.10.1545.2023.10.2546.2023.10.2847.2023.11.8今天学了ctfwiki上ret2dlresolve的stage4。刚开始看到那个exp,给我看傻了。有种熟悉感,但是这种熟悉感来自于我刚开始学Partail RELRO的时候,因为嫌ctfwiki里的六个阶段太麻烦就去找博客看,结果被exp里的各种看不懂作用的代码劝退了。今天看的是伪造符号表项的代码,又看到了那种看不懂的熟悉感。
首先是刚开始的align不知道是干什么的,往后看,不知道符号表的表项下标为什么那样算,再往后看,不知道r_info为什么那么算。然后去找博客看,把_dl_runtime_resolve函数从重定位表跳到符号表的过程了解了一下,回来按照自己的思路推了推发现还是不明白exp里写的东西。最后索性先不去看exp,自己按照整体的过程推了一遍,然后反过来去推exp里的那些过程。中间又遇到个问题,r_info = (index_dynsym << 8) | 0x7这段代码,最后的0x7不知道什么意思,为什么是0x7。又去找博客看,然后知道了这是原本r_info最后两个十六进制位的数,函数一般这里都是0x7,用左移8位加上按位或0x7便能将下标还原成r_info......中间过程让我掉了不少头发,好在最后把代码一步步都看懂了。倒是最后留了一个align,还是不清楚它具体发挥了什么作用,便去问了学长,明白了是用来进行数据对齐的。
本来今天计划要把ret2dlresolve的Partial RELRO看完的,结果只看了个stage4。有点惭愧,好在是学到了不少东西。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!