Bomb Lab

先给explode_bomb打个断点,防止爆炸了

Phase1

用到的一些命令

1
2
3
b *0x00000 (地址打断点)
x 0x00000 (查看的值)
x/s 0x000000 (确定是一个字符串,打印这个字符串)

image-20240915232513043

可以看到存在第二个参数应该是402400,然后我就把密码弄成402400就寄了

然后又调了会儿,看了下input,是一个char*,才反应过来0x402400是指针,用x/s查看字符串即可

Phase2

image-20240916001453238

起始条件,第一位为1,然后上一个数($rsp-4)*2 == ($rsp),所以就是一个等比数列

Phase3

image-20240916005117503

首先压栈了两个东西,看起来很像是要读入两个东西

然后比较了rax有没有>1,这里经过试验好像是输入个数

然后不允许值超过7,并且进行了某个跳转,看到下面有一堆的赋值,并且赋值完跳到400fbe,猜测就是输入不同的偏移值,会跳到不同部分,然后比较0xc+$rsp的值和刚才赋值的rax,我这里选择了第一个数是5,然后查看跳转到了400f98,也就是把rax赋值成了0xce,所以第二个数直接输入0xce(206)即可

Phase4

image-20240916112742116

func4是一个奇怪的递归函数,我们要命中400ff2这一行,相当于要让rcx == rdi,rcx经过分析可以发现是一个类似于(l + r) >> 1的操作,这里多试几次就可以找出来哪些返回值会是0了,然后要求第二个输入是0,我这里一次成了(1 0),func4的逻辑比较奇怪,大致上是

1
2
3
4
5
6
7
def func4(int x, int y, int z)
{
int mid = (z - y) / 2 + x;
if (mid > x) return func4(x, y, mid - 1) * 2;
if (mid < x) return func4(x, mid + 1, z) * 2 + 1;
return 0;
}

我不太想去细推哪些值可以了

Phase5

image-20240916121010565

首先可以观察到这个密码应该长度是6

然后在最后和0x40245e比较,打开0x40245e可以看到是

1
flyers

直接输入密码后,去查看$rsp+0x10的值发现六个字符变化了,大概就是做了某些后处理,然后再观察一下看到给每个index加了一个偏移量0x4024b0,然后取出其中的字符,比对一下可以得到如下对应关系

1
2
maduiersnfotvbylSo you think you can stop the bomb with ctrl-c, do you?
abcdefghijklmno

所以ionefg对应flyers

Phase3

前两部分比较简单,分别是要求六个数不能有相等的,然后arr[i] = 7 - arr[i]

image-20240916191506024

从小到大分别为216543,这里我没看到node标志被坑了非常久,以及需要把x的输出调整w(也就是4字),我看他直接+8就用g,然后低8位直接完全看不懂是什么,换w后就明朗了

image-20240916192947751

这一段就是要求递减了,所以我们的密码应该是节点的index,然后要求节点的value逐渐递减

然后要记得我们的index做过翻转的(7-x)

答案是4 3 2 1 6 5

Secret Phase

image-20240916202325451

可以知道输入的数<0x3e8,然后要求输出为2,接下来看func7

image-20240916202456714

1
2
3
*rdi == rdx : ret -> 0
*rdi > rdx : ret *= 2
*rdi < rdx : ret = ret * 2 + 1

凑一个2出来即可,0->1(2+1)->2(2)

答案是22

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2024 0375w