random
Posted beiweisanshidu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了random相关的知识,希望对你有一定的参考价值。
random
一、前言:
不知道为啥,ssh连不进去,所以借着大佬们的文章的截图,自己复现的。
二、题目:
1 #include <stdio.h>
2
3 int main(){
4 unsigned int random;
5 random = rand();
6 unsigned int key = 0;
7 scanf("%d",&key);
8 if ((key ^ random) == 0xdeadbeef ){
9 printf("Good!
");
10 system("/bin/cat flag");
11 return 0;
12 }
13 printf("Wrong , maybe you should try 2^32 cases.
");
14 return 0;
15 }
三、审计:
1、rand():产生一个随机数
计算机中的rand()函数是一个伪随机数
在标准C库中,函数rand()可以生成0-RAND_MAX之间的一个随机数。
RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关
(window下的RAND_MAX为:0x7fff=2^15-1,linxu下的RAND_MAX为:2^31-),
rand()默认等于rand(1),
因为种子相同,所以每次调用它时的第一个值都是相同。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
2、key ^ random:异或
异或运算:同一位上,相同为1,不同为0
四、利用:
1、写一个相同的程序,生成相同是随机数:
PS:%u:https://zhidao.baidu.com/question/153695515.html
2、下断点:
用gdb运行这个文件,在rand后打下断点,然后打印出random的值,然后再通过该值和0xdeadbeef进行异或运算出来目标值。然后重新运行输入目标值,得到flag.
五、参考:
https://www.cnblogs.com/p4nda/p/7122275.html
https://www.cnblogs.com/spd2016/p/5490903.html
https://blog.csdn.net/qq_35661990/article/details/82595062
以上是关于random的主要内容,如果未能解决你的问题,请参考以下文章