计算机系统原理 Bomb实验 炸弹一/phase_1

Bomb 日志

实验准备:

打开bomb.c文件,发现文件中只有主函数,没有我们需要闯关的具体代码,所以考虑如何通过bomb文件得到六关的具体代码,在linux中通过反汇编得到bomb的汇编代码,从第一关开始阅读汇编代码,找出闯关的关键代码。

具体过程:

打开下载的文件,通过反汇编得到bomb.s反汇编文件:


通过vi指令打开反汇编文件bomb.s:

 

查看bomb.s文件:

 

找到关卡1的反汇编代码:

 

分析此段代码:

push    %ebp                       将ebp寄存器中的内容入栈
mov     %esp,%ebp                  将esp中的内容复制到ebp中
sub     $0x18,%esp                 分配16进制18即24个字节的空间
movl    $0x804a15c,0x4(%esp)       将$0x804a15c处值存入esp+4地址处

mov     0x8(%ebp),%eax             将ebp+8处的值存到eax中
mov     %eax,(%esp)               将eax中的值传递给esp
call    8048fab<strings_not_equal>

通过8048fab函数判断esp+4和esp中的值是否相等test   

%eax,%eax                  判读eax值是否为0

je      8048f83 <phase_1+0x22>    若eax为0则跳转到8048f83处


call    80490d1<explode_bomb>      跳转到80490d1通过函数引爆炸弹



leave                              结束,eax为0时进入下一关
ret

 

本题的栈帧结构如下图所示:


拆除炸弹一即不让第一段程序进入爆炸。分析代码,整段代码就是先将存有目标字符串的地址$0x804a15c先存入了当前帧,再将外部输入的字符串存入到ebp+8的位置,即上图所示的参数一,再通过eax将参数一传递到esp中,通过函数调用比较esp与esp+4中的字符串是否相等,如果相等,返回值为0,程序跳转到leave,进入下一进程,反之不相等则引起爆炸,所以我们只需要查看地址$0x804a15c处的值就能解除炸弹危机了。

 

 如下图所示,使用GDB查看指定地址存储的数据:

 

所以易知:

第一关炸弹可使用字符串“We have to stand with our North Korean allies”来进行拆除。

 

 

 

 

 

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值