Csapp bomblab 实验报告:二进制安全和逆向分析

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

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已经有了一句话。
bomblab_phase_1_1.png
那么能直接断定这个就是我们的拆弹语句,重新调试进去输入那个语句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,跟进去发现
bomblab_phase_2_1.png调用了scanf函数并且能看到参数%d %d %d %d %d %d,那无疑我们这次应该输入六个整数。那就先猜,就先输入6个0也罢,但此时我们不能’s’单步调试了,因为scanf内部构造很复杂,s单步调试会把你键盘按烂的。因此我们用nextn单步调试,跳过了scanf函数的内部,成功给了6个整数,然后继续调试,发现
bomblab_phase_2_2.png
ptr[rsp]=1才能跳转避免执行到explode函数,我们稍微调试一下也可以发现ptr[rsp]存了第一个输入的数值,那么就可以很容易得到第一个整数是1,我们把第一个值改成

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xi@0ji233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值