了解炸弹实验室第5阶段(两个整数输入)

问题描述 投票:0回答:2

我目前陷入炸弹实验室第 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>

我输入的号码列表是这样的:

enter image description here

据我了解,需要满足两个条件:

  1. edx 必须等于 0xf,这意味着第一个输入必须是 5、21、37 等(每次加 16)
  2. ecx 与 rsp 进行比较,rsp 为 15,因此我们需要 ecx 等于 15

目前我所知道的:

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

问题:

  1. 第二个输入用在哪里?
  2. 第一个输入是否必须是 5、21、37 等?
assembly x86-64 reverse-engineering binary-bomb
2个回答
0
投票

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


0
投票

解决方案是:5 115。我在这里给出了phase_5的详细解释:https://techiekarthik.hashnode.dev/cmu-bomblab-walkthrough?t=1676391915473#heading-phase-5

© www.soinside.com 2019 - 2024. All rights reserved.