帮助分析程序集代码



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

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

这个项目由6个阶段组成,我已经完成了4个阶段,但我无法获得第五个阶段。

正如我提到的,程序读取用户的输入。这个阶段我需要输入什么输入,这样我就可以避免调用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   

我是个懒惰的家伙,我会在应用程序上执行字符串,并尝试在那里搜索一些明显的东西:

发件人:man strings

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

出现代码(AT&T语法对我的大脑来说就像模糊处理…),对字符串执行一次一个简单的查找哈希,如果最终哈希是而不是0x41,它就会爆炸。字符串的长度也必须是6个字符,否则会爆炸。

最新更新