bomblab实验报告
先观察给的.c文件,发现是要输入六组语句并且判断正误的,并且很容易发现判断函数phase_i(i=1,2…6)要有一个错误,炸弹即爆炸,那我们就要用到gdb调试了,在终端输入gdb bomb进入调试
phase_1
首先在phase_1处断点(命令:b phase_1)找到phase_1的拆弹语句。然后r运行,先随便输入点东西这里我输入了很多a,断在该处之后单步调试,因为要进入函数内部,我们用命令step或者s进行单步调试。调试发现一个strings_not_equal函数,跟进去看发现寄存器rdi为我们输入的很多个a,而寄存器rsi已经有了一句话。

那么能直接断定这个就是我们的拆弹语句,重新调试进去输入那个语句Border relations with Canada have never been better.发现成功拆掉了这个炸弹,那么phase_1就拆掉了。
phase_2
拆完了之后就看向phase_2,我们先delete 清除所有断点然后b phase_2新增断点,r之后先输入之前的拆弹语句来到phase_2,我们照例输入很多的a,s单步调试进去发现有一个函数叫read_six_numbers,跟进去发现
调用了scanf函数并且能看到参数%d %d %d %d %d %d,那无疑我们这次应该输入六个整数。那就先猜,就先输入6个0也罢,但此时我们不能’s’单步调试了,因为scanf内部构造很复杂,s单步调试会把你键盘按烂的。因此我们用next或n单步调试,跳过了scanf函数的内部,成功给了6个整数,然后继续调试,发现

ptr[rsp]=1才能跳转避免执行到explode函数,我们稍微调试一下也可以发现ptr[rsp]存了第一个输入的数值,那么就可以很容易得到第一个整数是1,我们把第一个值改成

本文详细记录了bomblab实验的全过程,通过gdb调试逐步解决phase_1至phase_5的挑战。在各阶段中,通过观察、分析和调试,找出正确的输入策略,揭示了程序背后的逻辑和安全要点。
最低0.47元/天 解锁文章
1661

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



