phase_2密码如下:0 1 3 6 10 15破解过程:
文章插图
- 在phase_2设置断点 。
- 运行,参数为ans.txt,其中写有刚刚得到的第一个的答案 。
- 先随便输入,这里输入一个数 5 。
- 反汇编观察,一开始调用了<read_six_numbers>函数,那么可以先把输入改为6个数
- 继续观察下面的汇编语言,发现 -30(%rbp)不就是存放第一个数的位置吗?这里判断第一个数必须为0,否则炸弹爆炸
- 在后面,%ebx先赋值为1,然后判断是否大于5,是一个循环,然后根据输入的6个数,每轮打印发现规律 。
- 得出代码:for(int i = 1; i <= 5; i ++) a[i] = a[i - 1] + i; 。
- 则得出答案 。
点击查看代码0000000000401414 <phase_2>: 401414: 55 push %rbp 401415: 48 89 e5 mov %rsp,%rbp 401418: 53 push %rbx 401419: 48 83 ec 28 sub $0x28,%rsp 40141d: 48 8d 75 d0 lea -0x30(%rbp),%rsi 401421: e8 3c 05 00 00 callq 401962 <read_six_numbers> 401426: 83 7d d0 00 cmpl $0x0,-0x30(%rbp) 40142a: 78 07 js 401433 <phase_2+0x1f> 40142c: bb 01 00 00 00 mov $0x1,%ebx 401431: eb 0f jmp 401442 <phase_2+0x2e> 401433: e8 08 05 00 00 callq 401940 <explode_bomb> 401438: eb f2 jmp 40142c <phase_2+0x18> 40143a: e8 01 05 00 00 callq 401940 <explode_bomb> 40143f: 83 c3 01 add $0x1,%ebx 401442: 83 fb 05 cmp $0x5,%ebx 401445: 7f 17 jg 40145e <phase_2+0x4a> 401447: 48 63 c3 movslq %ebx,%rax 40144a: 8d 53 ff lea -0x1(%rbx),%edx 40144d: 48 63 d2 movslq %edx,%rdx 401450: 89 d9 mov %ebx,%ecx 401452: 03 4c 95 d0 add -0x30(%rbp,%rdx,4),%ecx 401456: 39 4c 85 d0 cmp %ecx,-0x30(%rbp,%rax,4) 40145a: 74 e3 je 40143f <phase_2+0x2b> 40145c: eb dc jmp 40143a <phase_2+0x26> 40145e: 48 83 c4 28 add $0x28,%rsp 401462: 5b pop %rbx 401463: 5d pop %rbp 401464: c3 retq
经验总结扩展阅读
- 公鸡为啥要打鸣
- 天空为什么是蓝的
- 有趣实验 .NET下数据库的负载均衡(续)
- 第五周 python实验报告
- 测定水中声速的实验
- 实验02_Proteus仿真数码管显示代码
- 独立动画是不是实验动画
- 风洞实验室是干嘛的
- 实验02_Proteus仿真数码管显示报告
- 有趣实验 .NET下数据库的负载均衡