You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Binary Bomb第五阶段:求解让循环执行15次的输入值

Binary Bomb第五阶段破解步骤

核心逻辑分析

先拆解汇编代码的关键流程:

  • 输入读取:通过sscanf读取两个整数,分别存在栈上0x8(%rsp)(记为input1)和0xc(%rsp)(记为input2),读取数量不足2则触发炸弹。
  • 输入预处理:input2会被做& 0xf操作(仅保留低4位,取值范围0-15),如果结果为15(0xf)直接触发炸弹。
  • 循环逻辑:
    • 初始化ecx=0x64(十进制100),edx=0
    • 循环体:
      1. edx +=1(循环计数)
      2. 以当前eax为索引,取数组值到eax
      3. ecx -= eax
      4. 如果eax !=15,继续循环
  • 验证条件:循环结束后,需同时满足:
    1. edx ==15(循环执行15次)
    2. ecx == input1(计算后的结果匹配第一个输入)

数组对应关系(索引→值):

0:10, 1:2, 2:14, 3:7, 4:8, 5:12, 6:15, 7:11, 8:0, 9:4, 10:1, 11:13, 12:3, 13:9, 14:6, 15:5

寻找符合要求的input2

我们需要找到一个初始索引s0(input2&0xf = s0),使得从s0开始遍历数组,刚好执行15次循环后遇到值15:

  • 第15次循环必须取到值15(对应索引6),前14次取到的值都不能是15
  • 正向推导路径:
    s0=5 → arr[5]=12(edx=1)
    → arr[12]=3(edx=2)
    → arr[3]=7(edx=3)
    → arr[7]=11(edx=4)
    → arr[11]=13(edx=5)
    → arr[13]=9(edx=6)
    → arr[9]=4(edx=7)
    → arr[4]=8(edx=8)
    → arr[8]=0(edx=9)
    → arr[0]=10(edx=10)
    → arr[10]=1(edx=11)
    → arr[1]=2(edx=12)
    → arr[2]=14(edx=13)
    → arr[14]=6(edx=14)
    → arr[6]=15(edx=15,退出循环)
    
  • 满足条件的s0=5,因此input2可以是任何低4位为5的整数(如5、21等,通常输入5即可)

计算input1

input1等于初始ecx(100)减去循环中所有取到的数组值之和:

  • 循环中取到的值依次为:12、3、7、11、13、9、4、8、0、10、1、2、14、6、15
  • 总和:12+3+7+11+13+9+4+8+0+10+1+2+14+6+15=115
  • input1=100-115=-15

最终输入

输入两个数:-15 5(或-15搭配任何低4位为5的数)即可通过第五阶段。

内容的提问来源于stack exchange,提问作者ThoughtOverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:05:21