炸弹实验室第 6 阶段:卡在最后一步

Posted

技术标签:

【中文标题】炸弹实验室第 6 阶段:卡在最后一步【英文标题】:Bomb Lab Phase 6 :Stuck on the last step 【发布时间】:2020-09-27 06:23:06 【问题描述】:

这是phase_6的asm代码

    08048de3 <phase_6>:
 8048de3:   56                      push   %esi
 8048de4:   53                      push   %ebx
 8048de5:   83 ec 4c                sub    $0x4c,%esp
 8048de8:   65 a1 14 00 00 00       mov    %gs:0x14,%eax
 8048dee:   89 44 24 44             mov    %eax,0x44(%esp)
 8048df2:   31 c0                   xor    %eax,%eax
 8048df4:   8d 44 24 14             lea    0x14(%esp),%eax
 8048df8:   50                      push   %eax
 8048df9:   ff 74 24 5c             pushl  0x5c(%esp)
 8048dfd:   e8 42 03 00 00          call   8049144 <read_six_numbers>
 8048e02:   83 c4 10                add    $0x10,%esp
 8048e05:   be 00 00 00 00          mov    $0x0,%esi
 8048e0a:   8b 44 b4 0c             mov    0xc(%esp,%esi,4),%eax
 8048e0e:   83 e8 01                sub    $0x1,%eax
 8048e11:   83 f8 05                cmp    $0x5,%eax
 8048e14:   76 05                   jbe    8048e1b <phase_6+0x38>
 8048e16:   e8 04 03 00 00          call   804911f <explode_bomb>
 8048e1b:   83 c6 01                add    $0x1,%esi
 8048e1e:   83 fe 06                cmp    $0x6,%esi
 8048e21:   74 1b                   je     8048e3e <phase_6+0x5b>
 8048e23:   89 f3                   mov    %esi,%ebx
 8048e25:   8b 44 9c 0c             mov    0xc(%esp,%ebx,4),%eax
 8048e29:   39 44 b4 08             cmp    %eax,0x8(%esp,%esi,4)
 8048e2d:   75 05                   jne    8048e34 <phase_6+0x51>
 8048e2f:   e8 eb 02 00 00          call   804911f <explode_bomb>
 8048e34:   83 c3 01                add    $0x1,%ebx
 8048e37:   83 fb 05                cmp    $0x5,%ebx
 8048e3a:   7e e9                   jle    8048e25 <phase_6+0x42>
 8048e3c:   eb cc                   jmp    8048e0a <phase_6+0x27>
 8048e3e:   8d 44 24 0c             lea    0xc(%esp),%eax
 8048e42:   8d 5c 24 24             lea    0x24(%esp),%ebx
 8048e46:   b9 07 00 00 00          mov    $0x7,%ecx
 8048e4b:   89 ca                   mov    %ecx,%edx
 8048e4d:   2b 10                   sub    (%eax),%edx
 8048e4f:   89 10                   mov    %edx,(%eax)
 8048e51:   83 c0 04                add    $0x4,%eax
 8048e54:   39 c3                   cmp    %eax,%ebx
 8048e56:   75 f3                   jne    8048e4b <phase_6+0x68>
 8048e58:   bb 00 00 00 00          mov    $0x0,%ebx
 8048e5d:   eb 16                   jmp    8048e75 <phase_6+0x92>
 8048e5f:   8b 52 08                mov    0x8(%edx),%edx
 8048e62:   83 c0 01                add    $0x1,%eax
 8048e65:   39 c8                   cmp    %ecx,%eax
 8048e67:   75 f6                   jne    8048e5f <phase_6+0x7c>
 8048e69:   89 54 b4 24             mov    %edx,0x24(%esp,%esi,4)
 8048e6d:   83 c3 01                add    $0x1,%ebx
 8048e70:   83 fb 06                cmp    $0x6,%ebx
 8048e73:   74 17                   je     8048e8c <phase_6+0xa9>
 8048e75:   89 de                   mov    %ebx,%esi
 8048e77:   8b 4c 9c 0c             mov    0xc(%esp,%ebx,4),%ecx
 8048e7b:   b8 01 00 00 00          mov    $0x1,%eax
 8048e80:   ba 3c c1 04 08          mov    $0x804c13c,%edx
 8048e85:   83 f9 01                cmp    $0x1,%ecx
 8048e88:   7f d5                   jg     8048e5f <phase_6+0x7c>
 8048e8a:   eb dd                   jmp    8048e69 <phase_6+0x86>
 8048e8c:   8b 5c 24 24             mov    0x24(%esp),%ebx
 8048e90:   8d 44 24 24             lea    0x24(%esp),%eax
 8048e94:   8d 74 24 38             lea    0x38(%esp),%esi
 8048e98:   89 d9                   mov    %ebx,%ecx
 8048e9a:   8b 50 04                mov    0x4(%eax),%edx
 8048e9d:   89 51 08                mov    %edx,0x8(%ecx)
 8048ea0:   83 c0 04                add    $0x4,%eax
 8048ea3:   89 d1                   mov    %edx,%ecx
 8048ea5:   39 c6                   cmp    %eax,%esi
 8048ea7:   75 f1                   jne    8048e9a <phase_6+0xb7>
 8048ea9:   c7 42 08 00 00 00 00    movl   $0x0,0x8(%edx)
 8048eb0:   be 05 00 00 00          mov    $0x5,%esi
 8048eb5:   8b 43 08                mov    0x8(%ebx),%eax
 8048eb8:   8b 00                   mov    (%eax),%eax
 8048eba:   39 03                   cmp    %eax,(%ebx)
 8048ebc:   7d 05                   jge    8048ec3 <phase_6+0xe0>
 8048ebe:   e8 5c 02 00 00          call   804911f <explode_bomb>
 8048ec3:   8b 5b 08                mov    0x8(%ebx),%ebx
 8048ec6:   83 ee 01                sub    $0x1,%esi
 8048ec9:   75 ea                   jne    8048eb5 <phase_6+0xd2>
 8048ecb:   8b 44 24 3c             mov    0x3c(%esp),%eax
 8048ecf:   65 33 05 14 00 00 00    xor    %gs:0x14,%eax
 8048ed6:   74 05                   je     8048edd <phase_6+0xfa>
 8048ed8:   e8 b3 f8 ff ff          call   8048790 <__stack_chk_fail@plt>
 8048edd:   83 c4 44                add    $0x44,%esp
 8048ee0:   5b                      pop    %ebx
 8048ee1:   5e                      pop    %esi
 8048ee2:   c3                      ret    

