拆弹实验-phase_3

phase_3:条件/分支:含switch语句

首先,查看phase_3的反汇编代码段:

00001529 <phase_3>:
    1529:	55                   	push   %ebp
    152a:	89 e5                	mov    %esp,%ebp
    152c:	53                   	push   %ebx
    152d:	83 ec 14             	sub    $0x14,%esp
    1530:	e8 db fc ff ff       	call   1210 <__x86.get_pc_thunk.bx>
    1535:	81 c3 cb 3a 00 00    	add    $0x3acb,%ebx
    153b:	8d 45 f0             	lea    -0x10(%ebp),%eax
    153e:	50                   	push   %eax
    153f:	8d 45 f4             	lea    -0xc(%ebp),%eax
    1542:	50                   	push   %eax
    1543:	8d 83 ad e3 ff ff    	lea    -0x1c53(%ebx),%eax
    1549:	50                   	push   %eax
    154a:	ff 75 08             	pushl  0x8(%ebp)
    154d:	e8 ce fb ff ff       	call   1120 <__isoc99_sscanf@plt>
    1552:	83 c4 10             	add    $0x10,%esp
    1555:	83 f8 01             	cmp    $0x1,%eax
    1558:	7e 14                	jle    156e <phase_3+0x45>
    155a:	83 7d f4 07          	cmpl   $0x7,-0xc(%ebp)
    155e:	77 4e                	ja     15ae <.L17+0x7>
    1560:	8b 45 f4             	mov    -0xc(%ebp),%eax
    1563:	89 da                	mov    %ebx,%edx
    1565:	03 94 83 a0 e1 ff ff 	add    -0x1e60(%ebx,%eax,4),%edx
    156c:	ff e2                	jmp    *%edx
    156e:	e8 fc 05 00 00       	call   1b6f <explode_bomb>
    1573:	eb e5                	jmp    155a <phase_3+0x31>

从下面这几行代码推测出,要输入两个数,否则会爆炸。其中,第一个参数存放在-0xc(%ebp)处,第二个参数存放在-0x10(%ebp)

	154d:	e8 ce fb ff ff       	call   1120 <__isoc99_sscanf@plt>
    1552:	83 c4 10             	add    $0x10,%esp
    1555:	83 f8 01             	cmp    $0x1,%eax
    1558:	7e 14                	jle    156e <phase_3+0x45>

从下面这两行推测出第一个参数不能大于7。这里我们假设第一个数为0。

	155a:	83 7d f4 07          	cmpl   $0x7,-0xc(%ebp)
    155e:	77 4e                	ja     15ae <.L17+0x7>

下面两行告诉我们跳转到另一个地方,gdb调试查看跳转到哪里了。

	1565:	03 94 83 a0 e1 ff ff 	add    -0x1e60(%ebx,%eax,4),%edx
    156c:	ff e2                	jmp    *%edx

disas得到下面这段反汇编代码更方便查看:
phase_3
在67行处设置断点,发现跳转到了145行,将0x13e赋给eax,然后又跳转到了81行。将eax中的值和我们输入的第二个参数进行比较,如果不相等,就会爆炸。到这里,我们可以推测第二个数是0x13e,记住,输入时输入的是10进制数,转换成10进制数318后输入。
下面是通关操作:
通关
为了防止出错爆炸,我在引爆炸弹的地方都设置了断点。很幸运,推测是对的,通关了!
通关了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值