二元炸弹 - 阶段6

时间:2016-04-20 20:54:29

标签: assembly x86 reverse-engineering

这是phase_6

的反汇编
 08048dbf <phase_6>:
 8048dbf:   55                      push   %ebp
 8048dc0:   89 e5                   mov    %esp,%ebp
 8048dc2:   83 ec 18                sub    $0x18,%esp
 8048dc5:   c7 44 24 0c 00 00 00    movl   $0x0,0xc(%esp)
 8048dcc:   00 
 8048dcd:   c7 44 24 08 0a 00 00    movl   $0xa,0x8(%esp)
 8048dd4:   00 
 8048dd5:   c7 44 24 04 00 00 00    movl   $0x0,0x4(%esp)
 8048ddc:   00 
 8048ddd:   8b 45 08                mov    0x8(%ebp),%eax
 8048de0:   89 04 24                mov    %eax,(%esp)
 8048de3:   e8 0c fa ff ff          call   80487f4 <__strtol_internal@plt>
 8048de8:   a3 4c b5 04 08          mov    %eax,0x804b54c
 8048ded:   c7 04 24 4c b5 04 08    movl   $0x804b54c,(%esp)
 8048df4:   e8 76 ff ff ff          call   8048d6f <fun6>
 8048df9:   ba 01 00 00 00          mov    $0x1,%edx
 8048dfe:   8b 40 08                mov    0x8(%eax),%eax
 8048e01:   42                      inc    %edx //HERE
 8048e02:   83 fa 06                cmp    $0x6,%edx//HERE
 8048e05:   7e f7                   jle    8048dfe <phase_6+0x3f>
 8048e07:   8b 00                   mov    (%eax),%eax
 8048e09:   3b 05 4c b5 04 08       cmp    0x804b54c,%eax
 8048e0f:   74 05                   je     8048e16 <phase_6+0x57>
 8048e11:   e8 2d 06 00 00          call   8049443 <explode_bomb>
 8048e16:   c9                      leave  
 8048e17:   c3                      ret

fun6的解散:

 08048d6f <fun6>:
 8048d6f:   55                      push   %ebp
 8048d70:   89 e5                   mov    %esp,%ebp
 8048d72:   56                      push   %esi
 8048d73:   53                      push   %ebx
 8048d74:   8b 75 08                mov    0x8(%ebp),%esi
 8048d77:   8b 5e 08                mov    0x8(%esi),%ebx
 8048d7a:   c7 46 08 00 00 00 00    movl   $0x0,0x8(%esi)
 8048d81:   85 db                   test   %ebx,%ebx
 8048d83:   74 34                   je     8048db9 <fun6+0x4a>
 8048d85:   89 f2                   mov    %esi,%edx
 8048d87:   89 f1                   mov    %esi,%ecx
 8048d89:   85 f6                   test   %esi,%esi
 8048d8b:   74 15                   je     8048da2 <fun6+0x33>
 8048d8d:   8b 06                   mov    (%esi),%eax
 8048d8f:   3b 03                   cmp    (%ebx),%eax
 8048d91:   7e 0f                   jle    8048da2 <fun6+0x33>
 8048d93:   89 d1                   mov    %edx,%ecx
 8048d95:   8b 52 08                mov    0x8(%edx),%edx
 8048d98:   85 d2                   test   %edx,%edx
 8048d9a:   74 06                   je     8048da2 <fun6+0x33>
 8048d9c:   8b 02                   mov    (%edx),%eax
 8048d9e:   3b 03                   cmp    (%ebx),%eax
 8048da0:   7f f1                   jg     8048d93 <fun6+0x24>
 8048da2:   39 d1                   cmp    %edx,%ecx
 8048da4:   74 05                   je     8048dab <fun6+0x3c>
 8048da6:   89 59 08                mov    %ebx,0x8(%ecx)
 8048da9:   eb 02                   jmp    8048dad <fun6+0x3e>
 8048dab:   89 de                   mov    %ebx,%esi
 8048dad:   8b 4b 08                mov    0x8(%ebx),%ecx
 8048db0:   89 53 08                mov    %edx,0x8(%ebx)
 8048db3:   89 cb                   mov    %ecx,%ebx
 8048db5:   85 c9                   test   %ecx,%ecx
 8048db7:   75 cc                   jne    8048d85 <fun6+0x16>
 8048db9:   89 f0                   mov    %esi,%eax
 8048dbb:   5b                      pop    %ebx
 8048dbc:   5e                      pop    %esi
 8048dbd:   5d                      pop    %ebp
 8048dbe:   c3                      ret

我知道这个阶段是一个链表,但我不确定要使用多少输入。我在phase_6中指出的两个地方让我觉得需要有6个输入,但有9个节点看起来像这样:

0x804b510 <node5>:      0x000003e3      0x00000005      0x804b528   (995)
0x804b528 <node3>:      0x000003d2      0x00000003      0x0804b51c  (978)   
0x804b51c <node4>:      0x00000365      0x00000004      0x0804b504  (869) 
0x804b504 <node6>:      0x000002ff      0x00000006      0x0804b4e0  (767)
0x804b4e0 <node9>:      0x00000280      0x00000009      0x0804b534  (640)            
0x804b534 <node2>:      0x000001b6      0x00000002      0x0804b4f8  (438)
0x804b4f8 <node7>:      0x00000106      0x00000007      0x0804b540  (262)
0x804b540 <node1>:      0x000000c6      0x00000001      0x0804b4ec  (198)
0x804b4ec <node8>:      0x00000052      0x00000008      0x0804b54c  (82)

括号中的数字是第一列中数字从十六进制到十进制的转换。我特有的是这些节点看起来是降序的。我已经尝试了5 3 4 6 9 2 7 1 8的输入并且它不起作用(也做了反转)。

我的问题是如何知道预期会有多少输入?我相信它是6,但为什么会有9个节点?

1 个答案:

答案 0 :(得分:2)

只有1个输入,从strtol的单8048de3次呼叫中可以看出这一点。列表中的节点数与输入数无关。

由于您只询问了输入的数量,这是我唯一回答的问题。