Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 二元炸弹第四阶段_Assembly_X86_Reverse Engineering - Fatal编程技术网

Assembly 二元炸弹第四阶段

Assembly 二元炸弹第四阶段,assembly,x86,reverse-engineering,Assembly,X86,Reverse Engineering,我正在做二元炸弹任务,在我进入第四阶段之前,一切都很顺利。我已经坚持了好几天了。到目前为止,我知道这个阶段正在寻找两个数字。我从x/s 0x804a5bf线+20知道这一点。我真正困惑的是它何时需要func4。它看起来像一个递归,但我不知道它在做什么。我还认为我必须检查+6和+13行,但我不知道如何检查。我是gdb和汇编代码的新手,所有这些都很难理解 Dump of assembler code for function phase_4: 0x08048ccb <+0>: pu

我正在做二元炸弹任务,在我进入第四阶段之前,一切都很顺利。我已经坚持了好几天了。到目前为止,我知道这个阶段正在寻找两个数字。我从x/s 0x804a5bf线+20知道这一点。我真正困惑的是它何时需要func4。它看起来像一个递归,但我不知道它在做什么。我还认为我必须检查+6和+13行,但我不知道如何检查。我是gdb和汇编代码的新手,所有这些都很难理解

Dump of assembler code for function phase_4:
0x08048ccb <+0>:    push   %ebp
0x08048ccc <+1>:    mov    %esp,%ebp
0x08048cce <+3>:    sub    $0x28,%esp
0x08048cd1 <+6>:    lea    -0x10(%ebp),%eax
0x08048cd4 <+9>:    mov    %eax,0xc(%esp)
0x08048cd8 <+13>:   lea    -0xc(%ebp),%eax
0x08048cdb <+16>:   mov    %eax,0x8(%esp)
0x08048cdf <+20>:   movl   $0x804a5bf,0x4(%esp)
0x08048ce7 <+28>:   mov    0x8(%ebp),%eax
0x08048cea <+31>:   mov    %eax,(%esp)
0x08048ced <+34>:   call   0x8048860 <__isoc99_sscanf@plt>
0x08048cf2 <+39>:   cmp    $0x2,%eax
0x08048cf5 <+42>:   jne    0x8048d02 <phase_4+55>
0x08048cf7 <+44>:   mov    -0x10(%ebp),%eax
0x08048cfa <+47>:   sub    $0x2,%eax
0x08048cfd <+50>:   cmp    $0x2,%eax
0x08048d00 <+53>:   jbe    0x8048d07 <phase_4+60>
0x08048d02 <+55>:   call   0x80491a6 <explode_bomb>
0x08048d07 <+60>:   mov    -0x10(%ebp),%eax
0x08048d0a <+63>:   mov    %eax,0x4(%esp)
0x08048d0e <+67>:   movl   $0x8,(%esp)
0x08048d15 <+74>:   call   0x8048c7f <func4>
0x08048d1a <+79>:   cmp    -0xc(%ebp),%eax
0x08048d1d <+82>:   je     0x8048d24 <phase_4+89>
0x08048d1f <+84>:   call   0x80491a6 <explode_bomb>
0x08048d24 <+89>:   leave  
0x08048d25 <+90>:   ret    

End of assembler dump.

