先把farm.c转换成汇编语言



现在写汇编代码lines.s


现在要找在farm.txt中找到58 c3和48 89 c7 c3


两者的地址分别为0xf和0x15
据此写出攻击代码的16进制表示

其中前10行为任意40字节
11~12行对应返回地址,这里设为了farm中对应pop %rax;ret 的地址
13~14行是曲奇饼的值,这样在执行pop的时候就会把曲奇饼的值赋给%rax
15~16行是执行11–12行ret时的返回地址,这里设为了farm中对应mov %rax,%rdi的地址
17~18行是执行15-16行ret时的返回地址,这里是touch2的地址
转换为字符串后gdb调试,发现无法辨认出0xf

以往gdb会偏移0x555555554000的,这次是不是也会偏移呢?
于是写了hextwo,把f和15都作了偏移


在gdb中查看对应函数的地址,发现并没有偏移


分割线----
经同学提醒这里的farm的两个地址要在rtarget中去找


因此两个地址应该为0x1d5b和0x1d61
于是写了第三个hex


成功调用touch2了,但是参数写反了!
重新改动了一下,就过关啦!

本文详细介绍了如何将C语言源代码转换为汇编语言,并利用特定指令地址编写攻击代码的过程。通过调整代码和参数顺序,成功实现了对目标函数的调用。
4004

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



