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的主要内容,如果未能解决你的问题,请参考以下文章

PHP 代码片段

如何在 python 中并行化以下代码片段?

常用js片段

如何为每个片段保存一个变量值以重用它? [关闭]

python访问你自己的公网ip地址的代码

微信小程序代码片段