Binary Bomb Phase_3 破解求助:求正确输入及分析思路
Binary Bomb Phase 3 破解分析
核心条件
输入为两个整数 x(第一个数)和 y(第二个数),最终需满足:
%eax = 316(即十六进制0x13c)%edx = 1
输入验证逻辑
sscanf必须成功读取至少2个整数,否则触发炸弹。- 第二个输入
y必须 ≤7,否则触发炸弹。
跳转表映射(基于地址0x402500)
每个y值对应跳转分支,关系如下:
| y值 | 跳转目标地址 |
|---|---|
| 0 | 0x400fe3 |
| 1 | 0x400fd5 |
| 2 | 0x400ff1 |
| 3 | 0x400f97 |
| 4 | 0x400fdc |
| 5 | 0x400fa1 |
| 6 | 0x401004 |
| 7 | 0x400fea |
分支分析(目标:满足eax=316、edx=1)
逐一排查分支后,只有y=1的分支能同时满足两个条件:
分支y=1(跳转0x400fd5)
该分支的执行流程:
400fd5: mov $0x20,%edx ; edx初始化为32(十进制) 400fda: jmp 400fab ; 跳转到公共运算段
从0x400fab开始的公共运算段会重复执行5次以下操作:
add $0x1,%eax:每次给eax加1sar %edx:每次将edx算术右移1位(等价于除以2取整)
运算结果推导:
- eax初始值为输入的
x,经过5次加1后最终值为x + 5。要求等于316,因此x = 316 -5 = 311。 - edx初始值为32,经过5次右移后:
32 >>5 =1,正好满足%edx=1的要求。
验证流程
输入311 1后:
- 成功通过输入验证,触发y=1对应的分支。
- eax从311累加5次后变为316,edx从32右移5次后变为1。
- 最终的cmp检查全部通过,炸弹不触发,进入下一阶段。
内容的提问来源于stack exchange,提问作者sami kim
相关产品推荐
相关产品推荐

