pwnable.kr random 之 write up

---恢复内容开始---

首先看源代码:

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

这题就很简单啦,只要输入的key与random异或为0xdeadbeef便得到flag

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。
rand(产生随机数)
表头文件: #include
定义函数 :int rand(void)
函数说明 :

因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。

 1 #include<stdio.h> 
 2 #include<stdlib.h> 
 3 int main()
 4 {
 5  unsigned  random;
 6  random = rand(); 
 7  
 8  printf("%u", random);
 9  return 0;
10 }

得到:

执行random:

 

 

 

 

---恢复内容结束---

posted @ 2017-08-02 18:35  S_s_s  阅读(164)  评论(0编辑  收藏  举报