您的位置:首页 > 编程语言 > C语言/C++

pwnable.kr [Toddler's Bottle] - random

2017-03-13 14:09 369 查看
c语言中取随机数函数rand()为伪随机,需要依赖srand()提供的随机数种子seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。没有置随机数种子直接调用rand(),得到的结果也是一样。

题目源码如下:

/* ssh random@pwnable.kr -p2222 (pw:guest) */
#include <stdio.h>

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;
}


使用gdb调试查看random的值,或者本体直接跑rand()得到固定的一个random的值。(这里需要严格在Linux中取指,不同的操作系统会影响这个定值的结果。)

笔者在这里使用本地调试取这个random的值:(这里注意数据定义为unsigned int 或long,因为结果3039230856>2^31,超出了int的上限)

#include <stdio.h>

int main()
{
unsigned int random;
random = rand();
unsigned int temp = 0xdeadbeef ^ random;
printf("%u\n", random);
printf("%u\n", temp);
return 0;
}


结果如下:

./random
1804289383
3039230856


正确输入后即可得到flag。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 random pwn