我得到了一个名为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
答案 0 :(得分:0)
如果最终散列不 0x41,它会爆炸。该字符串的长度也必须为6个字符,否则会爆炸。
答案 1 :(得分:0)
我是一个懒惰的人,我会在应用程序上执行字符串并尝试搜索那里显而易见的东西:
来自:man strings
strings - 在文件中打印可打印字符的字符串。