帮助分析汇编代码

时间:2011-06-10 13:16:28

标签: assembly input x86

我得到了一个名为bomb的程序。程序运行时,它会询问用户输入(可能是字符串或int)。如果用户输入错误的输入,它将爆炸。

为了“消除”炸弹,我必须分析汇编代码,以便输入正确的输入。

该计划包括6个阶段,我已经完成了4个阶段,但我不能得到第5个阶段。

正如我所提到的,该程序从用户读取输入。在这个阶段我需要输入什么输入,以便我可以避免调用explode_bomb函数,以及如何得到答案?

08048db0 <phase_5>:
 8048db0:   55                      push   %ebp
 8048db1:   89 e5                   mov    %esp,%ebp
 8048db3:   57                      push   %edi
 8048db4:   56                      push   %esi
 8048db5:   53                      push   %ebx
 8048db6:   83 ec 1c                sub    $0x1c,%esp
 8048db9:   8b 5d 08                mov    0x8(%ebp),%ebx
 8048dbc:   89 1c 24                mov    %ebx,(%esp)
 8048dbf:   e8 8c 01 00 00          call   8048f50 <string_length>
 8048dc4:   83 f8 06                cmp    $0x6,%eax
 8048dc7:   74 05                   je     8048dce <phase_5+0x1e>
 8048dc9:   e8 c3 02 00 00          call   8049091 <explode_bomb>
 8048dce:   ba 00 00 00 00          mov    $0x0,%edx
 8048dd3:   b8 00 00 00 00          mov    $0x0,%eax
 8048dd8:   b9 80 a1 04 08          mov    $0x804a180,%ecx
 8048ddd:   0f be 34 03             movsbl (%ebx,%eax,1),%esi
 8048de1:   83 e6 0f                and    $0xf,%esi
 8048de4:   03 14 b1                add    (%ecx,%esi,4),%edx
 8048de7:   83 c0 01                add    $0x1,%eax
 8048dea:   83 f8 06                cmp    $0x6,%eax
 8048ded:   75 ee                   jne    8048ddd <phase_5+0x2d>
 8048def:   83 fa 41                cmp    $0x41,%edx
 8048df2:   74 05                   je     8048df9 <phase_5+0x49>
 8048df4:   e8 98 02 00 00          call   8049091 <explode_bomb>
 8048df9:   83 c4 1c                add    $0x1c,%esp
 8048dfc:   5b                      pop    %ebx
 8048dfd:   5e                      pop    %esi
 8048dfe:   5f                      pop    %edi
 8048dff:   5d                      pop    %ebp
 8048e00:   c3                      ret   


08048f50 <string_length>:
 8048f50:   55                      push   %ebp
 8048f51:   89 e5                   mov    %esp,%ebp
 8048f53:   8b 55 08                mov    0x8(%ebp),%edx
 8048f56:   b8 00 00 00 00          mov    $0x0,%eax
 8048f5b:   80 3a 00                cmpb   $0x0,(%edx)
 8048f5e:   74 09                   je     8048f69 <string_length+0x19>
 8048f60:   83 c0 01                add    $0x1,%eax
 8048f63:   80 3c 02 00             cmpb   $0x0,(%edx,%eax,1)
 8048f67:   75 f7                   jne    8048f60 <string_length+0x10>
 8048f69:   5d                      pop    %ebp
 8048f6a:   c3                      ret   

2 个答案:

答案 0 :(得分:0)

如果最终散列 0x41,它会爆炸。该字符串的长度也必须为6个字符,否则会爆炸。

答案 1 :(得分:0)

我是一个懒惰的人,我会在应用程序上执行字符串并尝试搜索那里显而易见的东西:

来自:man strings

  

strings - 在文件中打印可打印字符的字符串。