360赛

pwn2

这题还是有点意思的,考点在于补码与unsigned int。

首先观察bypass1,第一个if判断是不允许出现“ - ”号, 第二个if判断是x <= 359 , y <= 359 , x-y = 360

那么自然考虑-数。

而我们可以根据ida观察到,此次的两个bypass都是unsigned int,而 unsigned int的特点是:最高位不作为符号位,所有位都表示值。

bypass1

故此,0xFFFF FFFF ( 1111 1111 1111 1111 1111 1111 1111 1111)就表示-1

所以bypass1 可以通过x = 359 , y = 4294967295 绕过

bypass2

第二个是乘法,且条件为x > 1 && y > 360 && x * y =360

这次利用整数溢出

4294967295 + 361 = 4294967656 (0001 0000 0000 0000 0000 0000 0001 0110 1000)

毫无疑问超过了32位,unsigned int 取前32位,自然就是0000 0000 0000 0000 0000 0001 0110 1000

所以 只要x * y = 4294967656就可以通过