[Toddler's|[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。
【[Toddler's|[Toddler's Bottle]-random】这里我们使用gdb调试来找到random的值(info register命令可以在gdb中查看寄存器的值)
[Toddler's|[Toddler's Bottle]-random
文章图片
image.png
这里我们可以看到rax寄存器中的值就是我们的random
然后我们将它与0xdeadbeef进行异或
[Toddler's|[Toddler's Bottle]-random
文章图片
image.png
得到key了
最后获取flag
[Toddler's|[Toddler's Bottle]-random
文章图片
image.png

    推荐阅读