【问题标题】:Understanding Bomb Lab Phase 5 (two integer input)了解炸弹实验室第 5 阶段(两个整数输入)
【发布时间】:2022-03-08 03:36:00
【问题描述】:

我目前被困在炸弹实验室的第 5 阶段。我的第 5 阶段与我在网上找到的大多数其他第 5 阶段不同,因为它是两个整数的输入。这是汇编代码:

   0x0000555555555536 <+0>:     sub    $0x18,%rsp
   0x000055555555553a <+4>:     mov    %fs:0x28,%rax
   0x0000555555555543 <+13>:    mov    %rax,0x8(%rsp)
   0x0000555555555548 <+18>:    xor    %eax,%eax
   0x000055555555554a <+20>:    lea    0x4(%rsp),%rcx
   0x000055555555554f <+25>:    mov    %rsp,%rdx
   0x0000555555555552 <+28>:    lea    0x1914(%rip),%rsi        # 0x555555556e6d
   0x0000555555555559 <+35>:    callq  0x555555554f60 <__isoc99_sscanf@plt>
   0x000055555555555e <+40>:    cmp    $0x1,%eax
   0x0000555555555561 <+43>:    jle    0x5555555555bd <phase_5+135>
   0x0000555555555563 <+45>:    mov    (%rsp),%eax
   0x0000555555555566 <+48>:    and    $0xf,%eax
   0x0000555555555569 <+51>:    mov    %eax,(%rsp)
   0x000055555555556c <+54>:    cmp    $0xf,%eax
   0x000055555555556f <+57>:    je     0x5555555555a3 <phase_5+109>
   0x0000555555555571 <+59>:    mov    $0x0,%ecx
   0x0000555555555576 <+64>:    mov    $0x0,%edx
   0x000055555555557b <+69>:    lea    0x165e(%rip),%rsi        # 0x555555556be0 <array.3418>
   0x0000555555555582 <+76>:    add    $0x1,%edx
   0x0000555555555585 <+79>:    cltq   
   0x0000555555555587 <+81>:    mov    (%rsi,%rax,4),%eax
   0x000055555555558a <+84>:    add    %eax,%ecx
   0x000055555555558c <+86>:    cmp    $0xf,%eax
   0x000055555555558f <+89>:    jne    0x555555555582 <phase_5+76>
   0x0000555555555591 <+91>:    movl   $0xf,(%rsp)
   0x0000555555555598 <+98>:    cmp    $0xf,%edx
   0x000055555555559b <+101>:   jne    0x5555555555a3 <phase_5+109>
   0x000055555555559d <+103>:   cmp    %ecx,0x4(%rsp)
   0x00005555555555a1 <+107>:   je     0x5555555555a8 <phase_5+114>
   0x00005555555555a3 <+109>:   callq  0x555555555b25 <explode_bomb>
   0x00005555555555a8 <+114>:   mov    0x8(%rsp),%rax
   0x00005555555555ad <+119>:   xor    %fs:0x28,%rax
   0x00005555555555b6 <+128>:   jne    0x5555555555c4 <phase_5+142>
   0x00005555555555b8 <+130>:   add    $0x18,%rsp
   0x00005555555555bc <+134>:   retq   
   0x00005555555555bd <+135>:   callq  0x555555555b25 <explode_bomb>
   0x00005555555555c2 <+140>:   jmp    0x555555555563 <phase_5+45>
   0x00005555555555c4 <+142>:   callq  0x555555554ec0 <__stack_chk_fail@plt>

我输入的数字列表是这样的:

据我所知,需要满足两个条件:

  1. edx 必须等于 0xf,即第一个输入必须是 5、21、37 等(每次加 16)
  2. ecx与rsp比较,即15,所以我们需要ecx等于15

到目前为止我所知道的:

  1. 第一个输入不能是 15、31、47 等。
  2. 更改第二个输入不会影响 ecx
  3. 第一个输入与 edx 直接相关

问题:

  1. 第二个输入在哪里使用?
  2. 第一个输入是否必须是 5、21、37 等?

【问题讨论】:

  • 关于你的问题:1)在线+103 2)没有
  • @Jester 所以我看了你对另一个与我的问题非常相似的问题的回复,实际上是同一个问题。所以我的理解是第一个输入是数组的起点,所以应该限制在0到14之间,第二个输入是我从array[first input]开始访问的所有值的总和。
  • 如果这是另一个问题的重复,请将其链接起来,以便未来的读者在他们的搜索首先出现这个问题时可以找到它。
  • @cinos 嗨,我有同样的问题,我不明白,我也必须有 ecx 15,但我想不通。你能帮帮我吗?

标签: assembly x86-64 reverse-engineering


【解决方案1】:

比较 %ecx 是 115 第 103 行 你的答案原来是 21 115

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2014-12-06
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2021-02-12
  • 2020-09-27
相关资源
最近更新 更多