今天学了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。有点惭愧,好在是学到了不少东西。
标签:20,exp,RELRO,2023.7,ret2dlresolve,符号表,stage4 From: https://www.cnblogs.com/542b/p/17570037.html