二进制炸弹实验 BinaryBombs( 二 )

phase_2密码如下:0 1 3 6 10 15破解过程:

二进制炸弹实验 BinaryBombs

文章插图
  1. 在phase_2设置断点 。
  2. 运行,参数为ans.txt,其中写有刚刚得到的第一个的答案 。
  3. 先随便输入,这里输入一个数 5 。
  4. 反汇编观察,一开始调用了<read_six_numbers>函数,那么可以先把输入改为6个数
  5. 继续观察下面的汇编语言,发现 -30(%rbp)不就是存放第一个数的位置吗?这里判断第一个数必须为0,否则炸弹爆炸
  6. 在后面,%ebx先赋值为1,然后判断是否大于5,是一个循环,然后根据输入的6个数,每轮打印发现规律 。
  7. 得出代码:for(int i = 1; i <= 5; i ++) a[i] = a[i - 1] + i; 。
  8. 则得出答案 。
汇编代码:
点击查看代码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

经验总结扩展阅读