拆弹实验-phase_2

拆弹实验第二关,循环。
先查看phase_2的代码:
phase_2
从下面这段代码推测需要输入6个数,且最终存放在-0x30(%ebp) 为起始位置的内存中。

 	14e8:	e8 d4 06 00 00       	call   1bc1 <read_six_numbers>
    14ed:	83 c4 10             	add    $0x10,%esp
    14f0:	83 7d d0 00          	cmpl   $0x0,-0x30(%ebp)

从下面这段代码推测出,第一个数不能是负数,否则,将会引爆炸弹。那么,假设第一个数是0,继续往下看。

	14f0:	83 7d d0 00          	cmpl   $0x0,-0x30(%ebp)
    14f4:	78 0a                	js     1500 <phase_2+0x33>

发现了一处循环,代码如下:

 	150c:	83 c6 01             	add    $0x1,%esi
    150f:	83 fe 06             	cmp    $0x6,%esi
    1512:	74 0d                	je     1521 <phase_2+0x54>
    1514:	89 f0                	mov    %esi,%eax
    1516:	03 44 b7 fc          	add    -0x4(%edi,%esi,4),%eax
    151a:	39 04 b7             	cmp    %eax,(%edi,%esi,4)
    151d:	74 ed                	je     150c <phase_2+0x3f>

从上面的代码中可以发现,esi是判断循环是否继续进行的计数器。
参照代码可以得出下面这些判断:

0+1 == 11+2 == 33+3 == 66+4 == 1010+5 == 15

如果不满足上面这些等式,同样会引爆炸弹。
在上面这些推断下,可以猜测,输入的6个数为:0 1 3 6 10 15,运行bomb进行测试:
run pahse_2
很幸运,通关了!
通关

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值