通过分析,我必须输入 6 个不完全相同的数字,并且小于 6,并且应该用空格分隔。所以随机输入 6 5 4 3 2 1 。 节点1到节点6的取值如下:

(gdb) x/3x $ebx
0x804c13c <node1>:  0x000003c8  0x00000001  0x0804c148
(gdb) x/3x *($ebx + 8)
0x804c148 <node2>:  0x0000018c  0x00000002  0x0804c154
(gdb) x/3x *(*($ebx + 8 )+ 8)
0x804c154 <node3>:  0x00000325  0x00000003  0x0804c160
(gdb) x/3x *(*(*($ebx+8)+8)+8)
0x804c160 <node4>:  0x0000012c  0x00000004  0x0804c16c
(gdb) x/3x *(*(*(*($ebx+8)+8)+8)+8)
0x804c16c <node5>:  0x0000008a  0x00000005  0x0804c178
(gdb) x/3x *(*(*(*(*($ebx+8)+8)+8)+8)+8)
0x804c178 <node6>:  0x00000219  0x00000006  0x00000000

从那里,按升序,输入应该是5 4 2 6 3 1 但我被炸了,我什至试过1 3 6 2 4 5,但我一直被炸。我哪里做错了?

【问题讨论】:

这几乎是一个好问题;格式很好,并且您有一个尝试和明智的方法来使用 GDB 检查链表节点。但是缺少的是对您在逆向工程代码中发现的任何解释。你甚至没有提到“链表”这个短语。我认为这就是为什么有人(不是我)投反对票的原因。 (大多数在炸弹实验室阶段寻求帮助的问题根本没有表现出任何努力,只是有代码转储,所以你比大多数人做得更好。希望这能帮助你写出将来得到支持的问题。欢迎来到堆栈溢出。) 【参考方案1】:

我设法看到我错了,8048e46: b9 07 00 00 00 mov $0x7,%ecx 可以写成 f(x)=7-x 其中 x 是一个索引。 所以之前,输入是1 3 6 2 4 5 这是错误的,我必须应用该功能。 新的输入是6 4 1 5 3 2,它化解了炸弹

【讨论】:

以上是关于炸弹实验室第 6 阶段:卡在最后一步的主要内容,如果未能解决你的问题,请参考以下文章

炸弹实验室作业第 5 阶段 - 编写其 C 等效项

二进制炸弹汇编语言分配

二元炸弹 - 第 4 阶段

CSAPP实验三:缓冲区溢出炸弹(Buflab)

CSAPP实验三:缓冲区溢出炸弹(Buflab)

CSAPP实验三:缓冲区溢出炸弹(Buflab)