Assembly 二元炸弹实验室第四阶段
这是我的汇编代码:Assembly 二元炸弹实验室第四阶段,assembly,x86,reverse-engineering,Assembly,X86,Reverse Engineering,这是我的汇编代码: Dump of assembler code for function phase_4: => 0x08048cb1 <+0>: push %esi 0x08048cb2 <+1>: push %ebx 0x08048cb3 <+2>: sub $0x14,%esp 0x08048cb6 <+5>: mov 0x20(%esp),%ebx 0x08048cba <+9>
Dump of assembler code for function phase_4:
=> 0x08048cb1 <+0>: push %esi
0x08048cb2 <+1>: push %ebx
0x08048cb3 <+2>: sub $0x14,%esp
0x08048cb6 <+5>: mov 0x20(%esp),%ebx
0x08048cba <+9>: mov %ebx,(%esp)
0x08048cbd <+12>: call 0x804909b <string_length>
0x08048cc2 <+17>: mov %eax,%esi
0x08048cc4 <+19>: lea 0x1(%eax),%eax
0x08048cc7 <+22>: mov %eax,(%esp)
0x08048cca <+25>: call 0x8048800 <malloc@plt>
0x08048ccf <+30>: lea (%eax,%esi,1),%ecx
0x08048cd2 <+33>: movb $0x0,(%ecx)
0x08048cd5 <+36>: movzbl (%ebx),%edx
0x08048cd8 <+39>: test %dl,%dl
0x08048cda <+41>: je 0x8048ceb <phase_4+58>
0x08048cdc <+43>: sub $0x1,%ecx
0x08048cdf <+46>: mov %dl,(%ecx)
0x08048ce1 <+48>: add $0x1,%ebx
0x08048ce4 <+51>: movzbl (%ebx),%edx
0x08048ce7 <+54>: test %dl,%dl
0x08048ce9 <+56>: jne 0x8048cdc <phase_4+43>
0x08048ceb <+58>: mov %eax,0x4(%esp)
0x08048cef <+62>: movl $0x804a3a8,(%esp)
0x08048cf6 <+69>: call 0x80490ba <strings_not_equal>
0x08048cfb <+74>: test %eax,%eax
0x08048cfd <+76>: je 0x8048d04 <phase_4+83>
0x08048cff <+78>: call 0x8049353 <explode_bomb>
0x08048d04 <+83>: add $0x14,%esp
0x08048d07 <+86>: pop %ebx
0x08048d08 <+87>: pop %esi
0x08048d09 <+88>: ret
功能阶段4的汇编程序代码转储:
=>0x08048cb1:推送%esi
0x08048cb2:推送%ebx
0x08048cb3:子$0x14,%esp
0x08048cb6:mov 0x20(%esp),%ebx
0x08048cba:mov%ebx,(%esp)
0x08048cbd:调用0x804909b
0x08048cc2:mov%eax,%esi
0x08048cc4:lea 0x1(%eax),%eax
0x08048cc7:mov%eax,(%esp)
0x08048cca:呼叫0x8048800
0x08048ccf:lea(%eax,%esi,1),%ecx
0x08048cd2:movb$0x0,(%ecx)
0x08048cd5:movzbl(%ebx),%edx
0x08048cd8:测试%dl,%dl
0x08048cda:je 0x8048ceb
0x08048cdc:sub$0x1,%ecx
0x08048cdf:mov%dl,(%ecx)
0x08048ce1:添加$0x1,%ebx
0x08048ce4:movzbl(%ebx),%edx
0x08048ce7:测试%dl,%dl
0x08048ce9:jne 0x8048cdc
0x08048ceb:mov%eax,0x4(%esp)
0x08048cef:movl$0x804a3a8,(%esp)
0x08048cf6:调用0x80490ba
0x08048cfb:测试%eax,%eax
0x08048cfd:je 0x8048d04
0x08048cff:调用0x8049353
0x08048d04:添加$0x14,%esp
0x08048d07:弹出%ebx
0x08048d08:弹出%esi
0x08048d09:ret
我知道输入字符串正在被操作,我看到有一个循环一直到输入字符串的末尾。但我似乎不知道这个被操纵的字符串存储在哪里?可能是我炸弹里的一根绳子吗?我有一个字符串“什么比一只笑着的花栗鼠更好?一只沉默的花栗鼠”,我想这可能是我的输入被操纵了。我试着检查ebx和edx,但没有运气
有什么建议吗?谢谢大家! movl$0x804a3a8,(%esp)
看起来像是在存储一个指针arg,用于调用字符串\u not \u equal
。因此,这显然是第一个要查看的地方,除非代码在实际检查之前修改静态数据。movl$0x804a3a8,(%esp)
看起来它存储了一个指针arg,用于调用字符串\u not \u equal
。因此,这显然是第一个要查看的地方,除非代码在实际检查之前修改静态数据。