Phase_1
![17084259-078525ba663782ac.png](https://i-blog.csdnimg.cn/blog_migrate/1c4a7b443ce6fcbd635da8886dfcb317.png)
使用objdump -d查看汇编代码,打开bomb.s文件后,从main函数开始看,会发现存在好几个以Phase为开头的函数,大概就是对应着我们需要闯关的关卡。首先我们从phase_1开始分析。
![17084259-528526ff8e99eaa8.png](https://i-blog.csdnimg.cn/blog_migrate/9efdaf944032c3dde6333e5cf4818904.png)
这里就是phase_1的代码,我们可以发现80488db位置有一个call explode_bomb,这个应该就是引爆炸弹的位置。那前面的je指令应该就是跳过炸弹爆炸的条件。我们在phase_1处下断点。
![17084259-4f1300f191d0086e.png](https://i-blog.csdnimg.cn/blog_migrate/bf8918bf3352e1b2344cd3dee2244851.png)
程序停在了80488c0位置,单步执行。
![17084259-c48ec61e98f0baab.png](https://i-blog.csdnimg.cn/blog_migrate/e0092a8d997b419807274877bf2982be.png)
执行到这里时,即将调用strings_not_equal函数,可以看到栈顶的两个参数分别为我们随机输入的123和一个字符串。而调用的函数名含义为判断string是否相同(不同),那么猜测就是将我们的输入和内存中的某个字符串进行比较。call之前内存出现了字符串”With great power comes great responsibility.“试一试。
![17084259-3db45f69b31cbfb6.png](https://i-blog.csdnimg.cn/blog_migrate/bacb6a960a3b29a975635ca31b52ea78.png)
answer1:With great power comes great responsibility.
Phase_2
![17084259-30015148f810e1c3.png](https://i-blog.csdnimg.cn/blog_migrate/06f246fad0cce2b205abfe729ecb3122.png)
首先和phase_1的步骤类似,在phase_2的位置下断点。
运行到phase_2时,先查看phase_2的汇编,发现80488f8位置有一个函数叫read_six_numbers,猜测这个炸弹的解法应该是输入合适的6个数字。先随便输入6个试试看:
![17084259-2ddbc5f70936f17d.png](https://i-blog.csdnimg.cn/blog_migrate/de70c8cda5c5237e56c098ad4e72d558.png)
直接运行到read_six_numbers函数,这个时候我们来看一下函数运行前后寄存器的值和内存中的值,理论上来说应该会将我们输入的这6个数 存入内存。