【问题标题】:Binary Bomb Phase 4 - Can't figure it out二元炸弹第 4 阶段 - 想不通
【发布时间】:2014-04-06 08:45:42
【问题描述】:

请帮忙,我已经找遍了,但我似乎找不到任何东西。

    Dump of assembler code for function phase_4:
   0x08048d81 <+0>: push   %ebp
   0x08048d82 <+1>: mov    %esp,%ebp
   0x08048d84 <+3>: sub    $0x28,%esp
   0x08048d87 <+6>: lea    -0xc(%ebp),%eax
   0x08048d8a <+9>: mov    %eax,0x8(%esp)
   0x08048d8e <+13>:    movl   $0x8049a68,0x4(%esp)
   0x08048d96 <+21>:    mov    0x8(%ebp),%eax
   0x08048d99 <+24>:    mov    %eax,(%esp)
   0x08048d9c <+27>:    call   0x8048788 <__isoc99_sscanf@plt>
   0x08048da1 <+32>:    cmp    $0x1,%eax
   0x08048da4 <+35>:    jne    0x8048dac <phase_4+43>
   0x08048da6 <+37>:    cmpl   $0x0,-0xc(%ebp)
   0x08048daa <+41>:    jg     0x8048db1 <phase_4+48>
   0x08048dac <+43>:    call   0x8049236 <explode_bomb>
   0x08048db1 <+48>:    mov    -0xc(%ebp),%eax
   0x08048db4 <+51>:    mov    %eax,(%esp)
   0x08048db7 <+54>:    call   0x8048b50 <func4>
   0x08048dbc <+59>:    cmp    $0x262,%eax
   0x08048dc1 <+64>:    je     0x8048dc8 <phase_4+71>
   0x08048dc3 <+66>:    call   0x8049236 <explode_bomb>
   0x08048dc8 <+71>:    leave  
   0x08048dc9 <+72>:    ret   






 Dump of assembler code for function func4:
   0x08048b50 <+0>: push   %ebp
   0x08048b51 <+1>: mov    %esp,%ebp
   0x08048b53 <+3>: sub    $0x18,%esp
   0x08048b56 <+6>: mov    %ebx,-0x8(%ebp)
   0x08048b59 <+9>: mov    %esi,-0x4(%ebp)
   0x08048b5c <+12>:    mov    0x8(%ebp),%ebx
   0x08048b5f <+15>:    mov    $0x1,%eax
   0x08048b64 <+20>:    cmp    $0x1,%ebx
   0x08048b67 <+23>:    jle    0x8048b83 <func4+51>
   0x08048b69 <+25>:    lea    -0x1(%ebx),%eax
   0x08048b6c <+28>:    mov    %eax,(%esp)
   0x08048b6f <+31>:    call   0x8048b50 <func4>
   0x08048b74 <+36>:    mov    %eax,%esi
   0x08048b76 <+38>:    sub    $0x2,%ebx
   0x08048b79 <+41>:    mov    %ebx,(%esp)
   0x08048b7c <+44>:    call   0x8048b50 <func4>
   0x08048b81 <+49>:    add    %esi,%eax
   0x08048b83 <+51>:    mov    -0x8(%ebp),%ebx
   0x08048b86 <+54>:    mov    -0x4(%ebp),%esi
   0x08048b89 <+57>:    mov    %ebp,%esp
   0x08048b8b <+59>:    pop    %ebp
   0x08048b8c <+60>:    ret  

我一直认为有两个数字,其中一个是 610,因为 0x08048dbc :cmp $0x262,%eax which 0x262 is 610.

【问题讨论】:

  • 需要更多关于您认为正在发生的事情以及应该做什么的信息......事实上,这并不是一个真正的“问题”。
  • 您可能应该逐步了解使用 GDB 的实际情况。通常这个任务的重点是在使用调试器时变得非常高效。
  • 好吧,我认为它需要两个数字。我可以进行最后一次测试,它将我与最后一个爆炸炸弹进行比较,但它一直在爆炸。当我使用 1 和 610 时,它似乎走得那么远,但我似乎无法通过最后一次测试

标签: assembly x86 reverse-engineering


【解决方案1】:

如果您查看传递给sscanf 的格式字符串,您很可能会看到一个%d 指令。 +32 行检查 sscanf 是否准确读取 1 个数字,否则炸弹会爆炸。

+59 行正在检查 func4610 的返回值,因此您需要确定要输入 func4 的数字,以便它将返回 610

在不透露太多信息的情况下,让我告诉你func4 是一个众所周知的序列的简单递归实现。你应该能从汇编代码中找到递归公式,然后你就可能认出来了。

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 2020-06-04
    • 2018-04-02
    • 2016-08-13
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    相关资源
    最近更新 更多