整个实验可以看做寻找溢出后函数地址和寻找文件内对应位置两部分
寻找溢出后地址:
从结果的截图判断,我们需要输出success和flag两部分:
但是shift+f12后没找到success,只能从flag入手。
进行溯源后,找到该函数,便于接下来的工作,我将它重命名为print_flag:
回到汇编代码:
从结果可以看出,print flag前的输出只有success,那么401282处的输出应该就是success。输出的部分都在这部分,那么溢出后的返回地址应该就是这个函数的入口00401230处:
于是我们找到了溢出后的地址:00401230h。
寻找文件内对应位置:
直接寻找调用了strcpy函数的位置,第一个就是:
所以,我们需要构造255+3到255+8大小的文件。
回到汇编代码,将断点设在strcpy处。
随后我们打开在dbgsrv目录下的32remote后进行动态调试,弹窗填127.0.0.1:
内容如下:
retn后,ebp指向下个地址,即19fc54处,对照源txt文件可看出,就是10h-13h字节处,将该位置内容改为溢出后地址即可。