l
PS:本文仅对linklab的phase3进行思路解析。
1、readelf -a phase3.o查看重定位节.rela.rodata。
2、查找.rela.rodata的起始地址。
3.1、根据对应不同字母对应重定位节不同,计算修改字节在文件中的起始地址,例:
0x58-0x41(A)=0x17=23
0x498+23*24+16=0x6d0
不过我选择了简单的方法与操作。
3.2、找到重定位节的映射关系,根据上述例子找到的地址0x6d0,将它改换成重定位节“符号名称+加数”的任意“加数”,最终获取以下映射关系。
65 | 6E | 77 | 80 | 89 | 8F |
X | h | B | p | m | 8 |
95 | 9B | A1 | A7 | AD | B3 |
9 | 3 | Y | O | 7 | > |
B9 | BF | C5 | CB | D1 | D7 |
> | 1 | z | W | 2 | Q |
DD | E3 | E9 | EF | F5 | FB |
p | 0 | T | M | 4 | @ |
101 | 107 | ||||
5 | 6 |
PS:101和107这种,应当输入01 01或01 07。
4、Gcc -no-pie main.o phase3.o链接,再./a.out输出结果为一组乱码。
5、Hexedit phase3.o查看文件机器码,根据每位乱码的对应“加数”找到对应位置,然后修改成需要输入的字符对应的“加数”。