phase_5密码如下:ionefg破解过程:
- 设置断点,运行,反汇编
- 观察到
- 再看接下来一段
好,先打印下0x403200处的字符串
文章插图
发现打印出的一段奇怪的字符串 。
但是,根据刚刚分析出的[0,15]的偏移量,我们取出前16个字符
得到:maduiersnfotvbyl
- 再将断点设在循环内,每次打印出%dl , 发现对于输入的abcdef,得到了aduier的ASCII码,再联系一下ASCII码的十六进制,a 为0x61 。和0xf做与运算得到 0x1。
- 发现,输出的字符串中的字符的ASCII码对0x60的偏移量 与 原字符串的字符的下标是相等的 。
- 继续向下看
文章插图
根据前面得到的结论 。先取出这些字符,看在原字符串中的下标 。
得到:9 15 14 5 6 7,然后加上0x60, 查阅ASCII码
得到:ionefg
汇编代码:
点击查看代码00000000004015ab <phase_5>: 4015ab: 55 push %rbp 4015ac: 48 89 e5 mov %rsp,%rbp 4015af: 53 push %rbx 4015b0: 48 83 ec 18 sub $0x18,%rsp 4015b4: 48 89 fb mov %rdi,%rbx 4015b7: e8 74 02 00 00 callq 401830 <string_length> 4015bc: 83 f8 06 cmp $0x6,%eax 4015bf: 75 24 jne 4015e5 <phase_5+0x3a> 4015c1: b8 00 00 00 00 mov $0x0,%eax// 循环6次 0~5 4015c6: 83 f8 05 cmp $0x5,%eax 4015c9: 7f 21 jg 4015ec <phase_5+0x41> 4015cb: 48 63 c8 movslq %eax,%rcx 4015ce: 0f b6 14 0b movzbl (%rbx,%rcx,1),%edx // 逐个取你输的字符 4015d2: 83 e2 0f and $0xf,%edx // 转为[0,15] 4015d5: 0f b6 92 00 32 40 00 movzbl 0x403200(%rdx),%edx 4015dc: 88 54 0d e9 mov %dl,-0x17(%rbp,%rcx,1) 4015e0: 83 c0 01 add $0x1,%eax 4015e3: eb e1 jmp 4015c6 <phase_5+0x1b> 4015e5: e8 56 03 00 00 callq 401940 <explode_bomb> 4015ea: eb d5 jmp 4015c1 <phase_5+0x16> 4015ec: c6 45 ef 00 movb $0x0,-0x11(%rbp) 4015f0: be ae 31 40 00 mov $0x4031ae,%esi 4015f5: 48 8d 7d e9 lea -0x17(%rbp),%rdi 4015f9: e8 46 02 00 00 callq 401844 <strings_not_equal> 4015fe: 85 c0 test %eax,%eax 401600: 75 07 jne 401609 <phase_5+0x5e> 401602: 48 83 c4 18 add $0x18,%rsp 401606: 5b pop %rbx 401607: 5d pop %rbp 401608: c3 retq 401609: e8 32 03 00 00 callq 401940 <explode_bomb> 40160e: eb f2 jmp 401602 <phase_5+0x57>
经验总结扩展阅读
- 公鸡为啥要打鸣
- 天空为什么是蓝的
- 有趣实验 .NET下数据库的负载均衡(续)
- 第五周 python实验报告
- 测定水中声速的实验
- 实验02_Proteus仿真数码管显示代码
- 独立动画是不是实验动画
- 风洞实验室是干嘛的
- 实验02_Proteus仿真数码管显示报告
- 有趣实验 .NET下数据库的负载均衡