美文网首页
pwnable 笔记 Toddler's Bottle - ra

pwnable 笔记 Toddler's Bottle - ra

作者: pumpkin9 | 来源:发表于2018-07-10 20:28 被阅读0次

    pwnable.kr一道1point的题

    #include <stdio.h>
     int main()
    {
        unsigned int random;
        random = rand();    // random value!
        printf(%u,random);
        unsigned int key=0;
        scanf(%d, &key);
        if( (key ^ random) == 0xdeadbeef )
            {
            printf(Good!n);
            system(bincat flag);
            return 0;
        }
        printf(Wrong, maybe you should try 2^32 cases.n);
        return 0;
    }
    

    分析下代码

    发现输入的key只要和random异或等于 0xdeadbeef

    那么就可以得到flag

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        unsigned random
        random = rand();
        printf(%u,random);
        return0;
    }
    

    测试每次输出的都一样,rand函数返回的都是:1804289383

    and()函数用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。

    rand()会返回一个范围在0到RAND_MAX(32767)之间的伪随机数(整数)。

    在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同。

    rand()函数需要的头文件是:stdlib.h

    rand()函数原型:int rand(void);

    使用rand()函数产生1-100以内的随机整数:int number1 = rand() % 100;

    异或是可逆的

    1.jpg 2.png 输入3039230856 2=3.png

    就可以得到flag了

    flag:Mommy, I thought libc random is unpredictable…

    相关文章

      网友评论

          本文标题:pwnable 笔记 Toddler's Bottle - ra

          本文链接:https://www.haomeiwen.com/subject/wfbqpftx.html