【发布时间】: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>
我输入的数字列表是这样的:
据我所知,需要满足两个条件:
- edx 必须等于 0xf,即第一个输入必须是 5、21、37 等(每次加 16)
- ecx与rsp比较,即15,所以我们需要ecx等于15
到目前为止我所知道的:
- 第一个输入不能是 15、31、47 等。
- 更改第二个输入不会影响 ecx
- 第一个输入与 edx 直接相关
问题:
- 第二个输入在哪里使用?
- 第一个输入是否必须是 5、21、37 等?
【问题讨论】:
-
关于你的问题:1)在线
+1032)没有 -
@Jester 所以我看了你对另一个与我的问题非常相似的问题的回复,实际上是同一个问题。所以我的理解是第一个输入是数组的起点,所以应该限制在0到14之间,第二个输入是我从array[first input]开始访问的所有值的总和。
-
如果这是另一个问题的重复,请将其链接起来,以便未来的读者在他们的搜索首先出现这个问题时可以找到它。
-
@cinos 嗨,我有同样的问题,我不明白,我也必须有 ecx 15,但我想不通。你能帮帮我吗?
标签: assembly x86-64 reverse-engineering