码迷,mamicode.com
首页 > 其他好文 > 详细

random

时间:2019-01-13 21:40:02      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:前言   beef   img   html   图片   div   技术分享   http   amp   

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!\n");
10         system("/bin/cat flag");
11         return 0;
12     }
13     printf("Wrong , maybe you should try 2^32 cases.\n");
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

标签:前言   beef   img   html   图片   div   技术分享   http   amp   

原文地址:https://www.cnblogs.com/beiweisanshidu/p/10264053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!