This is the func4 code dump
0x08048c7f <+0>:    push   %ebp
0x08048c80 <+1>:    mov    %esp,%ebp
0x08048c82 <+3>:    push   %edi
0x08048c83 <+4>:    push   %esi
0x08048c84 <+5>:    push   %ebx
0x08048c85 <+6>:    sub    $0x1c,%esp
0x08048c88 <+9>:    mov    0x8(%ebp),%ebx
0x08048c8b <+12>:   mov    0xc(%ebp),%esi
0x08048c8e <+15>:   test   %ebx,%ebx
0x08048c90 <+17>:   jle    0x8048cbe <func4+63>
0x08048c92 <+19>:   mov    %esi,%eax
0x08048c94 <+21>:   cmp    $0x1,%ebx
0x08048c97 <+24>:   je     0x8048cc3 <func4+68>
0x08048c99 <+26>:   mov    %esi,0x4(%esp)
0x08048c9d <+30>:   lea    -0x1(%ebx),%eax
0x08048ca0 <+33>:   mov    %eax,(%esp)
0x08048ca3 <+36>:   call   0x8048c7f <func4>
0x08048ca8 <+41>:   lea    (%eax,%esi,1),%edi
0x08048cab <+44>:   mov    %esi,0x4(%esp)
0x08048caf <+48>:   sub    $0x2,%ebx
0x08048cb2 <+51>:   mov    %ebx,(%esp)
0x08048cb5 <+54>:   call   0x8048c7f <func4>
0x08048cba <+59>:   add    %edi,%eax
0x08048cbc <+61>:   jmp    0x8048cc3 <func4+68>
0x08048cbe <+63>:   mov    $0x0,%eax
0x08048cc3 <+68>:   add    $0x1c,%esp
0x08048cc6 <+71>:   pop    %ebx
0x08048cc7 <+72>:   pop    %esi
0x08048cc8 <+73>:   pop    %edi
0x08048cc9 <+74>:   pop    %ebp
0x08048cca <+75>:   ret    
功能阶段4的汇编程序代码转储:
0x08048ccb:推送%ebp
0x08048ccc:mov%esp,%ebp
0x08048cce:sub$0x28,%esp
0x08048cd1:lea-0x10(%ebp),%eax
0x08048cd4:mov%eax,0xc(%esp)
0x08048cd8:lea-0xc(%ebp),%eax
0x08048cdb:mov%eax,0x8(%esp)
0x08048cdf:movl$0x804a5bf,0x4(%esp)
0x08048ce7:mov 0x8(%ebp),%eax
0x08048cea:mov%eax,(%esp)
0x08048ced:调用0x8048860
0x08048cf2:cmp$0x2,%eax
0x08048cf5:jne 0x8048d02
0x08048cf7:mov-0x10(%ebp),%eax
0x08048cfa:sub$0x2,%eax
0x08048cfd:cmp$0x2,%eax
0x08048d00:jbe 0x8048d07
0x08048d02:调用0x80491a6
0x08048d07:mov-0x10(%ebp),%eax
0x08048d0a:mov%eax,0x4(%esp)
0x08048d0e:movl$0x8,(%esp)
0x08048d15:调用0x8048c7f
0x08048d1a:cmp-0xc(%ebp),%eax
0x08048d1d:je 0x8048d24
0x08048d1f:调用0x80491a6
0x08048424:离开
0x08048d25:ret
汇编程序转储结束。
这是func4代码转储
0x08048c7f:推送%ebp
0x08048c80:mov%esp,%ebp
0x08048c82:推送%edi
0x08048c83:推送%esi
0x08048c84:推送%ebx
0x08048c85:子$0x1c,%esp
0x08048c88:mov 0x8(%ebp),%ebx
0x08048c8b:mov 0xc(%ebp),%esi
0x08048c8e:测试%ebx,%ebx
0x08048c90:jle 0x8048cbe
0x08048c92:mov%esi,%eax
0x08048c94:cmp$0x1,%ebx
0x08048c97:je 0x8048cc3
0x08048c99:mov%esi,0x4(%esp)
0x08048c9d:lea-0x1(%ebx),%eax
0x08048ca0:mov%eax,(%esp)
0x08048ca3:调用0x8048c7f
0x08048ca8:lea(%eax,%esi,1),%edi
0x08048cab:移动%esi,0x4(%esp)
0x08048caf:sub$0x2,%ebx
0x08048cb2:mov%ebx,(%esp)
0x08048cb5:调用0x8048c7f
0x08048cba:添加%edi,%eax
0x08048cbc:jmp 0x8048cc3
0x08048cbe:mov$0x0,%eax
0x08048cc3:添加$0x1c,%esp
0x08048cc6:弹出%ebx
0x08048cc7:弹出%esi
0x08048cc8:pop%edi
0x08048cc9:弹出%ebp
0x08048cca:ret

有机会看到实际的源代码吗?没有源代码。显然这是一项非常有名的任务。我们只得到了可执行文件,我们必须用GDB解决这些阶段。总共有六个阶段,我只到了第四个阶段。查看
lea
的功能。总的来说,我发现在每一行中添加注释是很有用的,这些注释用伪代码解释了它的功能。例如,
0x08048c9d
eax=ebx-1
。每行重复一次,然后重试。另请参阅是否有帮助。请注意,这并不完全相同,当然这是一个64位的构建。我仍然感到困惑。我发现在func4的+15行,它正在测试8对8。它在哪里测试8?