这个文件里面的phase_3炸弹怎么拆除掉
时间: 2024-12-19 12:28:14 浏览: 16
要成功通过 `phase_3` 阶段而不触发炸弹爆炸(即调用 `explode_bomb` 函数),需要满足以下条件:
### 分析 `phase_3` 代码
1. **读取输入**:
```assembly
1297:64 48 8b 04 25 28 00 00 00 mov %fs:0x28,%rax
129e:48 89 44 24 18 mov %rax,0x18(%rsp)
12a5:31 c0 xor %eax,%eax
12a7:48 8d 4c 24 0f lea 0xf(%rsp),%rcx
12ac:48 8d 54 24 10 lea 0x10(%rsp),%rdx
12b1:4c 8d 44 24 14 lea 0x14(%rsp),%r8
12b6:48 8d 35 71 16 00 00 lea 0x1671(%rip),%rsi # 292e <_IO_stdin_used+0x1ae>
12bd:e8 2e fc ff ff callq ef0 <__isoc99_sscanf@plt>
```
这部分代码使用 `sscanf` 从输入中读取两个整数,并存储在栈上。
2. **检查读取结果**:
```assembly
12c2:83 f8 02 cmp $0x2,%eax
12c5:7e 1f jle 12e6 <phase_3+0x53>
```
如果没有成功读取到两个整数,则调用 `explode_bomb`。
3. **第一个整数检查**:
```assembly
12c7:83 7c 24 10 07 cmpl $0x7,0x10(%rsp)
12cc:0f 87 09 01 00 00 ja 13db <phase_3+0x148>
```
第一个整数必须小于等于 7,否则调用 `explode_bomb`。
4. **第二个整数检查**:
```assembly
12d2:8b 44 24 10 mov 0x10(%rsp),%eax
12d6:48 8d 15 63 16 00 00 lea 0x1663(%rip),%rdx # 2940 <_IO_stdin_used+0x1c0>
12dd:48 63 04 82 movslq (%rdx,%rax,4),%rax
12e1:48 01 d0 add %rdx,%rax
12e4:ff e0 jmpq *%rax
```
根据第一个整数的值,跳转到不同的地址进行进一步检查。
5. **具体检查逻辑**:
- 每个分支都会比较第二个整数与某个特定值,如果匹配则继续,否则调用 `explode_bomb`。
- 例如:
```assembly
12f2:81 7c 24 14 ad 00 00 00 cmpl $0xad,0x14(%rsp)
12f9:00
12fa:0f 84 e5 00 00 00 je 13e5 <phase_3+0x152>
```
### 解除方法
为了不触发 `explode_bomb`,你需要提供正确的输入,使得所有检查都通过。具体来说:
1. 输入的第一个整数必须小于等于 7。
2. 输入的第二个整数必须与每个分支中的特定值匹配。
你可以通过逆向工程或调试来确定这些特定值。以下是一些可能的正确输入示例(假设这些值是正确的):
- 输入 `2 86` (假设 2 对应的值是 86)
具体的值需要根据实际的程序逻辑来确定。如果你有更多关于这些值的信息,可以提供更准确的输入。
希望这能帮助你成功解除 `phase_3` 阶段的炸弹!
阅读全文
相关推荐








