一、phase_1
进入(cd /home/w/桌面/bomb)调试模式(gdb -q bomb)之后,首先输入"disas phase_1"查看phase_1函数的汇编代码
根据汇编代码可以推出,%eax用于保存的是输入的字符串,地址0x402400处存放的是用于比较的字符串(即我们应该输入的正确字符串)
输入"x/s 0x402400"查看此处的信息,得到字符串
输入"run"运行该程序,输入字符串测试是否成功拆弹?!
二、phase_2
disas phase_2
0x0000000000400efc <+0>: push %rbp
0x0000000000400efd <+1>: push %rbx
0x0000000000400efe <+2>: sub $0x28,%rsp
0x0000000000400f02 <+6>: mov %rsp,%rsi
0x0000000000400f05 <+9>: callq 0x40145c <read_six_numbers>
0x0000000000400f0a <+14>: cmpl $0x1,(%rsp)
0x0000000000400f0e <+18>: je 0x400f30 <phase_2+52>
0x0000000000400f10 <+20>: callq 0x40143a <explode_bomb>
0x0000000000400f15 <+25>: jmp 0x400f30 <phase_2+52>
0x0000000000400f17 <+27>: mov -0x4(%rbx),%eax
0x0000000000400f1a <+30>: add %eax,%eax
0x0000000000400f1c <+32>: cmp %eax,(%rbx)
0x0000000000400f1e <+34>: je 0x400f25 <phase_2+41>
0x0000000000400f20 <+36>: callq 0x40143a <explode_bomb>
0x0000000000400f25 <+41>: add $0x4,%rbx
0x0000000000400f29 <+45>: cmp %rbp,%rbx
0x0000000000400f2c <+48>: jne 0x400f17 <phase_2+27>
0x0000000000400f2e <+50>: jmp 0x400f3c <phase_2+64>
0x0000000000400f30 <+52>: lea 0x4(%rsp),%rbx
0x0000000000400f35 <+57>: lea 0x18(%rsp),%rbp
0x0000000000400f3a <+62>: jmp 0x400f17 <phase_2+27>
0x0000000000400f3c <+64>: add $0x28,%rsp
根据第6行中的" cmpl $0x1,(%rsp) " 以及转移地址"je 0x400f30 <phase_2+52>“得到地址为%rsp+0x1中的值为0x1;根据第17行中的"jne 0x400f17 <phase_2+27>“得到程序进入了一个循环,循环终止的条件是第16行”%rbp=%rbx”,在循环中进行的是第11行%eax+=%eax后再将值保存到相应的地址单元中
三、phase_3
通关后答案写在da.txt中每行一关答案,run da.txt
四、phase_4
五、phase_5
六、phase_6
隐藏炸弹“run da.txt”
Border relations with Canada have never been better.
1 2 4 8 16 32
1 311
0 0 DrEvil
IONEFG
4 3 2 1 6 5
22