[Toddler's Bottle]-random

首先我们看源代码

#include 

int main(){
  unsigned int random;
  random = rand();  // random value!

  unsigned int key=0;
  scanf("%d", &key);

  if( (key ^ random) == 0xdeadbeef ){
      printf("Good!\n");
      system("/bin/cat flag");
      return 0;
  }

  printf("Wrong, maybe you should try 2^32 cases.\n");
  return 0;
}

可以看到random这个函数,由于没有设置种子(设置种子也要变化啊)所以可以知道这里是伪随机数,即每次的random都是同一个值,所以我们只需要找到这个值然后与0xdeadbeef异或即可得到key。

这里我们使用gdb调试来找到random的值(info register命令可以在gdb中查看寄存器的值)

[Toddler's Bottle]-random_第1张图片
image.png

这里我们可以看到rax寄存器中的值就是我们的random
然后我们将它与0xdeadbeef进行异或

image.png

得到key了
最后获取flag

image.png

你可能感兴趣的:([Toddler's Bottle]-random)