csapp实验二 ---bomb(第一关)

写在前面,4月24号,微软实习三面失败后,决定继续发奋图强,写在这里给自己一个警醒,也希望以后能更技术能越来越好,以前的博客质量上可能还有欠缺,将在以后的时间里重新编辑

准备工作

1.环境准备

有docker下载我准备好的实验镜像

docker pull liutianhao/csapp_bomb

没有docker请确保有gdb和gcc等工具

2.文件准备

前面的博客里有提到这里在写下地址

准备就绪后进入正题

打开文件应该包含一下文件

这里写图片描述

其中bomb是可以执行的二进制文件。bomb.c是协助的源文件

我们打开bomb.c可以看见phase_1函数想要通过要先从它入手

执行下列代码进入phase_1的内容

1.gdb bomb

2.disas phase_1

看见如下内容
这里写图片描述

我们打开bomb.c看到phase_1的第一个参数是input

得到信息 1.输入放在寄存器rdi中

然后看phase1的汇编代码看见首先栈开了缓冲区
然后把什么奇怪的东西放进入 esi中
接着调用strings_not_equal函数
可以猜测 应该是把第一个参数中的input与 esi中的比较但是我们还不能确定
disas strings_not_equal中看下
这里写图片描述

看到两个 rdi和rsi 也就是第一个参数和第二个参数都被放入寄存器中

然后string_length先求第一个参数的长度
然后求第二参数的长度
然后比较长度 不想等返回0
然后遍历比较
看完后就知道我们只要知道什么东西塞进esi中便可以轻松过了第一个关
因为已经知道是字符串所以依靠gdb

p (char*)0x402400

这里写图片描述

然后推出gdb

./bomb 

输入Border relations with Canada have never been better.
这里写图片描述

Amazing Magic

猜你喜欢

转载自blog.csdn.net/weixin_38739799/article/details/80256674